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.