From 9ebf5fe85f49c081ff9f1c8d0d9b1bd0a258b6c8 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 20 Oct 2026 17:00:20 -0700 Subject: [PATCH] Untrack a retired niri config that was committed as trash; correct two census rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../cfg/.AGENTTRASH/display.kdl.superseded | 21 ------------------ omp-docs/inventory/home-config-census.md | 5 +++-- omp-docs/tools/dotfiles-deploy.md | 22 ++++++++++++++++++- 3 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 dotfiles/niri/.config/niri/cfg/.AGENTTRASH/display.kdl.superseded diff --git a/dotfiles/niri/.config/niri/cfg/.AGENTTRASH/display.kdl.superseded b/dotfiles/niri/.config/niri/cfg/.AGENTTRASH/display.kdl.superseded deleted file mode 100644 index ca850ae..0000000 --- a/dotfiles/niri/.config/niri/cfg/.AGENTTRASH/display.kdl.superseded +++ /dev/null @@ -1,21 +0,0 @@ -// ────────────── Output Configuration ────────────── -output "Samsung Electric Company Odyssey G75F HNTY601056" { - mode "3840x2160@60" - scale 1 - transform "normal" - position x=0 y=0 -} - -output "DP-1" { - transform "90" - position x=0 y=0 -} - -output "DP-3" { - transform "270" - position x=1200 y=0 -} - -output "eDP-1" { - // no position — auto-placed to the right of DP-* outputs -} diff --git a/omp-docs/inventory/home-config-census.md b/omp-docs/inventory/home-config-census.md index 1963604..5f1fbd4 100644 --- a/omp-docs/inventory/home-config-census.md +++ b/omp-docs/inventory/home-config-census.md @@ -83,8 +83,8 @@ by category, not file-by-file. | 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 | 12 | 1 | `noctalia.kdl` (generated) | -| noctalia | 2 | 0 | — | +| 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 | @@ -138,6 +138,7 @@ configs). | **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) diff --git a/omp-docs/tools/dotfiles-deploy.md b/omp-docs/tools/dotfiles-deploy.md index 0946003..b3f92b8 100644 --- a/omp-docs/tools/dotfiles-deploy.md +++ b/omp-docs/tools/dotfiles-deploy.md @@ -32,7 +32,7 @@ instead of crash-looping. **The tracked unit is the file, not the directory.** A live directory can be a real directory and still be fully tracked, because every file inside it is a symlink into the -repo (`niri` is 12 tracked / 1 box-only; `gtk-3.0` is 3/0). Any audit that classifies by +repo (`niri` is 9 tracked / 1 box-only; `gtk-3.0` is 3/0). Any audit that classifies by directory mislabels the tree — classify per file with `readlink -f`. The live census and its classifier command are in [home-config-census](/inventory/home-config-census.md). @@ -70,3 +70,23 @@ ls -l ~/.config/systemd/user/default.target.wants/ Fix is to relink into the deployment checkout (`~/.omp/dotfiles/…`), `systemctl --user daemon-reload`, then confirm with `is-active` — `is-enabled` proves nothing. + +## Law: a generated file must never be a required include + +`~/.config/niri/config.kdl` ends with `include "noctalia.kdl"` — no `optional=true`. +That file is noctalia's palette output (`#ff8c00`, `#f43841`, one re-stamp +`2026-10-18 17:36:27`), so it is machine state and correctly untracked. But on a fresh +box `deploy.sh` links `config.kdl` first, and niri then refuses to start until noctalia +has run once and written the file — the compositor is bricked by the order of operations, +not by a bad config. Close it at the include, which survives someone skipping the theme +pipeline: mark generated includes `optional=true`, as the `display.kdl` and +`switch-events.kdl` lines in the same file already are. + +## Desk choice is live state, never config + +`~/.config/niri/cfg/display.kdl` is a relative symlink to whichever profile is active +(`desk-1-home.kdl`, `desk-2-portable.kdl`), written by `desk.sh`. Both profiles are +tracked in `dotfiles/zz-blankpad/`; the pointer is not, because which desk the box sits on +is not a fact about the repo. A fresh box therefore starts with no output configuration — +`config.kdl` includes `display.kdl` with `optional=true`, so niri comes up usable but with +default monitors until `desk.sh` is run once.