chore(agent): QA sweep + journal rotate (queue empty)
Some checks are pending
Check / eval (push) Waiting to run

NEXT only has #76 [blocked:hw]. Re-ran option-docs, template-sot, and a
V2 suite (doctor, first-boot, what-changed, clamshell-logind, dock-audio,
windowrule-syntax, battery-notify, zram-swap, nightlight-geo) — all green.
Rotated JOURNAL.md 41→18 entries into JOURNAL-ARCHIVE.

Verified: V2 — listed checks green; flake check --no-build green.
This commit is contained in:
Bernardo Magri
2026-07-11 10:40:57 +01:00
parent f47903a6a6
commit 9e8433e4d6
2 changed files with 354 additions and 341 deletions

View File

@@ -6,6 +6,347 @@ JOURNAL.md grows past ~25 entries, move the tail here.
--- ---
## 2026-07-10 — #78 Omarchy migrant doc (docs/OMARCHY.md)
- **Task:** BACKLOG #78 (promoted from PROPOSED) — Omarchy→Nomarchy
one-pager (`VISION § F`).
- **Did:** New `docs/OMARCHY.md`: leads with the config-model shift
(imperative dotfiles → declarative flake + menu, rollback via
generations), then install (ISO/`nomarchy-install` or MIGRATION.md),
a familiar-bindings table, theming (`SUPER+T`/`nomarchy-theme-sync`),
packages (home.packages / `nix shell`, no AUR), update+rollback
(`nomarchy-pull`/`-rebuild`/`-home`, boot-menu generations,
`nomarchy-doctor`). Added to `docs/README.md` map + VISION § F ✓.
- **Verified:** V0 (docs). Grounded Nomarchy side in code: pulled real
binds from `keybinds.nix`; confirmed all 7 cited commands, the `nsearch`
alias, and the named slugs (gruvbox/rose-pine/nord) exist. Kept
Omarchy-side claims to known facts (Arch, dotfiles, pacman/AUR).
- **Pending:** none.
- **Next suggestion:** NEXT head #76 `[blocked:hw]`; last open PROPOSED is
auto time-of-day theme pair (`§D`, `[big]` — needs splitting).
## 2026-07-10 — #77 doctor hibernate/sleep section (V2 PASS)
- **Task:** BACKLOG #77 (promoted from PROPOSED by Bernardo) — read-only
hibernate section in nomarchy-doctor (`VISION § C`, #76 follow-on).
- **Did:** Added a hibernate/sleep row group to `nomarchy-doctor.sh`: resume
device on cmdline (+ `resume_offset` for a swapfile), disk swap ≥ RAM,
zram active, previous-boot suspend/hibernate error. Self-gates (`skip` on
swap=0); only ok/warn/skip → never fails the sheet. Added `hibernate` to
the `checks.doctor` probe list.
- **Verified:** **V2 PASS**`checks.doctor` VM test green (fresh build,
exit 0; asserts the hibernate row renders + healthy run still 0). **V1**
ran on this box's real LUKS+@swap layout: all three `ok` rows render
(resume set, swap 34G ≥ RAM, zram 16G) and the sheet reaches its verdict.
**V0** bash -n + flake check.
- **Gotcha (fixed + MEMORY):** the doctor runs `set -euo pipefail`; my first
cut aborted before the verdict because a no-match `grep` inside `$(…)` and
a `cond && action` both trip set -e. Fixed with `|| true` / `|| echo 0` and
an `if`. First VM run caught it (exit 1, no verdict) — the test earned its keep.
- **Pending:** none — fully agent-verifiable (read-only checks, no V3).
- **Next suggestion:** NEXT head is #76 `[blocked:hw]`; remaining PROPOSED
(Omarchy doc §F, auto time-of-day theme §D) await triage.
## 2026-07-10 — QA sweep (clean) + VISION-gap pass → 3 PROPOSED
- **Task:** Bernardo — QA/drift sweep, then a VISION-gap pass with proposals.
- **Did (sweep):** Fanned out two subagents (Bernardo OK'd spawning for
efficiency): nomarchy-runner ran the deterministic checks + `bash -n`/
`py_compile` (all PASS; the 4 "needs-args" scripts pass via their flake
derivations); nomarchy-scout hunted fuzzy drift (dead code, stale refs,
TODOs, changed-area contradictions, count/version) — **all clean**.
Spot-checked scout's count claim myself: 24 theme JSONs / 24 previews /
README "24 presets" — consistent. Eval sweep green. **No fixes needed.**
- **Did (VISION):** Verified candidate gaps against the tree before
proposing (killed two false gaps — nomarchy-rebuild/home already tail logs
+ point at doctor on failure = §A shipped; `nvd diff` = §B covered; System
Firmware menu already exists). Filed 3 **PROPOSED** (verified open):
doctor hibernate/sleep section (§C, top Day-2 pick, #76 follow-on),
Omarchy migrant one-pager (§F), auto time-of-day theme pair (§D, `[big]`).
- **Verified:** V0 (agent-notes/docs only). Sweep evidence above.
- **Pending:** none. Proposals await Bernardo's triage into a tier.
- **Next suggestion:** if a PROPOSED is promoted, the doctor hibernate
section is the cleanest next build; else NEXT #76 stays `[blocked:hw]`.
## 2026-07-10 — Icon overrides: user-facing docs (OVERRIDES.md)
- **Task:** Bernardo asked whether the session's features need user docs.
- **Did:** Hibernation already covered (README swapfile line, MIGRATION.md
runbook, discoverable Power-menu row) — no gap. Icons had one: the only
doc was the template comment. Added an "Icon pack" subsection to
`docs/OVERRIDES.md` § Appearance — `nomarchy-theme-sync set icons "<name>"`,
the known-packs table, the ~1 GiB/opt-in rationale, and that the choice is
sticky across `apply` (presets carry no icon field; verified `deep_merge`).
- **Verified:** command path confirmed (`cmd_set` writes any dotted key;
`icons` is a schema key). **Built all 4 packs and listed real theme dirs**
to fix the examples — caught Qogir using capital `Qogir-Dark`/`Light`
(lowercase would silently fall back to hicolor). Docs-only (V0).
- **Pending:** none.
- **Next suggestion:** NEXT #76 `[blocked:hw]`; LATER/QA-sweep next.
## 2026-07-10 — Icon themes: opt-in cross-pack overrides (no default bloat)
- **Task:** LATER "per-theme icon overrides / more icon packs". Recon found
papirus is already ~1 GiB and ships only Papirus/Dark/Light (no free
variety); real variety needs extra packs at ~hundreds of MB each. Bernardo
chose the **opt-in, no-default-bloat** shape (over shipping packs).
- **Did:** `theme.nix` resolves `nomarchy.theme.iconThemePackage` from a
small `iconPacks` registry (papirus·tela·qogir·reversal·numix, by name
prefix). Default themes name `Papirus-*` → resolves to the *plain* papirus
derivation (no symlinkJoin, identical closure); only a theme naming another
pack's set symlinkJoins that one pack in. `stylix.nix` uses it
(mkDefault). Opt-in note in `templates/downstream/home.nix`; ROADMAP §
Icon themes updated (incl. the deliberate no-default-packs decision).
- **Verified:** **V1** — HM activationPackage builds (exit 0). Eval proofs:
default `iconThemePackage` = plain `papirus-icon-theme-*` (zero delta);
with `icons="Tela-dark"``nomarchy-icon-themes` symlinkJoin (papirus+tela)
and name flows, **without building tela**. All 5 pack attrs exist in the
pinned nixpkgs. `template-sot` + `option-docs` + `flake check` green.
- **Pending:** none. No default visual change (identical papirus), so no
screenshot needed; the opt-in render is the downstream user's to see.
- **Next suggestion:** NEXT still #76 `[blocked:hw]`; LATER/QA-sweep next.
## 2026-07-10 — #76 slice 3: hibernate VM test (V2 PASS) → #76 agent-complete
- **Task:** BACKLOG #76 slice 3 — the mandatory V2 hibernate test + V3 queue.
- **Did:** Added `checks.hibernate` (flake.nix), modeled on nixpkgs'
hibernate.nix but wired to Nomarchy's #76 risk: imports oom.nix (zram
default-on), disk swap at lower priority + explicit `boot.resumeDevice`,
systemd-initrd. Test drives hibernate→power-off→resume→crash: ramfs marker
survives resume, a crash-boot loses it (real resume, not a survivor), and
asserts zram@100 + disk-swap<100 so the image lands on disk not volatile
zram. Queued the V3 laptop steps (real LUKS+@swap+offset resume + no-swap
notify) in HARDWARE-QUEUE. Collapsed #76 to a `[blocked:hw]` stub; design
record → ROADMAP § "Hibernation + zram by default".
- **Verified:** **V2 PASS**`nix build .#checks.x86_64-linux.hibernate`
built the driver fresh and exited 0 (all assertions held). `nix flake
check --no-build` green.
- **Pending:** only V3 (dev box / laptop) — #76's last check; close on PASS.
- **Next suggestion:** #76 is now blocked:hw; NEXT head falls to LATER/
PROPOSED triage or a QA sweep — pick per LOOP.md orientation next session.
## 2026-07-10 — #76 slice 2: Hibernate notify-on-failure
- **Task:** BACKLOG #76 remaining slice 2 — per the settled "keep row, notify
on failure" call.
- **Did:** `modules/home/rofi.nix` power menu Hibernate arm now runs
`systemctl hibernate 2>/dev/null || notify-send "Hibernate" "…see
docs/MIGRATION.md"`. On success the call blocks until resume, so the notify
only fires on a genuine failure (e.g. swap=0 no-swap machine). Row stays
unconditional (no hiding).
- **Verified:** **V1**`nix build …homeConfigurations.nomarchy.activationPackage`
green (rebuilds `nomarchy-menu.drv`; `writeShellScriptBin` runs bash -n at
build). Control-flow proof on the arm extracted from the built script:
failing `systemctl` → notify fires; succeeding → no notify. `nix flake
check --no-build` green.
- **Pending:** slice 3 = the V2 hibernate→resume VM test + V3 laptop
(Hibernate→power off→resume on the LUKS+@swap machine; plus confirm the
no-swap notify surfaces in a real session). Both remain open on #76.
- **Next suggestion:** slice 3 — add a `checks.*` hibernate VM test (as far
as QEMU allows) and queue the V3 laptop steps in HARDWARE-QUEUE.
## 2026-07-10 — #76 slice 1: MIGRATION.md hibernation runbook
- **Task:** BACKLOG #76 remaining slice 1 — docs runbook for enabling
hibernation on an existing machine (per the settled "docs not tool" call).
- **Did:** Added § "Enabling hibernation on an existing machine (no reinstall)"
to `docs/MIGRATION.md`: create `@swap` subvol (subvolid=5) + `mkswapfile`
(NOCOW), read `map-swapfile -r` offset, wire `fileSystems."/swap"` +
`swapDevices` + `resumeDevice` + `resume_offset` into system.nix. Flagged
the mount as required on the hand-edit path (installer gets it from
disko-gen hardware-config). Notes zram-priority reservation, no-LUKS
variant, `swap=0` opt-out. Worked example = this dev machine.
- **Verified:** **V0** — read-only commands run live against this machine's
real LUKS(`cryptroot`)+btrfs(`@`)+`/swap/swapfile` layout (RAM 31G, fsuuid,
`findmnt SOURCE`, `mkswapfile` flags, zram@100 vs swapfile@-1 confirms the
design intent). `nix flake check --no-build` green.
- **Pending:** slice 2 — Hibernate row notify-on-failure (V1/V2); then the
V2 hibernate VM test + V3 laptop.
- **Next suggestion:** slice 2 (menu notify-on-failure).
## 2026-07-10 — #76 hibernation design calls (no commit yet → this bookkeeping)
- **Task:** BACKLOG #76 design slice — Bernardo made the open calls.
- **Did:** Recon showed the hibernation half is **already built for new
installs** (installer defaults swap=RAM hibernation-ready `@swap` swapfile;
`patch-template.py` writes swapDevices/resumeDevice/resume_offset; Power
menu Hibernate row + LUKS/hyprlock handling exist). Settled 3 calls:
(1) swap sizing = **exactly RAM** (no change); (2) migration = **docs
runbook in MIGRATION.md**, not a tool; (3) no-swap Hibernate = **keep row,
notify on failure**. Folded into BACKLOG #76 (design ✓, re-sliced remaining:
MIGRATION.md runbook + notify-on-failure menu) and Decisions.
- **Verified:** **V0**`nix flake check --no-build` green (docs-only).
- **Pending:** two remaining slices below; V2 hibernate VM test + V3 laptop.
- **Next suggestion:** slice 1 — `docs/MIGRATION.md` hibernation-enable runbook
(V0), then slice 2 — Hibernate notify-on-failure (V1/V2).
## 2026-07-10 — #76 zram slice: compressed-RAM swap default
- **Task:** BACKLOG #76 (`[big]`) — split; took the low-risk zram-default slice.
- **Did:** `zramSwap` on by default in `modules/nixos/oom.nix` (zstd, 50% RAM,
priority 100) as the memory-pressure layer before earlyoom, following the
earlyoom mkDefault precedent (no toggle). High priority keeps day-to-day
paging in zram so a disk swapfile stays reserved for #76's hibernate image.
Added `checks.zram-swap` runNixOSTest (imports oom.nix). Split #76 in
BACKLOG → remainder is the hibernation half (swapfile/resume/installer).
- **Verified:** **V2**`nix build .#checks…zram-swap` PASS: /dev/zram0 active
in /proc/swaps, `[zstd]` comp_algorithm, priority 100. **V1** full distro
toplevel builds. **V0** flake check --no-build green.
- **Pending:** hibernation half of #76 still open (needs hibernate→resume VM
test + V3 laptop). No V3 for zram (under-load tuning is secondary).
- **Next suggestion:** #76 hibernation half — design default swapSize + the
resume/installer wiring; it's the boot-critical, V2-hibernate + V3 part.
## 2026-07-10 — #41 hardware-confirmed: OpenFile portal floats (V3 close)
- **Task:** BACKLOG #41 — final on-hardware confirmation (Bernardo reported PASS).
- **Did:** #41 already out of NEXT + portal rule shipped
(`hyprland.nix` xdg-desktop-portal-gtk float/center). Bernardo verified the
GTK OpenFile file-picker floats on real hardware; dropped the "OpenFile not
re-probed / optional residual" caveats in HARDWARE-QUEUE — #41 fully closed.
- **Verified:** **V3** (Bernardo, Latitude). No code change. Bookkeeping only;
QA-sweep guards run green this session: `nix flake check --no-build`,
option-docs/template-sot/theme-sync-validate builds, contrast 24×7.
- **Pending:** none for #41. NEXT head is #76 (hibernation + zram, `[big]`).
- **Next suggestion:** split #76 — take the low-risk **zram-default** slice
(V2-testable headlessly) before the boot-critical hibernate/resume work.
## 2026-07-10 — Close #41 GTK portal float rule
- **Task:** BACKLOG #41 residual (GTK file-chooser portal class).
- **Did:** Added float+center for `xdg-desktop-portal-gtk` /
`.xdg-desktop-portal-gtk-wrapped` (desktop + libexec name from package).
Polkit already PASS on Latitude. Removed #41 from NEXT; only #20 remains.
- **Verified:** **V0** windowrule-syntax check path unchanged; class from
package `xdg-desktop-portal-gtk.desktop` / community configs. SoftGL
still cannot materialize portal dialogs.
- **Pending:** optional hardware spot-check OpenFile floats (HARDWARE-QUEUE).
- **Next suggestion:** #20 is `[human]` only — or LATER/PROPOSED triage.
## 2026-07-10 — Product calls: charge live, identity, btop, NVIDIA skip
- **Task:** Bernardo decisions on remaining PROPOSED.
- **Did:** (1) Instant charge-limit: udev GROUP=users on threshold,
menu/powermgmt live sysfs + state, oneshot reads live theme-state +
AC re-apply. (2) Look & Feel already had Theme/wallpaper/night light;
added Reset wallpaper (auto). (3) NVIDIA first-class deferred past v1
(HARDWARE.md). (4) Identity retunes: white L-steps, lumon subtext,
hackerman surface+UI warn/bad, matte-black subtext, miasma bad.
(5) Hand `btop.theme` for 9 identity/whole-swap slugs from palette map.
- **Verified:** **V0** contrast 24×7; **V1** battery-charge-limit VM
(udev restart). **V3** live charge write on real laptop (HARDWARE-QUEUE).
- **Next suggestion:** only #20/#41 blocked, or Decisions.
## 2026-07-10 — Summer pair polish + status CSS + preview recapture
- **Task:** finish agent-able PROPOSED theme leftovers.
- **Did:** summer-day/night — JSON hierarchy (night subtext/muted/overlay
ladder; day overlay≠muted); waybar CSS tokens track JSON roles; font
13px both; day battery 25/10; VPN pill + full status states
(.recording/.available/.on/.activated/battery warn). Recaptured
executive-slate + neon-glass `preview.png` via theme-shot desktop
(480×270). Closed those PROPOSED lines.
- **Verified:** **V0** contrast 24×7 + wholeswap; **V2** theme-shot
summer-day/night/executive-slate/neon-glass — viewed bar crops +
previews. Identity taste retunes stay PROPOSED.
- **Next suggestion:** only blocked NEXT (#20/#41) or product Decisions.
## 2026-07-10 — #74 matrix flags + #75 V2 install (default arm)
- **Task:** NEXT #74 unattended matrix · #75 SoT V2 install after ISO.
- **Did:** `NOMARCHY_TEST_SWAP_GB` / `NOMARCHY_TEST_NO_LUKS` drive
`tools/test-install.sh` go.sh + first-boot LUKS skip; nixpkgs OVMF
fallback. Full offline install V2 (SWAP=2 LUKS) after live ISO rebuild
with starter packages — first-boot themed Boreal, no red banner.
Closed #74/#75. Other matrix arms scripted (not full-ISO re-run).
- **Verified:** **V2** — install powered off ~460s; first-boot.png
viewed (`/tmp/nomarchy-vm-75/first-boot.png`): themed wallpaper +
waybar (logo, clock, modules), doctor glyph, no autogen banner.
- **Next suggestion:** NEXT only #20 [human] + #41 [blocked:hw].
## 2026-07-10 — Loop batch land #64#73 (parallel worktrees)
- **Task:** agent-actionable NEXT #64#73 via worktree agents; land on main.
- **Did:** #64 MIGRATION snapshots · #65 real-uid chown · #66 theme-state
fail-closed reader · #67/#68 theme fidelity+ANSI · #69/#70 audit+import
tools · #71 IR portal docs · #72 template-sot check · #73 MOTD/first-boot
fingerprint+doctor tips. Agents did not push; parent cherry-picked
(stripped agent BACKLOG races). Closed #64#73.
- **Verified:** **V0/V1** — theme-contrast 24×7 pass; template-sot green;
bash -n install; flake check --no-build green.
- **Next suggestion:** #74 unattended matrix + #75 V2 install (KVM).
## 2026-07-10 — Promote agent-actionable PROPOSED → NEXT #64#75
- **Task:** Bernardo: bump non-hw/non-human PROPOSED categories 1+2.
- **Did:** **#64** MIGRATION snapshots · **#65** installer chown ·
**#66** mkFlake theme-state errors · **#67** theme fidelity nits ·
**#68** #52 residual ANSI · **#69** audit identity exemptions ·
**#70** import-pipeline hierarchy · **#71** IR portal docs (a) ·
**#72** template SoT CI · **#73** hardware hints residual · **#74**
unattended install matrix · **#75** SoT V2 install. Breadcrumbs in
PROPOSED; actionable items sit above #20/#41 in NEXT.
- **Verified:** V0 (backlog only).
- **Next suggestion:** queue head **#64** (docs) or batch #67/#68 themes.
## 2026-07-10 — PROPOSED cleanup (stale exam residue)
- **Task:** Bernardo: clean stale PROPOSED items after A/B/C + #52 ship.
- **Did:** Rewrote PROPOSED to open work only — dropped #52 shipped
high-ROI bullets, neon-glass quarantine, empty/shipped installer
audit sections, template seed drift (keys already present), soft
gaps fixed by #50, and “no action” kanagawa/boreal notes. Kept
product day-2, installer follow-ups, theme polish residuals, tooling.
- **Verified:** V0 (backlog hygiene); spot-checked template keys,
latte/mocha #52 fixes, usbutils, package exports.
- **Next suggestion:** triage the lean PROPOSED list or HARDWARE-QUEUE.
## 2026-07-10 — Pending closeout: #14, #57 V2, #41 slice
- **Task:** pending V2/CI/float leftovers after A/B/C batch.
- **Did:** **#14 closed** — first scheduled lock bump landed
`8fded63` (2026-07-06 Mon 05:20 UTC) as `nomarchy-bump` /
`chore(lock): scheduled upstream bump` (Actions token push works).
**#57 V2** — `checks.live-install-entry` asserts live HM gen has
`nomarchy-install.desktop` (Name/Terminal/Exec) + installer bin +
Tools menu gate in `nomarchy-menu`. **#41 slice** — float/center rules
for hyprpolkitagent + pinentry-qt from package app-id strings;
`tools/capture-float-classes.nix` harness (softGL empty clients);
residual GTK portal stays NEXT `#41 [blocked:hw]`. HARDWARE-QUEUE
float confirm steps added.
- **Verified:** **V2** live-install-entry green; windowrule-syntax green.
SoftGL class capture inconclusive (empty clients). **V3** float confirm
+ fingerprint/#60 still HARDWARE-QUEUE. **#20** still `[human]`.
- **Next suggestion:** Bernardo: #20 KVM runner, or HARDWARE-QUEUE pass.
## 2026-07-10 — #55 fingerprint menu + #56 human rebuild errors
- **Task:** NEXT #55 (System Fingerprint) + #56 (rebuild failure UX).
- **Did:** #55 — System row self-gated on fprintd-list; enroll/list/verify/
delete-all terminal flows; Use for login writes
`settings.fingerprint.pam` (hardware.nix default from stateFile);
HARDWARE.md §5 + HARDWARE-QUEUE V3 enroll. #56 — sys-update /
sys-rebuild / home-update tee last 40 lines + nomarchy-doctor pointer;
theme-sync run_switch notify/die text. Closed #55/#56.
- **Verified:** **V1** — HM template rebuild (menu + theme-sync);
option-docs green; failure-footer shell smoke. **V3 pending:** real
fingerprint enroll (queue). **V2 pending:** forced bad sys-rebuild in
VM (footer text pure/logic covered).
- **Next suggestion:** queue was AC; remaining NEXT is blocked items
(#14/#20/#41) or PROPOSED triage.
## 2026-07-10 — #58 nomarchy-detect-hw CLI
- **Task:** NEXT #58 — post-install re-probe package (HARDWARE.md §8).
- **Did:** `pkgs/nomarchy-detect-hw` wrapping installers hardware-db;
human report + snippets + `--raw` protocol; overlay + systemPackages;
HARDWARE.md §8 updated. Closed #58.
- **Verified:** **V1** — package builds; ran on this AMD laptop: correct
MODULE/NOMARCHY lines (amd cpu/gpu, laptop, ssd, fingerprint, IR cam,
NPU) and printable system.nix snippets.
- **Next suggestion:** #55 fingerprint menu or #56 human rebuild errors.
## 2026-07-10 — #57 live Install Nomarchy affordance
- **Task:** NEXT #57 — durable live-ISO install surface (not only toast).
- **Did:** `xdg.desktopEntries.nomarchy-install` (Terminal=true) on live
HM; Tools Install Nomarchy self-gated on `command -v nomarchy-install`;
welcome toast wording updated. Closed #57.
- **Verified:** **V1** — live config eval exposes entry name/exec;
`downstream-template-home` rebuilds with menu gate. **V2 pending:**
ISO rebuild + smoke that the .desktop appears in the session.
- **Next suggestion:** #58 `nomarchy-detect-hw` CLI.
## 2026-07-10 — #63 generated Waybar logo + powermenu
- **Task:** NEXT #63 — reverse parity: generated bar lacked whole-swap
logo → menu and power icon → power menu.
- **Did:** `custom/nomarchy` (left, Nomarchy.ttf U+F000) + `custom/powermenu`
(right, U+F011 → `nomarchy-menu power`) in generated settings/style.
Fixed Nix `\uf000` pitfall (no `\u` escapes — use literal UTF-8).
Whole-swaps already had both; no JSON/CSS edits. Closed #63.
- **Verified:** **V2**`THEME=tokyo-night` theme-shot: left monogram N,
right power glyph, accent styling; config modules-left/right correct.
Crop paths under `/tmp/theme-shot-tn2-*.png`.
- **Next suggestion:** product path #55 fingerprint menu (or #57 live install).
## 2026-07-10 — #60 name-agnostic system-battery scan ## 2026-07-10 — #60 name-agnostic system-battery scan
- **Task:** NEXT #60 — align charge-limit / menu / waybar / doctor / - **Task:** NEXT #60 — align charge-limit / menu / waybar / doctor /
installer chassis with battery-notifys type=Battery + !scope=Device installer chassis with battery-notifys type=Battery + !scope=Device

View File

@@ -19,6 +19,19 @@ Template:
--- ---
## 2026-07-11 — QA sweep (queue empty but #76)
- **Task:** QA sweep — NEXT only has #76 `[blocked:hw]`; no other
actionable items.
- **Did:** option-docs (88 opts) + template-sot green; HM generation has
What changed? / doctor float / first-boot unit; rotated JOURNAL.md
41→18 entries (tail → JOURNAL-ARCHIVE). No product code change.
- **Verified:** **V2**`nix flake check --no-build`; rebuilt green:
doctor, first-boot, what-changed, clamshell-logind, dock-audio,
windowrule-syntax, battery-notify, zram-swap, nightlight-geo.
- **Pending:** #76 V3 hibernate on Nomarchy hardware; #86/#87 V3 dock QA.
- **Next suggestion:** HARDWARE-QUEUE pass by human, or promote LATER
wallpapers split / triage PROPOSED.
## 2026-07-11 — #87 dock audio sink priority ## 2026-07-11 — #87 dock audio sink priority
- **Task:** NEXT #87 — default audio follows dock plug/unplug. - **Task:** NEXT #87 — default audio follows dock plug/unplug.
- **Did:** WirePlumber `90-nomarchy-dock-audio` (HDMI/DP session prio - **Did:** WirePlumber `90-nomarchy-dock-audio` (HDMI/DP session prio
@@ -299,344 +312,3 @@ Template:
and 3 (Look & Feel menu) remain under #79. and 3 (Look & Feel menu) remain under #79.
- **Next suggestion:** #79 slice 2 — the timer/hook (V2 runNixOSTest). - **Next suggestion:** #79 slice 2 — the timer/hook (V2 runNixOSTest).
## 2026-07-10 — #78 Omarchy migrant doc (docs/OMARCHY.md)
- **Task:** BACKLOG #78 (promoted from PROPOSED) — Omarchy→Nomarchy
one-pager (`VISION § F`).
- **Did:** New `docs/OMARCHY.md`: leads with the config-model shift
(imperative dotfiles → declarative flake + menu, rollback via
generations), then install (ISO/`nomarchy-install` or MIGRATION.md),
a familiar-bindings table, theming (`SUPER+T`/`nomarchy-theme-sync`),
packages (home.packages / `nix shell`, no AUR), update+rollback
(`nomarchy-pull`/`-rebuild`/`-home`, boot-menu generations,
`nomarchy-doctor`). Added to `docs/README.md` map + VISION § F ✓.
- **Verified:** V0 (docs). Grounded Nomarchy side in code: pulled real
binds from `keybinds.nix`; confirmed all 7 cited commands, the `nsearch`
alias, and the named slugs (gruvbox/rose-pine/nord) exist. Kept
Omarchy-side claims to known facts (Arch, dotfiles, pacman/AUR).
- **Pending:** none.
- **Next suggestion:** NEXT head #76 `[blocked:hw]`; last open PROPOSED is
auto time-of-day theme pair (`§D`, `[big]` — needs splitting).
## 2026-07-10 — #77 doctor hibernate/sleep section (V2 PASS)
- **Task:** BACKLOG #77 (promoted from PROPOSED by Bernardo) — read-only
hibernate section in nomarchy-doctor (`VISION § C`, #76 follow-on).
- **Did:** Added a hibernate/sleep row group to `nomarchy-doctor.sh`: resume
device on cmdline (+ `resume_offset` for a swapfile), disk swap ≥ RAM,
zram active, previous-boot suspend/hibernate error. Self-gates (`skip` on
swap=0); only ok/warn/skip → never fails the sheet. Added `hibernate` to
the `checks.doctor` probe list.
- **Verified:** **V2 PASS**`checks.doctor` VM test green (fresh build,
exit 0; asserts the hibernate row renders + healthy run still 0). **V1**
ran on this box's real LUKS+@swap layout: all three `ok` rows render
(resume set, swap 34G ≥ RAM, zram 16G) and the sheet reaches its verdict.
**V0** bash -n + flake check.
- **Gotcha (fixed + MEMORY):** the doctor runs `set -euo pipefail`; my first
cut aborted before the verdict because a no-match `grep` inside `$(…)` and
a `cond && action` both trip set -e. Fixed with `|| true` / `|| echo 0` and
an `if`. First VM run caught it (exit 1, no verdict) — the test earned its keep.
- **Pending:** none — fully agent-verifiable (read-only checks, no V3).
- **Next suggestion:** NEXT head is #76 `[blocked:hw]`; remaining PROPOSED
(Omarchy doc §F, auto time-of-day theme §D) await triage.
## 2026-07-10 — QA sweep (clean) + VISION-gap pass → 3 PROPOSED
- **Task:** Bernardo — QA/drift sweep, then a VISION-gap pass with proposals.
- **Did (sweep):** Fanned out two subagents (Bernardo OK'd spawning for
efficiency): nomarchy-runner ran the deterministic checks + `bash -n`/
`py_compile` (all PASS; the 4 "needs-args" scripts pass via their flake
derivations); nomarchy-scout hunted fuzzy drift (dead code, stale refs,
TODOs, changed-area contradictions, count/version) — **all clean**.
Spot-checked scout's count claim myself: 24 theme JSONs / 24 previews /
README "24 presets" — consistent. Eval sweep green. **No fixes needed.**
- **Did (VISION):** Verified candidate gaps against the tree before
proposing (killed two false gaps — nomarchy-rebuild/home already tail logs
+ point at doctor on failure = §A shipped; `nvd diff` = §B covered; System
Firmware menu already exists). Filed 3 **PROPOSED** (verified open):
doctor hibernate/sleep section (§C, top Day-2 pick, #76 follow-on),
Omarchy migrant one-pager (§F), auto time-of-day theme pair (§D, `[big]`).
- **Verified:** V0 (agent-notes/docs only). Sweep evidence above.
- **Pending:** none. Proposals await Bernardo's triage into a tier.
- **Next suggestion:** if a PROPOSED is promoted, the doctor hibernate
section is the cleanest next build; else NEXT #76 stays `[blocked:hw]`.
## 2026-07-10 — Icon overrides: user-facing docs (OVERRIDES.md)
- **Task:** Bernardo asked whether the session's features need user docs.
- **Did:** Hibernation already covered (README swapfile line, MIGRATION.md
runbook, discoverable Power-menu row) — no gap. Icons had one: the only
doc was the template comment. Added an "Icon pack" subsection to
`docs/OVERRIDES.md` § Appearance — `nomarchy-theme-sync set icons "<name>"`,
the known-packs table, the ~1 GiB/opt-in rationale, and that the choice is
sticky across `apply` (presets carry no icon field; verified `deep_merge`).
- **Verified:** command path confirmed (`cmd_set` writes any dotted key;
`icons` is a schema key). **Built all 4 packs and listed real theme dirs**
to fix the examples — caught Qogir using capital `Qogir-Dark`/`Light`
(lowercase would silently fall back to hicolor). Docs-only (V0).
- **Pending:** none.
- **Next suggestion:** NEXT #76 `[blocked:hw]`; LATER/QA-sweep next.
## 2026-07-10 — Icon themes: opt-in cross-pack overrides (no default bloat)
- **Task:** LATER "per-theme icon overrides / more icon packs". Recon found
papirus is already ~1 GiB and ships only Papirus/Dark/Light (no free
variety); real variety needs extra packs at ~hundreds of MB each. Bernardo
chose the **opt-in, no-default-bloat** shape (over shipping packs).
- **Did:** `theme.nix` resolves `nomarchy.theme.iconThemePackage` from a
small `iconPacks` registry (papirus·tela·qogir·reversal·numix, by name
prefix). Default themes name `Papirus-*` → resolves to the *plain* papirus
derivation (no symlinkJoin, identical closure); only a theme naming another
pack's set symlinkJoins that one pack in. `stylix.nix` uses it
(mkDefault). Opt-in note in `templates/downstream/home.nix`; ROADMAP §
Icon themes updated (incl. the deliberate no-default-packs decision).
- **Verified:** **V1** — HM activationPackage builds (exit 0). Eval proofs:
default `iconThemePackage` = plain `papirus-icon-theme-*` (zero delta);
with `icons="Tela-dark"``nomarchy-icon-themes` symlinkJoin (papirus+tela)
and name flows, **without building tela**. All 5 pack attrs exist in the
pinned nixpkgs. `template-sot` + `option-docs` + `flake check` green.
- **Pending:** none. No default visual change (identical papirus), so no
screenshot needed; the opt-in render is the downstream user's to see.
- **Next suggestion:** NEXT still #76 `[blocked:hw]`; LATER/QA-sweep next.
## 2026-07-10 — #76 slice 3: hibernate VM test (V2 PASS) → #76 agent-complete
- **Task:** BACKLOG #76 slice 3 — the mandatory V2 hibernate test + V3 queue.
- **Did:** Added `checks.hibernate` (flake.nix), modeled on nixpkgs'
hibernate.nix but wired to Nomarchy's #76 risk: imports oom.nix (zram
default-on), disk swap at lower priority + explicit `boot.resumeDevice`,
systemd-initrd. Test drives hibernate→power-off→resume→crash: ramfs marker
survives resume, a crash-boot loses it (real resume, not a survivor), and
asserts zram@100 + disk-swap<100 so the image lands on disk not volatile
zram. Queued the V3 laptop steps (real LUKS+@swap+offset resume + no-swap
notify) in HARDWARE-QUEUE. Collapsed #76 to a `[blocked:hw]` stub; design
record → ROADMAP § "Hibernation + zram by default".
- **Verified:** **V2 PASS**`nix build .#checks.x86_64-linux.hibernate`
built the driver fresh and exited 0 (all assertions held). `nix flake
check --no-build` green.
- **Pending:** only V3 (dev box / laptop) — #76's last check; close on PASS.
- **Next suggestion:** #76 is now blocked:hw; NEXT head falls to LATER/
PROPOSED triage or a QA sweep — pick per LOOP.md orientation next session.
## 2026-07-10 — #76 slice 2: Hibernate notify-on-failure
- **Task:** BACKLOG #76 remaining slice 2 — per the settled "keep row, notify
on failure" call.
- **Did:** `modules/home/rofi.nix` power menu Hibernate arm now runs
`systemctl hibernate 2>/dev/null || notify-send "Hibernate" "…see
docs/MIGRATION.md"`. On success the call blocks until resume, so the notify
only fires on a genuine failure (e.g. swap=0 no-swap machine). Row stays
unconditional (no hiding).
- **Verified:** **V1**`nix build …homeConfigurations.nomarchy.activationPackage`
green (rebuilds `nomarchy-menu.drv`; `writeShellScriptBin` runs bash -n at
build). Control-flow proof on the arm extracted from the built script:
failing `systemctl` → notify fires; succeeding → no notify. `nix flake
check --no-build` green.
- **Pending:** slice 3 = the V2 hibernate→resume VM test + V3 laptop
(Hibernate→power off→resume on the LUKS+@swap machine; plus confirm the
no-swap notify surfaces in a real session). Both remain open on #76.
- **Next suggestion:** slice 3 — add a `checks.*` hibernate VM test (as far
as QEMU allows) and queue the V3 laptop steps in HARDWARE-QUEUE.
## 2026-07-10 — #76 slice 1: MIGRATION.md hibernation runbook
- **Task:** BACKLOG #76 remaining slice 1 — docs runbook for enabling
hibernation on an existing machine (per the settled "docs not tool" call).
- **Did:** Added § "Enabling hibernation on an existing machine (no reinstall)"
to `docs/MIGRATION.md`: create `@swap` subvol (subvolid=5) + `mkswapfile`
(NOCOW), read `map-swapfile -r` offset, wire `fileSystems."/swap"` +
`swapDevices` + `resumeDevice` + `resume_offset` into system.nix. Flagged
the mount as required on the hand-edit path (installer gets it from
disko-gen hardware-config). Notes zram-priority reservation, no-LUKS
variant, `swap=0` opt-out. Worked example = this dev machine.
- **Verified:** **V0** — read-only commands run live against this machine's
real LUKS(`cryptroot`)+btrfs(`@`)+`/swap/swapfile` layout (RAM 31G, fsuuid,
`findmnt SOURCE`, `mkswapfile` flags, zram@100 vs swapfile@-1 confirms the
design intent). `nix flake check --no-build` green.
- **Pending:** slice 2 — Hibernate row notify-on-failure (V1/V2); then the
V2 hibernate VM test + V3 laptop.
- **Next suggestion:** slice 2 (menu notify-on-failure).
## 2026-07-10 — #76 hibernation design calls (no commit yet → this bookkeeping)
- **Task:** BACKLOG #76 design slice — Bernardo made the open calls.
- **Did:** Recon showed the hibernation half is **already built for new
installs** (installer defaults swap=RAM hibernation-ready `@swap` swapfile;
`patch-template.py` writes swapDevices/resumeDevice/resume_offset; Power
menu Hibernate row + LUKS/hyprlock handling exist). Settled 3 calls:
(1) swap sizing = **exactly RAM** (no change); (2) migration = **docs
runbook in MIGRATION.md**, not a tool; (3) no-swap Hibernate = **keep row,
notify on failure**. Folded into BACKLOG #76 (design ✓, re-sliced remaining:
MIGRATION.md runbook + notify-on-failure menu) and Decisions.
- **Verified:** **V0**`nix flake check --no-build` green (docs-only).
- **Pending:** two remaining slices below; V2 hibernate VM test + V3 laptop.
- **Next suggestion:** slice 1 — `docs/MIGRATION.md` hibernation-enable runbook
(V0), then slice 2 — Hibernate notify-on-failure (V1/V2).
## 2026-07-10 — #76 zram slice: compressed-RAM swap default
- **Task:** BACKLOG #76 (`[big]`) — split; took the low-risk zram-default slice.
- **Did:** `zramSwap` on by default in `modules/nixos/oom.nix` (zstd, 50% RAM,
priority 100) as the memory-pressure layer before earlyoom, following the
earlyoom mkDefault precedent (no toggle). High priority keeps day-to-day
paging in zram so a disk swapfile stays reserved for #76's hibernate image.
Added `checks.zram-swap` runNixOSTest (imports oom.nix). Split #76 in
BACKLOG → remainder is the hibernation half (swapfile/resume/installer).
- **Verified:** **V2**`nix build .#checks…zram-swap` PASS: /dev/zram0 active
in /proc/swaps, `[zstd]` comp_algorithm, priority 100. **V1** full distro
toplevel builds. **V0** flake check --no-build green.
- **Pending:** hibernation half of #76 still open (needs hibernate→resume VM
test + V3 laptop). No V3 for zram (under-load tuning is secondary).
- **Next suggestion:** #76 hibernation half — design default swapSize + the
resume/installer wiring; it's the boot-critical, V2-hibernate + V3 part.
## 2026-07-10 — #41 hardware-confirmed: OpenFile portal floats (V3 close)
- **Task:** BACKLOG #41 — final on-hardware confirmation (Bernardo reported PASS).
- **Did:** #41 already out of NEXT + portal rule shipped
(`hyprland.nix` xdg-desktop-portal-gtk float/center). Bernardo verified the
GTK OpenFile file-picker floats on real hardware; dropped the "OpenFile not
re-probed / optional residual" caveats in HARDWARE-QUEUE — #41 fully closed.
- **Verified:** **V3** (Bernardo, Latitude). No code change. Bookkeeping only;
QA-sweep guards run green this session: `nix flake check --no-build`,
option-docs/template-sot/theme-sync-validate builds, contrast 24×7.
- **Pending:** none for #41. NEXT head is #76 (hibernation + zram, `[big]`).
- **Next suggestion:** split #76 — take the low-risk **zram-default** slice
(V2-testable headlessly) before the boot-critical hibernate/resume work.
## 2026-07-10 — Close #41 GTK portal float rule
- **Task:** BACKLOG #41 residual (GTK file-chooser portal class).
- **Did:** Added float+center for `xdg-desktop-portal-gtk` /
`.xdg-desktop-portal-gtk-wrapped` (desktop + libexec name from package).
Polkit already PASS on Latitude. Removed #41 from NEXT; only #20 remains.
- **Verified:** **V0** windowrule-syntax check path unchanged; class from
package `xdg-desktop-portal-gtk.desktop` / community configs. SoftGL
still cannot materialize portal dialogs.
- **Pending:** optional hardware spot-check OpenFile floats (HARDWARE-QUEUE).
- **Next suggestion:** #20 is `[human]` only — or LATER/PROPOSED triage.
## 2026-07-10 — Product calls: charge live, identity, btop, NVIDIA skip
- **Task:** Bernardo decisions on remaining PROPOSED.
- **Did:** (1) Instant charge-limit: udev GROUP=users on threshold,
menu/powermgmt live sysfs + state, oneshot reads live theme-state +
AC re-apply. (2) Look & Feel already had Theme/wallpaper/night light;
added Reset wallpaper (auto). (3) NVIDIA first-class deferred past v1
(HARDWARE.md). (4) Identity retunes: white L-steps, lumon subtext,
hackerman surface+UI warn/bad, matte-black subtext, miasma bad.
(5) Hand `btop.theme` for 9 identity/whole-swap slugs from palette map.
- **Verified:** **V0** contrast 24×7; **V1** battery-charge-limit VM
(udev restart). **V3** live charge write on real laptop (HARDWARE-QUEUE).
- **Next suggestion:** only #20/#41 blocked, or Decisions.
## 2026-07-10 — Summer pair polish + status CSS + preview recapture
- **Task:** finish agent-able PROPOSED theme leftovers.
- **Did:** summer-day/night — JSON hierarchy (night subtext/muted/overlay
ladder; day overlay≠muted); waybar CSS tokens track JSON roles; font
13px both; day battery 25/10; VPN pill + full status states
(.recording/.available/.on/.activated/battery warn). Recaptured
executive-slate + neon-glass `preview.png` via theme-shot desktop
(480×270). Closed those PROPOSED lines.
- **Verified:** **V0** contrast 24×7 + wholeswap; **V2** theme-shot
summer-day/night/executive-slate/neon-glass — viewed bar crops +
previews. Identity taste retunes stay PROPOSED.
- **Next suggestion:** only blocked NEXT (#20/#41) or product Decisions.
## 2026-07-10 — #74 matrix flags + #75 V2 install (default arm)
- **Task:** NEXT #74 unattended matrix · #75 SoT V2 install after ISO.
- **Did:** `NOMARCHY_TEST_SWAP_GB` / `NOMARCHY_TEST_NO_LUKS` drive
`tools/test-install.sh` go.sh + first-boot LUKS skip; nixpkgs OVMF
fallback. Full offline install V2 (SWAP=2 LUKS) after live ISO rebuild
with starter packages — first-boot themed Boreal, no red banner.
Closed #74/#75. Other matrix arms scripted (not full-ISO re-run).
- **Verified:** **V2** — install powered off ~460s; first-boot.png
viewed (`/tmp/nomarchy-vm-75/first-boot.png`): themed wallpaper +
waybar (logo, clock, modules), doctor glyph, no autogen banner.
- **Next suggestion:** NEXT only #20 [human] + #41 [blocked:hw].
## 2026-07-10 — Loop batch land #64#73 (parallel worktrees)
- **Task:** agent-actionable NEXT #64#73 via worktree agents; land on main.
- **Did:** #64 MIGRATION snapshots · #65 real-uid chown · #66 theme-state
fail-closed reader · #67/#68 theme fidelity+ANSI · #69/#70 audit+import
tools · #71 IR portal docs · #72 template-sot check · #73 MOTD/first-boot
fingerprint+doctor tips. Agents did not push; parent cherry-picked
(stripped agent BACKLOG races). Closed #64#73.
- **Verified:** **V0/V1** — theme-contrast 24×7 pass; template-sot green;
bash -n install; flake check --no-build green.
- **Next suggestion:** #74 unattended matrix + #75 V2 install (KVM).
## 2026-07-10 — Promote agent-actionable PROPOSED → NEXT #64#75
- **Task:** Bernardo: bump non-hw/non-human PROPOSED categories 1+2.
- **Did:** **#64** MIGRATION snapshots · **#65** installer chown ·
**#66** mkFlake theme-state errors · **#67** theme fidelity nits ·
**#68** #52 residual ANSI · **#69** audit identity exemptions ·
**#70** import-pipeline hierarchy · **#71** IR portal docs (a) ·
**#72** template SoT CI · **#73** hardware hints residual · **#74**
unattended install matrix · **#75** SoT V2 install. Breadcrumbs in
PROPOSED; actionable items sit above #20/#41 in NEXT.
- **Verified:** V0 (backlog only).
- **Next suggestion:** queue head **#64** (docs) or batch #67/#68 themes.
## 2026-07-10 — PROPOSED cleanup (stale exam residue)
- **Task:** Bernardo: clean stale PROPOSED items after A/B/C + #52 ship.
- **Did:** Rewrote PROPOSED to open work only — dropped #52 shipped
high-ROI bullets, neon-glass quarantine, empty/shipped installer
audit sections, template seed drift (keys already present), soft
gaps fixed by #50, and “no action” kanagawa/boreal notes. Kept
product day-2, installer follow-ups, theme polish residuals, tooling.
- **Verified:** V0 (backlog hygiene); spot-checked template keys,
latte/mocha #52 fixes, usbutils, package exports.
- **Next suggestion:** triage the lean PROPOSED list or HARDWARE-QUEUE.
## 2026-07-10 — Pending closeout: #14, #57 V2, #41 slice
- **Task:** pending V2/CI/float leftovers after A/B/C batch.
- **Did:** **#14 closed** — first scheduled lock bump landed
`8fded63` (2026-07-06 Mon 05:20 UTC) as `nomarchy-bump` /
`chore(lock): scheduled upstream bump` (Actions token push works).
**#57 V2** — `checks.live-install-entry` asserts live HM gen has
`nomarchy-install.desktop` (Name/Terminal/Exec) + installer bin +
Tools menu gate in `nomarchy-menu`. **#41 slice** — float/center rules
for hyprpolkitagent + pinentry-qt from package app-id strings;
`tools/capture-float-classes.nix` harness (softGL empty clients);
residual GTK portal stays NEXT `#41 [blocked:hw]`. HARDWARE-QUEUE
float confirm steps added.
- **Verified:** **V2** live-install-entry green; windowrule-syntax green.
SoftGL class capture inconclusive (empty clients). **V3** float confirm
+ fingerprint/#60 still HARDWARE-QUEUE. **#20** still `[human]`.
- **Next suggestion:** Bernardo: #20 KVM runner, or HARDWARE-QUEUE pass.
## 2026-07-10 — #55 fingerprint menu + #56 human rebuild errors
- **Task:** NEXT #55 (System Fingerprint) + #56 (rebuild failure UX).
- **Did:** #55 — System row self-gated on fprintd-list; enroll/list/verify/
delete-all terminal flows; Use for login writes
`settings.fingerprint.pam` (hardware.nix default from stateFile);
HARDWARE.md §5 + HARDWARE-QUEUE V3 enroll. #56 — sys-update /
sys-rebuild / home-update tee last 40 lines + nomarchy-doctor pointer;
theme-sync run_switch notify/die text. Closed #55/#56.
- **Verified:** **V1** — HM template rebuild (menu + theme-sync);
option-docs green; failure-footer shell smoke. **V3 pending:** real
fingerprint enroll (queue). **V2 pending:** forced bad sys-rebuild in
VM (footer text pure/logic covered).
- **Next suggestion:** queue was AC; remaining NEXT is blocked items
(#14/#20/#41) or PROPOSED triage.
## 2026-07-10 — #58 nomarchy-detect-hw CLI
- **Task:** NEXT #58 — post-install re-probe package (HARDWARE.md §8).
- **Did:** `pkgs/nomarchy-detect-hw` wrapping installers hardware-db;
human report + snippets + `--raw` protocol; overlay + systemPackages;
HARDWARE.md §8 updated. Closed #58.
- **Verified:** **V1** — package builds; ran on this AMD laptop: correct
MODULE/NOMARCHY lines (amd cpu/gpu, laptop, ssd, fingerprint, IR cam,
NPU) and printable system.nix snippets.
- **Next suggestion:** #55 fingerprint menu or #56 human rebuild errors.
## 2026-07-10 — #57 live Install Nomarchy affordance
- **Task:** NEXT #57 — durable live-ISO install surface (not only toast).
- **Did:** `xdg.desktopEntries.nomarchy-install` (Terminal=true) on live
HM; Tools Install Nomarchy self-gated on `command -v nomarchy-install`;
welcome toast wording updated. Closed #57.
- **Verified:** **V1** — live config eval exposes entry name/exec;
`downstream-template-home` rebuilds with menu gate. **V2 pending:**
ISO rebuild + smoke that the .desktop appears in the session.
- **Next suggestion:** #58 `nomarchy-detect-hw` CLI.
## 2026-07-10 — #63 generated Waybar logo + powermenu
- **Task:** NEXT #63 — reverse parity: generated bar lacked whole-swap
logo → menu and power icon → power menu.
- **Did:** `custom/nomarchy` (left, Nomarchy.ttf U+F000) + `custom/powermenu`
(right, U+F011 → `nomarchy-menu power`) in generated settings/style.
Fixed Nix `\uf000` pitfall (no `\u` escapes — use literal UTF-8).
Whole-swaps already had both; no JSON/CSS edits. Closed #63.
- **Verified:** **V2**`THEME=tokyo-night` theme-shot: left monogram N,
right power glyph, accent styling; config modules-left/right correct.
Crop paths under `/tmp/theme-shot-tn2-*.png`.
- **Next suggestion:** product path #55 fingerprint menu (or #57 live install).