My macOS dotfiles, managed with chezmoi.
- fish shell: zoxide, fzf.fish, git abbreviations
- neovim config (lazy.nvim)
- ghostty and kitty terminals
- herdr agent multiplexer
- lazygit, gh CLI
- karabiner key remaps
- starship prompt
- Brewfile with all packages (brew, casks, go tools)
- git and ssh config
- Claude Code: settings,
CLAUDE.md, claude-hud statusline
-
Install Homebrew and chezmoi:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install chezmoi -
Apply the dotfiles.
initasks for the git name, email and commit signing key for this machine (work or personal), thenbrew bundleinstalls everything from the Brewfile:chezmoi init --apply https://github.com/kryptamine/dotfiles
-
Make fish the login shell:
echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells chsh -s /opt/homebrew/bin/fish
-
Copy SSH keys into
~/.ssh(they are not in the repo).~/.ssh/configexpects:id_rsaforgithub.com-personal(this repo, personal projects)gh-enterpriseforgithub.com(work)
Commits are signed with the SSH key
initasks for (default~/.ssh/id_rsa.pub). Add it on GitHub as a Signing key (Settings → SSH and GPG keys) so commits show as Verified. -
Log in to GitHub CLI:
gh auth login. Accounts are per machine,hosts.ymlis not synced. -
Switch the repo to SSH so you can push, and enable the lint hook:
cd ~/.local/share/chezmoi git remote set-url origin git@github.com-personal:kryptamine/dotfiles.git git config core.hooksPath .githooks
-
Open
nvim: lazy.nvim installs plugins on first launch, mason installs LSP servers and formatters.
chezmoi runs in symlink mode: most files in ~ link straight into the repo, so editing ~/.config/fish/config.fish edits the repo. Templates (~/.gitconfig) are real files, edit them with chezmoi edit ~/.gitconfig.
| Task | Command |
|---|---|
| Start tracking a new config | chezmoi add ~/.config/foo |
| Pull and apply changes from GitHub | chezmoi update |
See what apply would change |
chezmoi diff |
| Go to the repo | chezmoi cd |
| Add a package | add it to ~/.Brewfile, then chezmoi apply reruns brew bundle |
| Add a fish plugin | fisher install <repo>, then chezmoi add the new files |
~/.claude/settings.json is a real file, not a symlink: chezmoi apply merges the shared base from .chezmoitemplates/claude-settings.json into it and keeps per-machine keys (herdr hooks, work plugins, autoMode). A setting changed with /config stays local until you copy it into the base.
On a new Mac, run /claude-hud:setup once in Claude Code to install the statusline launcher, then chezmoi apply ~/.claude/settings.json to restore the portable statusline command.
z <dir>jumps to a frecent directory,zipicks one with fzfCtrl+Rhistory,Ctrl+Alt+Ffiles,Ctrl+Alt+Lgit log,Ctrl+Alt+Sgit status,Ctrl+Alt+Pprocesses,Ctrl+Vvariables- Abbreviations expand on space:
ggit,gcocheckout,gddiff,gppush,glpull,gsstatus,lglazygit,vnvim,czchezmoi
The pre-commit hook checks fish (fish_indent), Lua (stylua) and shell (shellcheck). Run .githooks/pre-commit to check by hand.
