Personal dev environment managed with GNU Stow. One command to bootstrap a fresh Mac or Linux machine.
git clone <repo-url> ~/.dotfiles
cd ~/.dotfiles
chmod +x install.sh
./install.shThe install script:
- Installs packages via Homebrew (macOS) or apt (Linux)
- Uses
stow --restowto symlink config packages into$HOME - Installs Oh My Zsh + zsh-vi-mode plugin
- Installs TPM and tmux plugins
- Creates
~/.zshrc.localand~/.gitconfig-localtemplates for machine-specific settings - Sets zsh as default shell
| Directory | Stowed? | Description |
|---|---|---|
nvim/ |
Yes | Neovim config → ~/.config/nvim |
tmux/ |
Yes | tmux config → ~/.tmux.conf |
zsh/ |
Yes | Zsh config → ~/.zshrc |
git/ |
Yes | Git config → ~/.gitconfig, ~/.gitignore_global |
claude/ |
Yes | Claude Code config → ~/.claude/ (settings, skills, MCP servers) |
iterm2/ |
No | iTerm2 color scheme (imported during install) |
scripts/ |
No | OS-specific install scripts |
| Plugin | Purpose |
|---|---|
| tokyonight.nvim | Color scheme |
| telescope.nvim | Fuzzy finder (files, grep, buffers) |
| nvim-treesitter | Syntax highlighting and code analysis |
| nvim-lspconfig + mason.nvim | LSP support with auto-installed servers |
| lsp-zero.nvim | Simplified LSP configuration |
| nvim-cmp | Autocompletion (LSP, buffer, path, snippets) |
| LuaSnip + friendly-snippets | Snippet engine and library |
| conform.nvim | Formatting (prettier, stylua, ruff, djlint, xmlformat) |
| nvim-lint | Linting (eslint_d) |
| nvim-ufo | Code folding |
| nvim-autopairs | Auto-close brackets/quotes |
| nvim-comment | Toggle comments |
| vim-tmux-navigator | Seamless nav between vim splits and tmux panes |
ts_ls, html, cssls, tailwindcss, svelte, lua_ls, graphql, emmet_ls, prismals, pyright
Required env vars (API keys, tokens, etc.) are listed in env.example. After cloning:
make env # scaffolds missing vars into ~/.zshrc.local
vim ~/.zshrc.local # fill in values
source ~/.zshrc.localFiles not tracked in git — created as templates on first install:
~/.zshrc.local— env vars, API keys, local PATHs (Pulumi, LM Studio, etc.)~/.gitconfig-local—includeIfblocks for work repos
The install script is idempotent — safe to run again at any time:
cd ~/.dotfiles && ./install.sh