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
(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,
GIO skips it while absent) — #103 adds live baseline apps. Remains: a
test-install VM run proving chromium launches post-install (chain #97's
Bluetooth-click V2 into the same run), + make the live posture explicit in
the flake comment (edit drafted, uncommitted).
GIO skips it while absent) — #103 adds live baseline apps. Live posture is
now explicit in the flake comment. Remains: a test-install VM run proving
chromium launches post-install (chain #97's Bluetooth-click V2 into the
same run).
Chromium is the resolved default-browser decision and is present in the
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
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
"`theme-state.json` is NOT git-tracked": the live seed (hosts/live.nix
`nomarchy-seed-flake`) does `cp -r` with no `git init`, so `~/.nomarchy`
isn't a repo in the LIVE session (installed systems commit at
nomarchy-install.sh:654 and are fine). Fix drafted in the working tree
(seed does init+add+commit like the installer). Held for one open
question: the same evidence run saw the live offline
`nomarchy-theme-sync apply gruvbox` rebuild fail ("Build failed due to
failed dependency") — determine whether that predates the git-seed (the
git+file eval flips untracked-file visibility) before committing; a
focused VM run capturing the full rebuild log over serial is in flight
(`/tmp/nomarchy-v2-theme-99/`).
The live-installed checkout shows a doctor/Waybar warning that `theme.json`
is not tracked. Determine whether the warning targets the generated alias or
the canonical `theme-state.json`, then align the check with the in-flake state
contract. Pass = a fresh install has no false warning while a genuinely
untracked canonical state file is still detected.
Surfaced by #99's evidence run (2026-07-13, `/tmp/nomarchy-v2-theme-99/`):
in the **live ISO** session, offline `nomarchy-theme-sync apply gruvbox`
fails — its `home-manager switch` tries to build **1176 derivations** from
the `stage0`/`hex0` bootstrap up, then dies on offline source fetches
(`vala`, `yasm`, `config.jsonc`, `ghostty-config`, `easyeffects.svg`,
`typogrify`…), ending `error: Build failed due to failed dependency`. This
contradicts docs/TESTING.md item 6 ("apply gruvbox → switch runs offline").
The failing generation is `bvl30ggn…-home-manager-generation.drv`; it is
**not** the drv the ISO pins (the pin is the *default*-theme
`homeConfigurations.${username}.activationPackage`, i.e. Boreal — confirmed
drv-identical to the failing one only for gruvbox state, so a non-default
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
pin every baked theme's live activationPackage into the ISO (size cost) or
scope the offline-switch promise to the shipped theme + correct
TESTING.md/MEMORY. Pass = a fresh live ISO either switches to any baked
theme offline, or fails with a clear "needs network for this theme" message
and accurate docs. **Not caused by anything in today's batch** — separate
pre-existing ISO-pinning gap.
## NEXT

View File

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

View File

@@ -1572,6 +1572,13 @@
users.${username} = {
imports = [ self.homeModules.nomarchy ];
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
cp -r ${nomarchySrc} "$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"
fi
'';