This repository is the source of truth for managed dotfiles. It is a personal setup first, but changes should still be made in a way that keeps chezmoi, shell startup, and machine portability predictable.
- Dotfiles manager:
chezmoi - Zsh plugin manager:
Sheldon - Runtime manager:
mise - Prompt:
Starshipor Warp-native prompt - Interactive management layer:
Serotonin
Do not reintroduce zinit or asdf. The old cheat payload has been removed.
dot_zshrc.tmpl: main rendered~/.zshrcdot_zprofile: login-shell initializationdot_path: shared PATH logicdot_zshrc.d/: modular zsh piecesdot_gitconfig.tmpl: global git configdot_config/sheldon/plugins.toml.tmpl: plugin listdot_config/mise/config.toml: managed tool versionsscripts/serotonin/: primary CLI/TUI UXscripts/dotfiles/: older helper layer
- Edit repository files, not files in
$HOME, unless the task is explicitly about a live local-only file. - Preview
chezmoioutput before broad apply. - Prefer targeted apply over full apply for shell and git changes.
- Validate syntax after shell/install changes.
- Keep commits focused and small when possible.
Recommended commands:
chezmoi diff
chezmoi apply ~/.zshrc ~/.zprofile ~/.path ~/.gitconfig
zsh -n dot_zprofile scripts/serotonin/main.zsh
bash -n install.sh
sheldon lock- Never commit secrets into tracked dotfiles.
- Local machine secrets should live in
~/.config/local-shell/env.zsh. - If shell behavior depends on a secret, keep the hook in the repo and the secret value outside the repo.
- Be conservative with startup-path changes.
- Be conservative with global aliases, especially destructive git aliases.
- Prefer
Serotoninas the user-facing layer when touching update/doctor flows. - When touching template files, think in terms of rendered output, not only source text.
- Keep macOS/Linux behavior explicit when it differs.
chezmoi execute-templatemay fail if unrelated garbage exists in the source tree; validate rendered snippets locally when needed.- For
dot_gitconfig.tmpl, render a stub file and test it withgit config -f <file> --list. - After plugin changes, regenerate lock state with
sheldon lock.
- Reduce legacy surface in
scripts/dotfiles/. - Keep README and TODO aligned with actual project state.
- Prefer removing dead config and payloads over hiding them behind ignores.