Files
dotfiles/AGENTS.md
T
Prad Nukala 30314160f1 chore(packages): declare every tool the configs reference
Audit of configs, scripts, tmux-palette items and television cables
against installed packages. Adds the missing pacman/AUR/brew entries,
a [omarchy] repo list installed only where that repo is configured,
and cargo installs in 40-post. 10-packages filters lists with pacman -T
so provider packages (mise-bin, yazi-git) are not replaced, and uses
yay with paru as fallback. noctalia-shell -> noctalia-git (AUR name).
2026-10-16 12:01:52 -04:00

5.0 KiB

AGENTS.md

chezmoi source for $HOME. mode = "symlink": plain files in $HOME are symlinks into this repo, so editing ~/.config/foo/bar edits dot_config/foo/bar directly. Templates (*.tmpl), private_, executable_ targets are rendered copies — edit the source, then chezmoi apply.

Config lives in three places. Check which one before editing.

1. Local (this repo)

dot_* trees committed here. Edit in place, commit here. Docs for each tool are in docs/; update the matching page when behavior changes.

  • Never edit a rendered copy of a .tmpl; edit the .tmpl and run chezmoi apply <path>.
  • Scripts: .chezmoiscripts/run_*. Data: .chezmoidata/*.yaml (packages, aliases, skills).
  • Ignore rules: .chezmoiignore.tmpl. Repo docs (AGENTS.md, README.md, docs/) are listed there so they never land in $HOME.

2. Submodules (.gitmodules)

Path Repo
dot_config/fish prdlk/fish
dot_config/hypr prdlk/hypr
dot_config/niri prdlk/niri

Still applied by chezmoi like local files, but the git history is separate:

  1. cd dot_config/<app>, edit, commit, push there.
  2. cd back to the root and commit the updated submodule pointer.

Fresh clone: git submodule update --init.

3. Externals (.chezmoiexternals/*.toml, .chezmoiexternal.toml)

git-repo externals. chezmoi clones them into $HOME when missing and fast-forwards (--ff-only) at most every refreshPeriod. The source tree holds nothing for these — only the .toml.

Target Repo Declared in
~/.config/kitty prdlk/kitty .chezmoiexternals/kitty.toml
~/.config/ghostty prdlk/ghostty .chezmoiexternals/ghostty.toml
~/.config/tmux prdlk/tmux .chezmoiexternals/tmux.toml
~/.config/tmux-palette prdlk/tmux-palette .chezmoiexternals/tmux-palette.toml
~/.config/television prdlk/television .chezmoiexternals/television.toml
~/.config/yazi prdlk/yazi .chezmoiexternals/yazi.toml
~/.omp prdlk/omp .chezmoiexternals/omp.toml
~/.config/nvim prdlk/nvim .chezmoiexternal.toml (no refresh; local checkout wins)
~/.config/tmux/plugins/tpm tmux-plugins/tpm .chezmoiexternal.toml
~/.config/bat/syntaxes/sublime-purescript-syntax tellnobody1/… .chezmoiexternal.toml

Editing: cd ~/.config/<app> (the live checkout), edit, commit, push there. Nothing to commit in this repo. Do not chezmoi add these paths.

Local working copies under ~/Code/github.com/prdlk/<app> are ordinary clones of the same repos; ~/.config/<app> is the one chezmoi manages and the one tools read.

Pulling a remote change before the refresh window: chezmoi apply --refresh-externals ~/.config/<app> (or git pull in the checkout). --ff-only means a diverged local checkout silently stays put — commit or stash first.

Moving a config out to an external

  1. Create the repo, copy the files (strip chezmoi prefixes; a symlink_x file becomes a real symlink), commit, push.
  2. Add .chezmoiexternals/<app>.toml copying tmux.toml.
  3. git rm -r dot_config/<app>; drop any <app>-specific lines from .chezmoiignore.tmpl / .gitignore.
  4. mv ~/.config/<app> /tmp/bak && chezmoi apply --force ~/.config/<app>; diff against the repo, then delete the backup.
  5. Update docs/ (the tool's page, docs/terminal/index.mdx or sibling index, docs/chezmoi/externals-and-ignore.mdx) and any alias pointing at the old source path (dot_config/fish/conf.d/20-aliases.fish, .chezmoidata/aliases.yaml).

Packages: every referenced tool must be declared

.chezmoidata/packages.yaml is the install manifest; the goal is chezmoi init --apply on a fresh Arch (Omarchy) machine yields a working setup. When a config, script, tmux-palette item, television cable requirements, or compositor binding starts calling a new binary, declare its package in the same change:

Key Installed by When
arch.pacman / arch.aur 10-packages (pacman / yay or paru) every Linux role
arch.desktop.pacman / .aur same roles desktop, laptop
arch.desktop.omarchy pacman, only if pacman-conf -l lists omarchy Omarchy machines
darwin.brew / .cask Homebrew macOS
shared.cargo 40-post, if cargo exists every OS
shared.gh_extensions 20-gh-extensions every OS

Find the package with pacman -Qo "$(command -v <bin>)"; pacman -Qm lists AUR/foreign packages, pacman -Si <pkg> shows the repo (extra vs omarchy). Verify names before committing: pacman -Si for repo packages, https://aur.archlinux.org/rpc/v5/info?arg[]=<pkg> for AUR, https://formulae.brew.sh/api/formula/<name>.json for brew. Hyprland/Waybar/omarchy-* come with Omarchy and are not declared. Tools installed through mise (~/.config/mise/config.toml, local-only) are not covered by the manifest.

Verify

  • chezmoi diff empty after apply.
  • chezmoi managed | grep <app> shows the target.
  • Externals: git -C ~/.config/<app> status -sb clean and tracking origin/main.