These are Derrick Reimer's dotfiles. I'm using stow to manage symlinking.
- macOS or Linux (Debian/Ubuntu)
gitcurlsudoaccess
Note: Homebrew is automatically installed by bootstrap.sh on macOS.
Clone this repository to your home directory:
git clone https://github.com/derrickreimer/dotfiles.git ~/dotfiles
cd ~/dotfilesRun the bootstrap script:
./bootstrap.shPreview changes without applying them:
./bootstrap.sh --dry-runFor Debian/Ubuntu-based systems, run the Linux bootstrap script:
./bootstrap-linux.shPreview changes without applying them:
./bootstrap-linux.sh --dry-runAlternatively, you can install manually:
Install Homebrew packages (including stow):
brew bundle --file=brew/BrewfileSymlink configurations with stow:
# Symlink stow first to ensure .stow-global-ignore is applied
stow stow
# Symlink all packages
stow agents brew claude codex gemini ghostty git grok hunk kitty mise nvim opencode starship tmux vscode zsh
# Or symlink individual packages
stow zsh
stow nvimAgent skills live in ~/.agents/skills (the agents package). Claude Code reads
them via a symlink that stow can't fold on its own, so create it once:
mkdir -p ~/.claude ~/.agents/skills
ln -sfn ../.agents/skills ~/.claude/skillsSet up zsh as the default shell:
# Add Homebrew zsh to allowed shells
echo "$(brew --prefix)/bin/zsh" | sudo tee -a /etc/shells
# Change default shell
chsh -s "$(brew --prefix)/bin/zsh"Each directory is a stow package that maps to $HOME:
| Package | Description |
|---|---|
agents |
Shared agent skills (~/.agents/skills) |
brew |
Homebrew Brewfile for packages and casks |
claude |
Claude Code settings |
codex |
Codex settings |
gemini |
Gemini CLI settings |
ghostty |
Ghostty terminal config (Carbonfox theme) |
git |
Global gitignore |
grok |
Grok CLI config (~/.grok/config.toml only) |
hunk |
Hunk diff viewer (~/.config/hunk/config.toml) |
kitty |
Kitty terminal config (Carbonfox theme) |
mise |
mise runtime manager (Erlang, Elixir, Node.js) |
nvim |
Neovim config (based on Kickstart) |
opencode |
Opencode settings |
starship |
Starship prompt configuration |
stow |
Stow configuration |
tmux |
tmux configuration with vim-style keybindings |
vscode |
VS Code user settings |
zsh |
Zsh configuration with modular setup |
Add a new config to an existing package:
# Example: add a new zsh config file
mv ~/.config/zsh/newconfig.zsh ~/dotfiles/zsh/.config/zsh/
stow -R zshCreate a new stow package:
mkdir -p ~/dotfiles/newpackage/.config/newpackage
mv ~/.config/newpackage/config ~/dotfiles/newpackage/.config/newpackage/
stow newpackageUnstow a package (remove symlinks):
stow -D zshnvim/.config/nvim/doc/cheatsheet.md- Neovim keybindings reference (accessible via<leader>?in nvim)tmux-cheatsheet.md- tmux keybindings reference (accessible viaprefix + ?in tmux)
Zsh supports local overrides that aren't tracked in git:
# Create local config for machine-specific settings
touch ~/.config/zsh/local.zsh