Personal dotfiles managed with chezmoi for syncing configuration across machines.
- zsh —
zinit-managed setup with thestarshipprompt,zsh-autosuggestions,zsh-completions, andfast-syntax-highlighting(auto-installed on first shell start). Includes safety aliases (rm -I,cp -i,mv -i), shortcuts, andnvmloader. - git — sane defaults (rebase on pull, autosquash,
zdiff3conflict style, histogram diffs,rerere), handy aliases (st,lg,wip,undo, …), and includes~/.gitconfig.localfor machine-specific overrides (e.g. user name/email). - neovim — Lua config bootstrapped with lazy.nvim and the tokyonight colorscheme (night variant, transparent background).
- ghostty (macOS only) — Tokyonight theme, semi-transparent background with blur, block cursor, 100k scrollback, option-as-alt, and transparent titlebar.
- opencode — opencode AI coding assistant config with LSP and formatter support, system theme TUI, and granular permission controls (read/search allowed, edit/bash require confirmation).
- yabai (macOS only) — bsp tiling layout, 10pt gaps/padding,
fnas the mouse modifier. - skhd (macOS only) — hotkeys for iTerm, window float/zoom toggles, and space focus/move bindings (
cmd+alt+<n>,shift+cmd+<n>).
The macOS-only configs (ghostty, yabai, skhd) are skipped automatically on other platforms via .chezmoiignore.
Install the following before applying the dotfiles:
git
zsh
neovim
# optional
opencode
# optional, macOS only
ghostty
yabai
skhd
Make sure zsh is the default shell:
sudo chsh -s $(which zsh) $USERInstall chezmoi (see the docs for more options):
# macOS
brew install chezmoi
# Linux (or any platform with curl) — installs to ./bin
sh -c "$(curl -fsLS get.chezmoi.io)"
# move the binary to a directory on $PATH
sudo mv ./bin/chezmoi /usr/local/bin/Initialize and apply directly:
chezmoi init --ssh --apply $GITHUB_USERNAMEOr, on a new machine without chezmoi installed, bootstrap everything in one step (downloads the binary, then initializes and applies):
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --ssh --apply $GITHUB_USERNAMETwo untracked files in $HOME hold machine-specific or sensitive values. Example templates are included in this repo:
~/.gitconfig.local— git identity and any per-machine git overrides. Included from~/.gitconfigvia the[include]directive. See dot_gitconfig.local.example.~/.secrets—KEY=valuelines auto-exported as environment variables by~/.zshrc(e.g.GITHUB_TOKEN, API keys). See dot_secrets.example.
Copy each example into $HOME and fill in your values:
cp ~/.local/share/chezmoi/dot_gitconfig.local.example ~/.gitconfig.local
cp ~/.local/share/chezmoi/dot_secrets.example ~/.secrets
chmod 600 ~/.secretsEdit a managed file and apply the change locally:
chezmoi edit ~/.zshrc
chezmoi diff # preview pending changes
chezmoi applyCommit and push edits back to the remote repo:
chezmoi cd # jumps into the source repo
git add .
git commit -m "update zsh config"
git push
exit # leave the chezmoi shellPull the latest changes from remote and apply them:
chezmoi update