Finishes the purge. These two surfaces were left out of the earlier commit
because the memory store is auto-generated, but both are read back into every
future session, so the name was still reaching the agent.
58 sites across 16 files: hostname, both LAN addresses, the SSID. Special-cased
the compound names a blind token swap breaks ('dank@the workstation/dankclaw',
'on the workstation/Dankclaw/Dankserver') and reworded the four that came out
ungrammatical. Facts kept: the hardware inventory of the box, the noctalia
architecture history, and today's own purge lessons all survive intact — only
the identifiers are gone.
Non-memory: the tracked .pre-pull-backup snapshot of a managed skill, whose
live counterpart was already clean.
4.2 KiB
4.2 KiB
name, description
| name | description |
|---|---|
| command-center-dotfiles-import | Runbook for importing client env-layer configs into the command-center repo and deploying them via stow on new fleet machines; decisions agreed with Frank 2026-09-09 (pre-execution — verify execution state before assuming done). |
Design agreed with Frank for importing client application/environment configs into the ~/.omp command-center repo and deploying them on fresh machines. Status: plan agreed, not yet executed — check repo state (does dotfiles/ or scripts/deploy.sh exist?) before re-deriving; if already implemented, this becomes the operating model, not a to-do.
Agreed decisions (each was an explicit user choice)
- Target: unknown/TBD fresh machine → design stays host-agnostic; deploy derives overrides from
$(hostname)at run time. Nothing hardcodes a target. - Scope: environment layer only — niri (+cfg includes), gtk-3.0/4.0 settings, ghostty, alacritty, shell rc files (
.zshrc,.bashrc,.profile,.p10k.zsh), fish, systemd user units, autostart, dconf. App data (browser profiles, vaults, DBs) never imported. - Layout: stow-style package dirs
dotfiles/<pkg>/<home-relative path>inside the repo; repo clones to~/.ompon every host that runs the harness (full command-center clone, not env-layer only). - Deploy mechanism: symlink farm —
stow -t ~from~/.omp/dotfiles; relative symlinks within$HOMEwork because repo root lives inside$HOME. - Dogfood order: convert the workstation itself (real dirs → symlinks via adopt) BEFORE any target import; iterate where the compositor reload is observable.
- Secrets policy: never commit secret values. Split rc files into committed logic + untracked sourced-if-exists stub (
~/.config/environment.d/secrets.envor.zshrc.local); real values provisioned out-of-band only on machines that need them. Pre-commit secret scanner stays as safety net, not gate of first resort. - Divergence:
zz-<hostname>override package stowed LAST with--override; only per-host diffs live there. (Stow descends into conflicting symlinked dirs — per-file overrides only work via this last-stowed--overridepattern.) - Deploy trigger: explicit
scripts/deploy.shinvocation, human- or agent-invoked. NO auto-deploy on pull — pull and deploy are separate decisions;--check= drift report mode. - Ownership: Frank is sole push authority; exactly one editing agent at a time → no multi-writer race machinery needed. Each host's agent edits only its own
zz-<hostname>package. - Conflict policy: pre-existing regular file that differs from repo truth → move to timestamped
.quarantine/dir on the target (neverrm, same convention as this repo's trash rule), symlink anyway, print every replacement in deploy output and--checkreport. Repo truth always wins; divergence recoverable from quarantine. - First-clone auth: human types credential once console-side (URL-with-token or prompt); the new machine's secrets exist only there afterward.
Implementation gotchas baked into the design
core.hooksPathis a per-clone local setting — does NOT survive clone; bootstrap/deploy must set it on every fresh clone or the secret-gate pre-commit hook silently doesn't run there.- dconf/gsettings are databases, not files: import as
dconf dump /text into repo; deploy runsdconf loadinstead of symlinking. - p10k installer and toolchain hooks append to rc files at install time — expect conflicts on
.zshrc-class files at first adopt; quarantine-and-replace handles it, but diff live-vs-repo before adopting so pre-existing drift is seen, not silently adopted. - Known secret at import time:
GITEA_TOKENexport lived in.zshrc(line ~22) on the workstation — quarantine BEFORE importing rc files; consider token rotation at cutover since it had been exposed in plaintext rc + remote URL.
Deploy script spec agreed
scripts/deploy.sh: sets hooksPath → stows all base packages → stows zz-$(hostname) with --override → first run uses --adopt for pre-existing identical files → divergent files quarantined-and-reported; --check mode emits drift report (modified tracked files vs deployed symlinks) without mutating.