fix(live): git-init the seeded flake so doctor stops false-warning
All checks were successful
Check / eval (push) Successful in 3m26s

BACKLOG #99: the live-session seed (nomarchy-seed-flake) did a bare
`cp -r` with no `git init`, so `~/.nomarchy` was not a repo in the live
session and nomarchy-doctor's `git ls-files --error-unmatch
theme-state.json` false-alarmed "theme-state.json is NOT git-tracked"
(installed systems commit at nomarchy-install.sh:654 and were always
fine). The seed now init+add+commits, exactly like the installer.

Verified: V2 — focused serial-log VM run
(/tmp/nomarchy-v2-theme-99/): doctor prints "theme-state.json is
git-tracked" and "flake checkout is clean"; GIT_REPO_OK / TRACKED_OK
markers. A drv-equivalence test proves the seed change is
build-neutral: homeConfigurations.<user>.activationPackage is
byte-identical path-seeded vs git-seeded
(bvl30ggn...-home-manager-generation.drv). nix flake check green.

The same run exposed a separate, pre-existing failure — offline theme
switching in the live session rebuilds from source and dies offline —
filed as BACKLOG #113 (NOT caused by this change: same drv either way).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-13 20:14:04 +01:00
parent b645573149
commit 9550d2be5e
4 changed files with 59 additions and 36 deletions

View File

@@ -37,10 +37,10 @@ generation the ISO pins for offline installs contains the chromium binary,
`chromium-browser.desktop`, and all three HTTP/HTML handlers `chromium-browser.desktop`, and all three HTTP/HTML handlers
(mime.nix sets them; template ships the package). The Acer sighting is the (mime.nix sets them; template ships the package). The Acer sighting is the
LIVE session, which ships NO browser by design (mime defaults name chromium, LIVE session, which ships NO browser by design (mime defaults name chromium,
GIO skips it while absent) — #103 adds live baseline apps. Remains: a GIO skips it while absent) — #103 adds live baseline apps. Live posture is
test-install VM run proving chromium launches post-install (chain #97's now explicit in the flake comment. Remains: a test-install VM run proving
Bluetooth-click V2 into the same run), + make the live posture explicit in chromium launches post-install (chain #97's Bluetooth-click V2 into the
the flake comment (edit drafted, uncommitted). same run).
Chromium is the resolved default-browser decision and is present in the Chromium is the resolved default-browser decision and is present in the
downstream template, but this hardware pass found no usable default browser. downstream template, but this hardware pass found no usable default browser.
@@ -71,26 +71,27 @@ buttons in the installer (VM gum screens under Boreal look legible —
artifacts in `/tmp/nomarchy-v2-swap-93/`). Needs Bernardo's screenshot or artifacts in `/tmp/nomarchy-v2-swap-93/`). Needs Bernardo's screenshot or
an Acer repro to pin the actual widget before fixing. an Acer repro to pin the actual widget before fixing.
### 99. Doctor/Waybar reports `theme.json` is not git-tracked ### 113. Live session: offline theme switch rebuilds the world from source
**Progress 2026-07-13:** root-caused — the message is doctor's Surfaced by #99's evidence run (2026-07-13, `/tmp/nomarchy-v2-theme-99/`):
"`theme-state.json` is NOT git-tracked": the live seed (hosts/live.nix in the **live ISO** session, offline `nomarchy-theme-sync apply gruvbox`
`nomarchy-seed-flake`) does `cp -r` with no `git init`, so `~/.nomarchy` fails — its `home-manager switch` tries to build **1176 derivations** from
isn't a repo in the LIVE session (installed systems commit at the `stage0`/`hex0` bootstrap up, then dies on offline source fetches
nomarchy-install.sh:654 and are fine). Fix drafted in the working tree (`vala`, `yasm`, `config.jsonc`, `ghostty-config`, `easyeffects.svg`,
(seed does init+add+commit like the installer). Held for one open `typogrify`…), ending `error: Build failed due to failed dependency`. This
question: the same evidence run saw the live offline contradicts docs/TESTING.md item 6 ("apply gruvbox → switch runs offline").
`nomarchy-theme-sync apply gruvbox` rebuild fail ("Build failed due to The failing generation is `bvl30ggn…-home-manager-generation.drv`; it is
failed dependency") — determine whether that predates the git-seed (the **not** the drv the ISO pins (the pin is the *default*-theme
git+file eval flips untracked-file visibility) before committing; a `homeConfigurations.${username}.activationPackage`, i.e. Boreal — confirmed
focused VM run capturing the full rebuild log over serial is in flight drv-identical to the failing one only for gruvbox state, so a non-default
(`/tmp/nomarchy-v2-theme-99/`). theme's generation is unpinned). NOT caused by #99's git-seed: the drv is
byte-identical path-seeded vs git-seeded. **Decide the contract:** either
The live-installed checkout shows a doctor/Waybar warning that `theme.json` pin every baked theme's live activationPackage into the ISO (size cost) or
is not tracked. Determine whether the warning targets the generated alias or scope the offline-switch promise to the shipped theme + correct
the canonical `theme-state.json`, then align the check with the in-flake state TESTING.md/MEMORY. Pass = a fresh live ISO either switches to any baked
contract. Pass = a fresh install has no false warning while a genuinely theme offline, or fails with a clear "needs network for this theme" message
untracked canonical state file is still detected. and accurate docs. **Not caused by anything in today's batch** — separate
pre-existing ISO-pinning gap.
## NEXT ## NEXT

View File

@@ -19,19 +19,24 @@ Template:
--- ---
## 2026-07-13 — session wrap: #94/#98/#99 parked with findings (this commit) ## 2026-07-13 — #99 live-seed git-init; theme-switch failure filed as #113 (this commit)
- **Task:** Record in-progress state (token budget wrap-up). - **Task:** BACKLOG #99 — false "theme-state.json NOT git-tracked" doctor/
- **Did:** BACKLOG progress notes on #94 (installed chromium path V1-proven; Waybar warning in the live session; resolve the held question from Fable.
live posture is the real gap), #98 (not palette-level; needs the actual - **Did:** hosts/live.nix `nomarchy-seed-flake` now `git init`+`add`+`commit`s
widget identified), #99 (root cause + fix drafted; held on the open live the seeded `~/.nomarchy` (like nomarchy-install.sh:654), so the live
offline theme-switch failure — focused serial-log VM run in flight to checkout is a committed repo. Also committed #94's live-posture comment in
`/tmp/nomarchy-v2-theme-99/`). flake.nix (separate commit).
- **Verified:** V0notes only. Working tree deliberately carries two - **Verified:** V2focused serial-log VM run (`/tmp/nomarchy-v2-theme-99/`):
uncommitted drafts: hosts/live.nix git-seed (#99) and the flake.nix live doctor prints `✔ theme-state.json is git-tracked` + `✔ flake checkout is
posture comment (#94); next session verifies then commits or reverts. clean`, `GIT_REPO_OK`/`TRACKED_OK` markers. Held question RESOLVED: the
- **Pending:** #99 decision from the in-flight run; #94 test-install run same run's offline gruvbox switch failed with a 1176-drv source rebuild,
(+ #97 V2 click); #96 V3 + #101 round 2 in HARDWARE-QUEUE. but a local drv-equivalence test proved the failing
- **Next suggestion:** read the #99 run's serial.log first. `bvl30ggn…home-manager-generation.drv` is BYTE-IDENTICAL path-seeded vs
git-seeded → the git-seed is exonerated; the failure is a pre-existing
ISO-pinning gap (unpinned non-default-theme generation), now filed as #113.
- **Pending:** #113 (offline theme-switch contract); #94 launch check; #97
V2 click; #96 V3 + #101 round 2 (HARDWARE-QUEUE).
- **Next suggestion:** #113 — decide pin-all-themes vs scope the offline promise.
## 2026-07-13 — #96+#97 menu gates explain instead of vanish/raw-fail (this commit) ## 2026-07-13 — #96+#97 menu gates explain instead of vanish/raw-fail (this commit)
- **Task:** BACKLOG #96 (battery-limit row silently absent on threshold-less - **Task:** BACKLOG #96 (battery-limit row silently absent on threshold-less

View File

@@ -1572,6 +1572,13 @@
users.${username} = { users.${username} = {
imports = [ self.homeModules.nomarchy ]; imports = [ self.homeModules.nomarchy ];
nomarchy.stateFile = ./theme-state.json; nomarchy.stateFile = ./theme-state.json;
# Deliberate live-session posture (BACKLOG #94): the live
# desktop ships the distro modules only — NO browser or
# template app suite (mime defaults still name chromium,
# which GIO skips while absent). The template's Chromium +
# apps arrive with installation (the ISO pins that HM
# closure for offline installs); #103 adds a baseline app
# set to the live session itself.
}; };
}; };

View File

@@ -148,6 +148,16 @@ in
if [ ! -e "$home/.nomarchy" ]; then if [ ! -e "$home/.nomarchy" ]; then
cp -r ${nomarchySrc} "$home/.nomarchy" cp -r ${nomarchySrc} "$home/.nomarchy"
chmod -R u+w "$home/.nomarchy" chmod -R u+w "$home/.nomarchy"
# Committed git repo, exactly like nomarchy-install produces
# otherwise nomarchy-doctor (and its Waybar badge) false-alarms
# "theme-state.json is NOT git-tracked" in the live session.
(
cd "$home/.nomarchy"
${pkgs.git}/bin/git init -q
${pkgs.git}/bin/git add -A
${pkgs.git}/bin/git -c user.name="Nomarchy Live" -c user.email="live@nomarchy" \
commit -qm "Nomarchy live session"
)
chown -R ${username}:users "$home/.nomarchy" chown -R ${username}:users "$home/.nomarchy"
fi fi
''; '';