My personal dotfiles managed with GNU Stow.
Each directory represents a "package" that can be independently stowed. Files are organized as they would appear from ~:
dotfiles/
├── emacs/
│ └── .emacs.d/ # → ~/.emacs.d/
├── nvim/
│ └── .config/
│ └── nvim/ # → ~/.config/nvim/
├── zsh/
│ ├── .zshrc # → ~/.zshrc
│ └── .zprofile # → ~/.zprofile
├── kitty/
│ └── .config/
│ └── kitty/ # → ~/.config/kitty/
└── ... (other packages)
# Install GNU Stow
brew install stow- Clone this repository:
git clone git@github.com:abaj8494/dotfiles.git ~/dotfiles
cd ~/dotfiles- Initialize submodules (for tmux plugins):
git submodule update --init --recursive- Stow the packages you want:
# Stow individual packages
stow emacs
stow nvim
stow zsh
stow kitty
stow alacritty
stow tmux
stow aerospace
stow karabiner
# Or stow everything at once
stow */From the ~/dotfiles directory:
stow <package-name>This creates symlinks from ~ to the files in ~/dotfiles/<package-name>/.
stow -D <package-name>This removes the symlinks created by stow.
If you've made changes and want to refresh the symlinks:
stow -R <package-name>If you have existing config files that aren't yet in your dotfiles:
stow --adopt <package-name>This will move the existing files into your dotfiles repo and create symlinks.
- emacs: Emacs configuration with custom elisp modules
- nvim: Neovim configuration with Lua
- zsh: Zsh shell configuration
- kitty: Kitty terminal emulator
- alacritty: Alacritty terminal emulator
- tmux: Tmux configuration with plugins
- aerospace: AeroSpace window manager
- karabiner: Karabiner-Elements keyboard customization
- lf: lf file manager
- htop: htop system monitor
- neofetch: Neofetch system info
- gh: GitHub CLI
- zathura: Zathura PDF viewer
- xournalpp: Xournal++ note-taking
- rstudio: RStudio preferences
- bettertouchtool: BetterTouchTool presets
- iterm2: iTerm2 configuration
- pistol: Pistol file previewer
- ctpv: ctpv file previewer
- stpv: stpv file previewer
- The
.stow-local-ignorefile tells stow which files to ignore (git files, README, etc.) - Stow works by creating symlinks, so any changes you make to the files in
~will be reflected in the git repo - Remember to commit and push your changes regularly!
- Some packages (like
fish) may have permission issues - fix withsudo chown -R $(whoami):staff <package>/
- Always run stow commands from the
~/dotfilesdirectory - Use
stow -n -v <package>to do a dry run and see what would happen - If you get conflicts, you can use
stow --adoptto pull existing files into your repo - Keep sensitive files (like
.zsh_history,.z) in.gitignore
cd ~/dotfiles
# Check status
git status
# Add changes
git add .
# Commit
git commit -m "Update configs"
# Push to remote
git push origin macos