Personal dotfiles, managed with GNU stow
(xstow works too — the commands below are compatible).
Each top-level directory is a stow package whose internal layout mirrors
$HOME. Stowing a package symlinks its contents into your home directory — e.g.
tmux/.tmux.conf → ~/.tmux.conf, and nvim/.config/nvim/ → ~/.config/nvim.
- Install stow:
brew install stow(orapt install stow). - Clone this repo to
~/dotfiles:git clone git@github.com:andrewhampton/dotfiles.git ~/dotfiles - From
~, stow the packages you want — one at a time:…or stow the common set in one go:stow -d dotfiles tmux
To remove a package's symlinks:cd ~ for pkg in claude editor-config git hammerspoon irb jj kitty nvim \ oh-my-zsh opencode ripgrep screen ssh tmux uv zed zsh; do stow -d dotfiles "$pkg" done
stow -D -d dotfiles tmux.
Folding note: stow symlinks a whole directory when its target doesn't yet exist in
~("tree folding"). Apps can then write new files straight into this repo (that's how a stray 46 MB.venvonce landed undernvim/). For folding-prone packages likenvimandzed,stow --no-foldinglinks per-file so app-generated state stays out of the repo.
| Package | Configures | Requires |
|---|---|---|
claude |
Claude Code (~/.claude) |
Claude Code |
editor-config |
EditorConfig defaults (~/.editorconfig) |
— |
emacs |
Emacs (~/.emacs.d) — legacy, unused |
Emacs |
git |
Git config, attributes, message, global ignore | git |
hammerspoon |
Hammerspoon (~/.hammerspoon) |
Hammerspoon + secrets (see below) |
irb |
Ruby IRB (~/.irbrc) |
Ruby |
jj |
Jujutsu (~/.config/jj) |
jj |
kitty |
kitty terminal (~/.config/kitty) |
kitty |
nvim |
Neovim (~/.config/nvim) |
Neovim |
oh-my-zsh |
Custom zsh theme (~/.oh-my-zsh/themes) |
oh-my-zsh (installed separately) |
opencode |
opencode (~/.config/opencode) |
opencode |
ripgrep |
ripgrep (~/.rgconfig, ~/.rgignore) |
ripgrep |
screen |
GNU screen (~/.screenrc) |
screen |
ssh |
ssh agent-forward helper (~/.ssh/rc) |
— |
tmux |
tmux (~/.tmux.conf + includes) |
tmux |
uv |
uv (~/.config/uv) |
uv |
zed |
Zed editor (~/.config/zed) |
Zed |
zsh |
zsh (~/.zshrc, ~/.zshenv) |
zsh + oh-my-zsh |
These top-level directories are not meant to be stowed into ~ — don't pass
them to stow:
ergodox/,infinity/— keyboard firmware (Ergodox Infinity, Infinity 60%) flashed withdfu-util. See their READMEs.iris/— Iris keyboard layout export (iris.json).screenshots/— image assets used by hammerspoon/README.md.
Some packages expect hand-created, gitignored files that are not tracked here:
hammerspoon:~/.hammerspoon/forecast_io_api_key.luaand~/.hammerspoon/gmail_creds.lua— see hammerspoon/README.md for the expected format.
The zsh config also sources ~/.secrets and ~/.env if present (both untracked).