My dotfiles

README.md

Avery's dotfiles #

chezmoi source for shell, Git, jj, desktop apps, and Claude Code (~/.claude) and Pi (~/.pi/agent) configuration, shared across personal and work machines and agent sandboxes.

Set up a machine #

Install chezmoi and jq (chezmoi uses jq to merge the agents' settings.json), then:

chezmoi init --apply https://tangled.org/did:plc:i3trz6p74rllsbieb43tbhuh

init asks for the machine type and any per-machine settings that type needs, and saves the answers to ~/.config/chezmoi/chezmoi.toml. Change them later with chezmoi edit-config, then run chezmoi apply. What each machine type skips is listed in .chezmoiignore.

Claude Code, Pi, and (except on sandboxes) Homebrew are installed separately. If one is missing, chezmoi apply still writes its config and tells you to apply again once it's installed.

Override settings #

Shared settings live in .chezmoidata/defaults.yaml. To override one on a single machine, set the same key under [data] in chezmoi.toml:

[data.pi.providers.anthropic.models]
fast = "claude-sonnet-5-5"
  • Overrides under [data] survive chezmoi init, except the Git identity keys, which init discards; other sections of chezmoi.toml do not survive.
  • Lists replace the default as a whole, so an override must repeat the entries it keeps.
  • Turning something off stops managing it but leaves it in place:
    • A removed plugin or package stays installed. Uninstall it with claude plugin uninstall <plugin>, or for a Pi package, run pi remove <source> before chezmoi apply (afterwards it no longer finds the package in Pi's settings).
    • With pi.webSearchUrl = "", ~/.pi/agent/web-search.json stays; delete it by hand.
    • With claude.otelEndpoint = "", the telemetry keys stay in env in ~/.claude/settings.json; chezmoi diff lists them as untracked. Delete them by hand.
    • With herdr = false, the integrations and ~/.config/herdr/ stay: run herdr integration uninstall claude and herdr integration uninstall pi, then delete the directory.

Make changes #

Edit files in the source (chezmoi cd) and run chezmoi apply, or after changing a live file, copy it back with chezmoi re-add <file>. re-add silently skips templates (*.tmpl) and the settings.json files; edit those in the source. Don't chezmoi add a settings.json: that replaces the merge with a copy of this machine's whole file.

chezmoi diff, status, and apply warn about two kinds of drift in a live settings.json: values that differ from chezmoi's, which apply overwrites without asking, and settings chezmoi doesn't track. Run chezmoi diff before apply to catch them; the warnings show what apply replaces and say which file to change. To silence a key the app writes on its own, add it to appKeys in that file's modify_settings.json.tmpl.

To push changes from a machine set up with the HTTPS URL, which is read-only, send pushes to the knot over SSH:

chezmoi git -- remote set-url --push origin git@knot.averyrive.rs:did:plc:i3trz6p74rllsbieb43tbhuh