Plonk-managed dotfiles for reproducing a macOS/zsh development host with one apply.
- Clone into
$PLONK_DIR(defaults to~/src/dotfiles):git clone git@github.com:richhaase/dotfiles.git ~/src/dotfiles cd ~/src/dotfiles
- Provision everything declared in
plonk.lock:plonk apply
- Verify the install and shell scripts:
plonk status zsh -n zshrc config/zsh/lib/*.sh shellcheck config/zsh/lib/*.sh
- Prerequisites: macOS with Homebrew, Git, Plonk, and zsh as your login shell.
- Prepare: Back up conflicting dotfiles, then review
plonk.yamlandplonk.lockto see which directories and tools will sync into$HOME. - Apply: Run
plonk applyafter any change or when setting up a new machine. Plonk expands the directories listed underexpand_directorieswhile respectingignore_patterns. - Troubleshooting:
plonk statussurfaces drift between the lockfile and the host before applying.- Inspect pending edits with
git statusinside$PLONK_DIR. - Re-run the shell lint commands above whenever you change anything under
config/zsh/lib/.
plonk apply— Provision or reconcile everything declared inplonk.lock.plonk status— Show drift between the current host andplonk.lock.plonk add <path>— Track a new dotfile or sync an edited one into the repo.plonk push/plonk pull— Move plonk-managed commits to/from the remote.zsh -n zshrc config/zsh/lib/*.sh— Syntax-check login scripts before committing.shellcheck config/zsh/lib/*.sh— Enforce portable shell style.
zshrc— Primary zsh entry point: PATH/env setup, completions, plugin loader, and tool inits for Starship, Atuin, fnm, zoxide, and direnv.gitconfig— Identity, delta paging, rerere, and other git defaults.tmux.conf— Multiplexer config (prefixC-a, vim-style pane motion).editorconfig— Canonical formatting rules (UTF-8, LF, 2-space indent except Go/Python).plonk.yaml/plonk.lock— Plonk manifest + lockfile describing every provisioned tool.bin/— User scripts (e.g.,bin/sync-repos); keep them executable and provide--help.config/zsh/lib/— Shell modules:plugin_loader.sh(pinned plugin installer) andaliases.sh(aliases + helper functions).config/helix/— Helix editor defaults plus language overrides.config/kitty/,config/bat/,config/atuin/— Terminal, pager, and shell-history preferences.config/starship.toml— Prompt config.codex/,gemini/commands/— AI/agent prompt and config files, grouped by vendor.
- Shell modules: Drop new helpers into
config/zsh/lib/(lowercase, hyphenated filenames, snake_case functions). Run the lint commands before committing. - App settings: Extend
config/helix/*.toml,config/kitty/kitty.conf, or other per-app configs to tweak editor/terminal behavior. - Prompt packs: Place new agent prompts under the matching vendor directory with a descriptive filename; keep secrets out of version control.
- Plugins: Pin third-party zsh plugins via
config/zsh/lib/plugin_loader.shto keep installs reproducible.