Files
command-center/omp-docs/inventory/home-config-census.md
T
Frank 3022277167 Stop the deploy tier from reverting live theme state
Three findings from verifying the #41 merge against the live box with
`deploy.sh --check`. One commit because they share the deploy tier, its
documentation, and the first test file that tier ever had.

**1. Generated palette output was tracked, and sync would have restored it over a
live theme.** `dotfiles/zz-blankpad/niri/.config/niri/noctalia.kdl` (`b3d3df4`,
2026-10-18) sat byte-identical to the live file — harmless while the palette held, and
`--check` was already proposing `ADOPT … noctalia.kdl`. The moment the theme changed, the
next sync would have quarantined the live file and reinstated 2026-10-18's colours.
`deploy.sh` now refuses the class outright (`SKIP … (generated theme output)`), `.gitignore`
carries the matching patterns so it cannot be re-added, and the file is untracked.

**2. A `zz` override older than the file it overrides.** `dotfiles/zz-blankpad/niri/…/
layout.kdl` held focus ring `width 2` / `#e01b24` (`7b7dbf5`, 2026-10-17) while base
absorbed `b3d3df4` (2026-10-18): `width 4`, `#ff8c00`. Stow order makes `zz-*` win, and a
cross-package owner change relinks *silently* — no quarantine, no warning. Live was linked
to base, the newer intent, so `--check` printed `RELINK … layout.kdl` every run and one
unattended `deploy.sh` would have reverted the amber focus ring. The duplicate is deleted;
base owns the file.

**3. Two topologies I had asserted and not measured.** The media law and the `.gitignore`
comment both said `~/.local/share/noctalia/wallpapers` symlinks into the repo, so deleting
the tracked copies would blank the desktop. Measured: it is a real directory of real files
that Noctalia owns; the repo held a duplicate, and the #41 merge deleted that duplicate
without the desktop flickering. The correct general law replaces the false one — untracking
a path deletes the file in every other checkout, `git rm --cached` on the branch
notwithstanding — and the restore procedure now points at the app's directory, which
`deploy.sh` does not manage.

The guard is `tests/deploy.bats`, black-box over exit status, stdout, the symlink shape
under `$HOME`, and the quarantine directory. Before the change: test 1 and test 2 fail,
test 2 because the live palette really is quarantined and reverted. After: 4/4, including
the control that an ordinary identical config is still adopted — an exclusion nobody can
turn off is just a broken tool.

Verification: `bats tests/` 66/66, `kb-lint.sh omp-docs` 0 violations, `kb-coverage.py` 0
issues, and live `deploy.sh --check` on blankpad reports `SKIP … (generated theme output)`
with `actions=0` instead of `ADOPT … noctalia.kdl`. The real `deploy.sh` run that clears the
remaining `RELINK` lines is deliberately left until this is in main — running it from a
worktree would repoint live symlinks into a checkout the heartbeat reaps.

Refs #42
2026-10-20 17:08:06 -07:00

13 KiB

type, title, description, tags, created, census-date, verified, source
type title description tags created census-date verified source
reference Home Configuration Census (blankpad) Per-file tracked-vs-box-only census of ~/.config on blankpad — the input for the dotfiles pruning/adoption session.
inventory
census
dotfiles
config
2026-08-28 2026-10-20 2026-10-20 blankpad (CachyOS, /home/blank)

This page is the input for the dotfiles pruning/adoption session: for every ~/.config entry it separates what the repo already tracks from what lives only on this box, and sorts the box-only half into adopt / never-track / prune.

Method

Classification is per FILE, not per directory: the tracked unit is a symlink into ~/.omp/dotfiles/. A directory can look "real" (a plain folder, not itself a symlink) while every file inside it is a tracked symlink — niri and gtk-3.0 do exactly that. Conversely a directory can be a whole symlink into dotfiles (lazyvim) and be entirely tracked. So a directory-level verdict lies; only the leaf symlink target is ground truth.

  • tracked = a file whose fully-resolved target (readlink -f) is under /home/blank/.omp/dotfiles/.
  • box-only = a regular file, or a symlink that resolves elsewhere.

Rerun this classifier rather than trusting the table below:

DOT=/home/blank/.omp/dotfiles; CFG=/home/blank/.config
for d in "$CFG"/*; do
  [ -L "$d" ] && case "$(readlink -f "$d")" in "$DOT"/*) echo "$(basename "$d"): tracked=ALL box-only=0"; continue;; esac
  [ -d "$d" ] || { echo "$(basename "$d"): FILE (top-level)"; continue; }
  tr=0; bo=0; names=""
  while IFS= read -r -d '' f; do
    if [ -L "$f" ]; then case "$(readlink -f "$f")" in "$DOT"/*) tr=$((tr+1)); continue;; esac; fi
    bo=$((bo+1)); names+=" ${f#"$CFG"/}"
  done < <(find "$d" -mindepth 1 \( -type f -o -type l \) -print0 2>/dev/null)
  printf '%s: tracked=%d box-only=%d%s\n' "$(basename "$d")" "$tr" "$bo" "$names"
done

~/.config — tracked vs box-only

Profile/browser dirs (mozilla 5471 files, obsidian 99, FreeTube 56, nirimod 116, google-chrome-for-testing 5) are app state, never tracked, and are omitted as rows. Box-only bulk that is regenerated-by-the-program is named by category, not file-by-file.

~/.config/ dir tracked box-only box-only files
alacritty 1 1 themes/noctalia.toml (generated)
autostart 0 3 Flameshot.desktop, cachyos-hello.desktop, .AGENTTRASH/Handy.desktop
bat 0 2 config, themes/noctalia.tmTheme (generated)
btop 0 2 btop.conf, themes/noctalia.theme (generated)
cachyos 0 1 cachyos-hello/cachyos-hello.log (state)
cava 0 1 themes/noctalia (generated) — program absent, prune
crush 0 37 skills/<37> — skills-CLI install
containers 0 2 systemd/franksign-db.container, systemd/postgres.env (see §Owned-elsewhere / secret tier)
dconf 0 1 user (compiled dconf db, state)
devin 0 37 skills/<37> — skills-CLI install
fastfetch 0 1 themes/noctalia.jsonc (generated)
fish 2 1 fish_variables (fish var store, state)
flameshot 0 1 flameshot.ini
foot 0 2 foot.ini, themes/noctalia (generated) — program absent, prune
fzf 0 2 themes/noctalia.sh, themes/noctalia.fish (generated)
ghostty 2 1 themes/noctalia (generated)
glow 0 2 glow.yml, noctalia.json (generated)
goose 0 37 skills/<37> — skills-CLI install
gtk-3.0 3 0 —
gtk-4.0 2 1 servers (KDE-generated)
helix 0 1 themes/noctalia.toml (generated) — hx absent, prune
herdr 0 1 noctalia-colors.toml (generated)
hypr 0 2 hyprland.conf, noctalia.conf (generated) — hyprland absent, prune
kimchi 0 37 harness/skills/<37> — skills-CLI install
kitty 0 2 kitty.conf, themes/noctalia.conf (generated) — program absent, prune
labwc 0 2 rc.xml, noctalia.conf (generated) — program absent, prune
lazygit 0 2 config.yml, themes/noctalia.yml (generated)
lazyvim ALL 0 — (whole dir symlink → dotfiles/lazyvim)
mango 0 2 config.conf, noctalia.conf (generated) — program absent, prune
micro 0 154 adopt: settings.json, bindings.json; generated: colorschemes/noctalia.micro; bundled/state: syntax/* (146), buffers/history
mpv 0 0 — (empty)
nautilus 0 0 — (empty)
niri 8 2 8 live KDL includes (5 from dotfiles/niri, 3 overridden by the zz-blankpad tier, whose own 7 niri files are counted in that tier — the stale layout.kdl duplicate and generated noctalia.kdl were removed by #43) + see Never track for the relic. Box-only: noctalia.kdl (generated include, refused by deploy.sh) and the retired copy
noctalia 3 2672 Tracked and live-linked: config.toml, palettes/Gruber Red.json, state/noctalia/settings.toml. Everything else is app state plus noctalia's downloaded catalog: community-palettes/ 66, community-templates/ 80, wallhaven/thumbs, clipboard/, plugins/, state.toml, usage_counts.json. The app's wallpaper library is ~/.local/share/noctalia/wallpapers — real files it owns; the repo's duplicate copy of 23 JPEGs was untracked by #41 and deleted from this checkout by the merge, which is what untracking does in every checkout
nvim 0 0 — (empty)
pywalfox 0 1 config.json — program absent, prune
qt5ct 0 1 colors/noctalia.conf (generated) — program absent, prune
qt6ct 0 1 colors/noctalia.conf (generated) — program absent, prune
rofi 0 1 noctalia.rasi (generated) — program absent, prune
scroll 0 2 config, noctalia (generated) — program absent, prune
secrets 0 4 gitea, hf_token, hf_token_write, kagi_api_key (names only — secret tier)
shelly 0 2 config.json, settings.json
sway 0 2 config, noctalia (generated) — program absent, prune
systemd 9 3 user/fib-watchdog.service, user/fib-watchdog.timer, user/timers.target.wants/fib-watchdog.timer
tmux 0 1 themes/noctalia.conf (generated)
turborepo 0 1 telemetry.json — turbo absent, prune
umbriel 0 2 config.toml, noctalia.toml (generated) — program absent, prune
unity3d 0 235 RimWorld state: Saves (201), Config (21), other (13) — never track
wezterm 0 1 colors/Noctalia.toml (generated) — program absent, prune
yay 0 0 — (empty)
ytm-player 0 1 theme.toml — program absent, prune

Top-level ~/.config files (not directories)

All regular files, none symlinked into dotfiles: starship.toml (prune — starship absent), frank-job-hunt.env (secret tier), kdeglobals, partitionmanagerrc, pavucontrol.ini, cachyos-hello.json, user-dirs.dirs, user-dirs.locale (XDG/desktop state).

Adoption candidates (program passes command -v)

Pre-vetted box-only files worth moving into dotfiles. Authorship is from the file contents, read directly.

File Program (path) Authored or default
~/.gitconfig git (/usr/bin/git) Authored — single setting line: credential.helper = store --file ~/.config/secrets/gitea (points at the secret tier; adopt the line, never the file it names)
~/.config/bat/config bat (/usr/bin/bat) Authored — one line --theme=noctalia
~/.config/lazygit/config.yml lazygit (/usr/bin/lazygit) Authored — 28-line custom noctalia color theme
~/.config/micro/settings.json micro (/usr/bin/micro) Authored — {"colorscheme":"noctalia"}
~/.config/micro/bindings.json micro (/usr/bin/micro) Default — empty {}, no custom bindings
~/.config/flameshot/flameshot.ini flameshot (/usr/bin/flameshot) Authored — contrastOpacity=188, startupLaunch=true
~/.config/glow/glow.yml glow (/usr/bin/glow) Default — shipped template, all default values (noctalia look comes from the generated noctalia.json, not this file)
~/.config/autostart/Flameshot.desktop flameshot (/usr/bin/flameshot) Authored — Exec=flameshot, X-GNOME-Autostart-enabled=true

Every ~/.config box-only row above lists each file, so the session can extend beyond these seven (e.g. btop/btop.conf, shelly/* are also installed-program configs).

Never track (box-only)

Reason Contents
Generated palette expansion Every themes/noctalia*, */noctalia.*, */colors/noctalia* / Noctalia* (24 files outside app-profile dirs). Machine-written by matugen/noctalia, not hand-authored: the stat -c '%y %n' cluster 2026-10-14 19:05:40.330…40.813 -0700 writes 24 files in one second (alacritty/themes/noctalia.toml at .330212397, btop/themes/noctalia.theme at .334212456, tmux/themes/noctalia.conf at .813219586, …); later re-runs re-stamp singles — bat/themes/noctalia.tmTheme 2026-10-18 17:11:22, niri/noctalia.kdl 2026-10-18 17:36:27, mango/noctalia.conf 2026-10-17 18:23:37. A same-second mass-write is generation, never an edit.
App state / profiles mozilla (5471), unity3d RimWorld state (235), nirimod (116), obsidian (99), FreeTube (56), google-chrome-for-testing (5); plus per-program state inside tracked dirs: dconf/user, fish/fish_variables, micro/syntax/*+micro/buffers/history, gtk-4.0/servers, cachyos/cachyos-hello.log.
Skills-CLI installs crush (37), devin (37), goose (37), kimchi/harness (37) skill trees — provisioned by the skills CLI, owned by the store, not this repo. See skills/store-wiring.
Secret tier ~/.config/secrets/ (gitea, hf_token, hf_token_write, kagi_api_key — names only), top-level frank-job-hunt.env, containers/systemd/postgres.env. Never tracked, values never printed.
Trash committed inside the tree dotfiles/niri/.config/niri/cfg/.AGENTTRASH/display.kdl.superseded — a retired output config committed 2026-10-09, five days before .gitignore:54 gained .AGENTTRASH/ (2026-10-14). Tracked-then-ignored: an ignore rule never reaches an already-tracked path, so the only repair is git rm --cached, done by #41. The rule does match at depth — git check-ignore --no-index -v dotfiles/niri/.config/niri/cfg/.AGENTTRASH/x resolves to .gitignore:54 — so a fresh in-tree trash dir is ignored from birth and this does not recur on its own.

Owned-elsewhere (do not adopt here)

  • ~/.config/containers/systemd/franksign-db.container — header: "Installed by infra/setup-dev.sh into ~/.config/containers/systemd/." Owned by the franksign repo; its quadlet, not this box's config.
  • ~/.config/systemd/user/fib-watchdog.service + .timer — box-only. ExecStart=/usr/bin/bun src/cli.ts worker with WorkingDirectory=/home/blank/Projects/frank-intelligence-bench. systemctl --user is-active fib-watchdog.timer → inactive. This box holds the only copy. Do not adopt it into dotfiles: ExecStart and WorkingDirectory are the bench project's internals, so that repo owns the unit — land it there and this row becomes "deployed by the bench repo". Until then it is a reinstall risk recorded here, not a dotfiles gap.
  • Hygiene finding, fixed 2026-10-20: the enable-symlink ~/.config/systemd/user/default.target.wants/blankpad-desk-autoswitch.service pointed into ~/.omp/wt/de-redesign-20261009/…, a worktree the heartbeat had already reaped — so desk auto-switching was silently off while systemctl --user is-enabled still answered enabled. Relinked to dotfiles/zz-blankpad/.config/systemd/user/blankpad-desk-autoswitch.service and daemon-reloaded; left inactive on purpose, because starting it mid- session applies a desk profile and the box is in use. Law and diagnosis: dotfiles-deploy.

Prune list (owning program absent from command -v)

All verified with command -v <prog> (git resolves to /usr/bin/git; a session alias can mask it, so probe in a clean shell).

Config Program checked
sway, hypr, labwc, mango, scroll, umbriel sway hyprland labwc mango scroll umbriel — all ABSENT
wezterm, kitty, foot wezterm kitty foot — all ABSENT
rofi, helix, cava, ytm-player, starship.toml rofi hx cava ytm-player starship — all ABSENT
pywalfox, qt5ct, qt6ct, turborepo pywalfox qt5ct qt6ct turbo — all ABSENT

The first three rows are the expected set (all 14 confirmed absent). My check disagrees with the expected set by extending it: pywalfox, qt5ct, qt6ct, turborepo are also installed-nowhere config dirs and belong in the prune list. Note the orphan dirs cava, rofi, helix, wezterm, qt5ct, qt6ct contain only a generated noctalia palette file — pruning them removes no authored config. crush/devin/goose/kimchi also fail command -v but are the skills-CLI tier above, not this session's prune targets.