Files
command-center/omp-docs/inventory/home-config-census.md
Frank 9ebf5fe85f Untrack a retired niri config that was committed as trash; correct two census rows
The repo still tracked `dotfiles/niri/.config/niri/cfg/.AGENTTRASH/display.kdl.superseded`
— a retired output config committed 2026-10-09, five days before `.gitignore` grew the
`.AGENTTRASH/` rule. Tracked-then-ignored: an ignore rule never reaches an already-tracked
path, so `git rm --cached` is the only repair. The working copy joins the rest of today's
tracked debt.

Found while answering "does this repo still track my noctalia and niri settings", which
also falsified two rows of the census committed yesterday: niri is 9 tracked files, not
12; noctalia is 3 authored files against 2672 files of app state and downloaded catalog,
not 2/0. The page's own classifier command reproduces the new numbers — it never
reproduced the old ones, which is the only reason they were wrong and not merely
different.

Two laws recorded alongside, both from the same probe: `config.kdl`'s
`include "noctalia.kdl"` is not `optional=true`, so a fresh box cannot start niri until
the theme pipeline has run once; and `cfg/display.kdl -> desk-1-home.kdl` is desk state a
fresh box does not receive — by design, but nowhere written down.

Refs #40
2026-10-20 17:00:20 -07:00

191 lines
13 KiB
Markdown

---
type: reference
title: Home Configuration Census (blankpad)
description: Per-file tracked-vs-box-only census of ~/.config on blankpad — the input for the dotfiles pruning/adoption session.
tags: [inventory, census, dotfiles, config]
created: 2026-08-28
census-date: 2026-10-20
verified: 2026-10-20
source: 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:
```bash
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 | 9 | 1 | 8 live KDL includes (5 from `dotfiles/niri`, 3 overridden by the `zz-blankpad` tier, whose own 9 niri files are counted in that tier) + 1 tracked relic, see *Never track*. Box-only: `noctalia.kdl`, a generated include — [tools/dotfiles-deploy](/tools/dotfiles-deploy.md) |
| 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 23 wallpapers #41 untracks stay on disk — the theme reads them |
| 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](/skills/store-wiring.md). |
| **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-reload`ed; left `inactive` on purpose, because starting it mid-
session applies a desk profile and the box is in use. Law and diagnosis:
[dotfiles-deploy](/tools/dotfiles-deploy.md).
## 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.
## Links
- [skills/store-wiring](/skills/store-wiring.md) — owns the skills-CLI tier
claim (`crush`/`devin`/`goose`/`kimchi`).
- [KB index](/index.md) — knowledge-base entry point.