--- 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 | 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](/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 ` (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.