This file provides guidance to AI coding agents when working with code in this repository.
macOS dotfiles managed with GNU stow. All config files live in this repo and are symlinked into $HOME via stow.
just link # stow --restow --adopt --target="$HOME" .
just unlink # stow --delete --target="$HOME" .
just brew-install # brew bundle --file=Brewfile
just brew-dump # brew bundle dump to Brewfile
just check # zsh syntax, Brewfile, and whitespace checks
source ~/.zshrc # reload shell after changesNo tests or linting — this is a shell configuration repo.
The repo root mirrors $HOME. Running just link symlinks everything (except files in .stow-local-ignore) into the home directory. For example, .config/zsh/aliases.zsh becomes ~/.config/zsh/aliases.zsh.
Files excluded from stow: .git, .gitignore, AGENTS.md, Brewfile, CLAUDE.md, LICENSE.md, README.md, justfile, .DS_Store.
.zshrc sources 10 modules from ~/.config/zsh/ in a specific order:
- env.zsh — Environment variables (
EDITOR=nvim,PAGER=bat, 1Password SSH, XDG) - options.zsh — Shell options
- path.zsh — PATH additions (fnm, bun, pnpm, pyenv, Java)
- history.zsh — History settings
- plugins.zsh — Antidote plugin manager; plugin lists live in
.config/antidote/ - completions.zsh — Completion system
- fzf.zsh — FZF configuration and theme
- aliases.zsh — Shell aliases
- functions.zsh — Custom functions (
brewwrapper for auto-syncing Brewfile,tmfor tmux) - tools.zsh — Tool initialization via
eval(fzf, zoxide, starship, fnm, pyenv)
Order matters — plugins.zsh must load before completions.zsh, and tools.zsh comes last to initialize tools after plugins are loaded.
.gitconfig uses [include] to compose from ~/.config/git/:
core.gitconfig— Editor, EOL, compressionuser.gitconfig— Author identityappearance.gitconfig— Colors, diff, blamebehavior.gitconfig— Push/pull/rebase/mergetools.gitconfig— Submodules, tagscredentials.gitconfig— 1Password / gh CLI auth
LazyVim-based config in .config/nvim/. Plugin specs in lua/plugins/. Uses folke/snacks.nvim for UI and file explorer (neo-tree is disabled).
.config/tmux/tmux.conf — TPM-managed plugins, vim-style navigation, and Tokyo Night status styling.
- Tokyo Night theme is applied consistently across all tools (ghostty, neovim, tmux, fzf, bat, eza, lazygit, starship).
- Guard all tool usage with
command -v <tool> >/dev/null 2>&1before referencing it. - SSH uses 1Password agent —
SSH_AUTH_SOCKpoints to~/.1password/agent.sock. - Run
just checkbefore committing shell/config changes. - Use Conventional Commits for every commit — format commit messages like
feat: ...,fix: ...,chore: ...,docs: ..., etc. Do not create non-conventional commit messages.
- Place files in the repo mirroring their
$HOMElocation (e.g.,.config/toolname/config) - Run
just linkto create the symlink - If adding a new ZSH module, source it from
.zshrcin the appropriate position