The idea behind Stow is simple. You have a dotfiles repository and you create directories for each package (util) you need a config for. In each directory, you keep version-controlled config files. And you use Stow to apply your symlinks.
dotfiles/
vim/
.vimrc
git/
.gitconfig
zsh/
.zshrc
Then each can be managed independently:
stow vim
stow git
stow zsh
Here’s how it all looks like for me:
brew install stow
git clone https://github.com/guilsa/dotfiles
cd dotfiles
stow --simulate --verbose=2 --target="$HOME" vim
If the output looks right, run:
stow --verbose=2 --target="$HOME" vim