Managed with GNU stow.
# Clone the repository
git clone https://github.com/anrawines/stowdot.git ~/.config/dotfiles
# Run the install script (installs packages + sets up stow)
bash ~/.config/dotfiles/install.shThe script will:
- Install yay if not already present
- Install all required packages (stow, bash, zsh, vim, neovim, git, tmux, openssh)
- Backup existing configs (appended with .bak)
- Symlink all dotfiles using stow
cd ~/.config/dotfiles
stow bash zsh vim git tmux ssh nvimEach directory is a "package" that mirrors the home directory structure. Use stow to symlink them:
# Stow a single package
stow nvim
# Stow multiple packages
stow bash zsh vim git
# Stow all
stow ./
# Unstow a package (remove symlinks)
stow -D nvim
# List what would be stowed (dry-run)
stow -n nvim- bash/ - Bash configuration (.bashrc, .bash_profile)
- zsh/ - Zsh configuration (.zshrc)
- vim/ - Vim configuration (.config/.vim/.vimrc, .vimrc)
- nvim/ - Neovim configuration (.config/nvim/init.vim, init.lua)
- git/ - Git configuration (.config/git/.gitconfig, .gitignore_global)
- tmux/ - Tmux configuration (.config/tmux/tmux.conf)
- ssh/ - SSH configuration (.ssh/config)
Stow mirrors directory structures. The path inside each package package should match the full path from home (~).
Example:
dotfiles/nvim/.config/nvim/init.lua
↓ stow ↓
~/.config/nvim/init.lua (symlink)
dotfiles/vim/.vimrc
↓ stow ↓
~/.vimrc (symlink)
- GNU stow creates symlinks from dotfiles in their respective directories to your home directory
- Stow automatically creates parent directories as needed
- Use
.stow-local-ignoreto ignore files during stowing - Each package directory should replicate the directory structure within
$HOME