Modern dotfiles managed with GNU Stow for easy installation and maintenance across machines.
- zsh - Zsh shell configuration
- git - Git configuration and global ignore file
- tmux - tmux terminal multiplexer with Catppuccin theme
- nvim - Neovim with LazyVim setup
- ghostty - Ghostty terminal emulator
- starship - Cross-shell prompt
- ssh - SSH client configuration
- GNU Stow
- Git
macOS:
brew install stowLinux (Debian/Ubuntu):
sudo apt install stow- Clone this repository:
git clone https://github.com/jesse-spevack/dotfiles.git ~/dotfiles
cd ~/dotfiles- Install all packages:
stow zsh git tmux nvim ghostty starship sshOr install packages selectively:
stow zsh git nvimIf you already have dotfiles in place, you'll need to back them up or remove them first:
# Backup existing configs
mv ~/.zshrc ~/.zshrc.backup
mv ~/.gitconfig ~/.gitconfig.backup
# etc...
# Then run stow
cd ~/dotfiles
stow zsh gitGNU Stow creates symlinks from this repo to your home directory. For example:
~/dotfiles/zsh/.zshrc → ~/.zshrc
~/dotfiles/nvim/.config/nvim/ → ~/.config/nvim/
This means you can edit files directly in your home directory, and changes are automatically tracked in the git repo.
- Edit your config files as normal (e.g.,
~/.zshrc) - Changes are immediately reflected in the repo
- Commit and push:
cd ~/dotfiles
git add .
git commit -m "Update zsh config"
git pushTo remove symlinks for a package:
cd ~/dotfiles
stow -D zsh # Removes zsh symlinks- Clone the repo
- Install GNU Stow
- Run
stowfor the packages you want - Done!
Each directory represents a "package" that mirrors your home directory structure:
dotfiles/
├── zsh/
│ └── .zshrc
├── nvim/
│ └── .config/
│ └── nvim/
│ └── init.lua
└── git/
├── .gitconfig
└── .config/
└── git/
└── ignore
- SSH keys are not tracked (see
.gitignore) - Generated files like
lazy-lock.jsonare excluded - Old dotfiles from previous setup are in
old/directory