One Command to Rule Them All. A robust, idempotent, and automated setup for my development environment, powered by GNU Stow.
This repository contains my personal configuration files ("dotfiles") and a robust installation script. It is designed to be:
- Automated: Sets up a new machine in minutes.
- Idempotent: Safe to run multiple times without breaking configurations.
- Organized: Uses Stow to manage symlinks cleanly.
We use GNU Stow to manage configurations. Stow creates symbolic links from this repository to your home directory, keeping your version control clean and your home directory organized.
graph TD
subgraph "Dotfiles Repository (~/dotfiles)"
A[zsh/.zshrc]
B[nvim/.config/nvim/init.lua]
C[git/.gitconfig]
end
subgraph "Home Directory (~/)"
D[.zshrc]
E[.config/nvim/init.lua]
F[.gitconfig]
end
A -.->|symlink| D
B -.->|symlink| E
C -.->|symlink| F
- macOS or Linux (Ubuntu/Debian/Arch)
gitinstalled
Clone the repository and run the setup script:
git clone https://github.com/roycrisses/system-provisioning.git ~/dotfiles
cd ~/dotfiles
./install.sh- Backup: Existing config files are moved to
~/.dotfiles_backup/to prevent data loss. - Install: Dependencies like
stoware installed automatically if missing. - Link: Configurations are symlinked to your home directory using Stow.
- Setup: Plugins for Zsh and Neovim are initialized.
The repository is organized by "package" (application), making it easy to see where everything lives.
~/dotfiles
├── 📂 zsh/ # Zsh configuration
│ └── .zshrc
├── 📂 nvim/ # Neovim configuration
│ └── .config/nvim/
│ └── init.lua
├── 📂 git/ # Git configuration
│ └── .gitconfig
├── 📂 tmux/ # Tmux configuration
│ └── .tmux.conf
├── install.sh # 🚀 Main entry point
└── README.md # You are here
To add machine-specific settings that you don't want to commit (e.g., API keys, work-specific paths):
- Zsh: Create
~/.zshrc.local(ensure your.zshrcsources it). - Git: Use
git config --global --editto add local user settings.
Contributions are welcome! Please fork this repository and open a pull request.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Authored by Roy Crisses