Dotfiles managed with GNU Stow. Works on macOS and Fedora Linux.
Each top-level directory is a stow package — its contents mirror your home directory:
dots/
├── bob/ → ~/.config/bob/
├── ghostty/ → ~/.config/ghostty/
├── nvim/ → ~/.config/nvim/
├── systemd/ → ~/.config/systemd/user/
├── tmux/ → ~/.config/tmux/
├── wezterm/ → ~/.config/wezterm/
A few bash files (.bashrc, .bash_profile, .blerc, .fzf.bash) live at the repo root and aren't managed by stow.
git clone https://github.com/kyle/dots ~/dots
cd ~/dots
./install.shThe install script works on macOS and Fedora Linux. It will:
- Install system packages (
stow,fzf,fd,tmux,direnv) - Stow config packages (OS-appropriate selection)
- Set bash as your default shell
cd ~/dots
stow nvim # creates ~/.config/nvim/ → dots/nvim/.config/nvim/
stow ghostty tmux wezterm # multiple at oncestow -D nvim # removes the symlinks, leaves the files in dots/ intactstow -n -v nvim # dry run — shows what would be linked without doing itMost modern tools use ~/.config/<tool>/. Create a matching structure inside a new package directory:
# Example: adding Alacritty
mkdir -p alacritty/.config/alacritty
cp ~/.config/alacritty/alacritty.toml alacritty/.config/alacritty/
stow alacrittyThe key idea: the path inside the package directory, relative to the package root, must match the path relative to $HOME.
For tools that use ~/.<file> (no .config directory):
# Example: adding .gitconfig
mkdir git
cp ~/.gitconfig git/.gitconfig
stow gitA single package can manage as many files as you want:
wezterm/
└── .config/
└── wezterm/
├── wezterm.lua
├── fonts.lua
├── keybinds.lua
└── utils.luastow wezterm symlinks the entire wezterm/ directory under ~/.config/.
All handled by install.sh, but for reference: