feat(theme): capture Boreal picker preview + V2-verify default
All checks were successful
Check / eval (push) Successful in 3m6s
All checks were successful
Check / eval (push) Successful in 3m6s
Close the honesty gap on #45. Rendered the full Boreal desktop headlessly (tools/theme-shot.nix, softGL 1920x1080) and confirmed the session reads as Boreal — aurora wallpaper, Waybar violet accent (#B79BE8) workspace pill, GeistMono clock, rofi launcher violet prompt/selection — not Tokyo Night. Added themes/boreal/preview.png (480x270, matches the existing 21) so the picker row is no longer plain-name. theme-shot: park the cursor bottom-right before the desktop shot so the frame (which doubles as the preview source) is clean; reusable for the other two missing previews. Verified: V0 flake check; V2 theme-shot desktop/menu shots viewed; contrast 24x7 pass. Preview is a headless bare-desktop capture (not the floating-terminal composition of the others) — hardware recapture noted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -47,22 +47,6 @@ non-empty), laptop charge-threshold sysfs when a limit is set. Spec:
|
||||
docs/HARDWARE.md §10. Cost: doctor.sh sections; V1 in existing
|
||||
`checks.doctor` where fakes exist, rest V2/V3.
|
||||
|
||||
### 45. V2/V3 verify: Boreal default theme (follow-up to #42 / `351b7ad`)
|
||||
Code for Boreal-as-default shipped at V0 only (seed JSON + eval
|
||||
fallbacks; contrast green). **Needs a VM-capable agent** (or hardware)
|
||||
to close the honesty gap. Checklist:
|
||||
1. `nix flake check --no-build` green on current `main` (ISO eval can be
|
||||
slow — let it finish).
|
||||
2. V1 optional: build template HM or live toplevel if time allows.
|
||||
3. V2: boot live ISO (`tools/test-live-iso.sh`) or apply template HM —
|
||||
confirm session/wallpaper/terminal read as **Boreal** (slug
|
||||
`boreal`, violet accent, GeistMono), not Tokyo Night.
|
||||
4. Capture `themes/boreal/preview.png` for the theme picker (square
|
||||
crop per MEMORY rofi icon note) and commit it.
|
||||
5. V3 optional: append HARDWARE-QUEUE if only a real panel/GPU shows
|
||||
something headless can't. Delete this item when checklist is done;
|
||||
journal the tier reached.
|
||||
|
||||
### 46. V2 verify: install swap=0 + unattended LUKS fail-closed (`208b8d4`)
|
||||
Pure `nix-instantiate` on disko subvols passed V0; **full install path
|
||||
not exercised**. VM agent with KVM:
|
||||
@@ -152,8 +136,8 @@ implement. Bernardo moves accepted items into a tier.*
|
||||
|
||||
Product themes and the release bar live in **VISION**. **NEXT:**
|
||||
#43 System › Firmware · #44 doctor hardware. #42 boreal default
|
||||
shipped (seed state + eval fallbacks); still missing
|
||||
`themes/boreal/preview.png` (picker plain-name until captured).
|
||||
shipped + V2-verified (session reads as Boreal); `preview.png` captured
|
||||
(headless fallback — hardware recapture nicety noted under theme polish).
|
||||
Remaining candidate promotions: fingerprint menu · first-boot tips ·
|
||||
human rebuild errors · neon-glass quarantine.
|
||||
|
||||
@@ -304,12 +288,15 @@ human rebuild errors · neon-glass quarantine.
|
||||
### Theme polish / completeness (codebase exam 2026-07-09)
|
||||
|
||||
- **Missing theme picker previews + hand btop for identity themes**
|
||||
`boreal` (now the default — higher priority), `executive-slate`, and
|
||||
`neon-glass` lack `preview.png` (picker plain-name rows) and
|
||||
`btop.theme` (generated btop only). CSS/jsonc for boreal/executive-slate
|
||||
are solid. Capture boreal preview ASAP for v1.0 bar; others after
|
||||
neon-glass is fixed/quarantined. Cost: asset capture + optional hand
|
||||
btop; V3 visual.
|
||||
`executive-slate` and `neon-glass` lack `preview.png` (picker
|
||||
plain-name rows). All three still ship generated btop only (no hand
|
||||
`btop.theme`). `boreal` now has a `preview.png` (2026-07-09) but it's a
|
||||
**headless theme-shot capture** — a clean bare desktop+bar, not the
|
||||
floating-terminal (fastfetch+btop) composition the other 21 use; a
|
||||
real-hardware recapture to match the grid would be nicer (VM is the
|
||||
documented fallback). CSS/jsonc for boreal/executive-slate are solid.
|
||||
Capture the other two after neon-glass is fixed/quarantined. Cost:
|
||||
asset capture + optional hand btop; V3 visual.
|
||||
|
||||
- **Generated Waybar missing identity-bar affordances**
|
||||
Whole-swap bars ship `custom/powermenu` and a left logo → main menu;
|
||||
@@ -513,6 +500,18 @@ flagged separately from fidelity bugs.*
|
||||
can ship. Expand to all tracked `*.py` (or at least installer +
|
||||
tools). Cost: one workflow line; TESTING.md §1 should match.
|
||||
|
||||
- **No guard against dead Hyprland rule syntax in the generated conf**
|
||||
The `windowrule` 0.53-migration bug (fixed 2026-07-09, `ed7fd93`) shipped
|
||||
a red config-error banner on the *default* desktop for weeks — invisible
|
||||
to `nix flake check` (the conf builds fine; Hyprland only rejects it at
|
||||
session start). A cheap `checks.*` could build the generated
|
||||
`hyprland.conf` and grep for the dead rule-first pattern
|
||||
(`windowrule\s*=\s*(float|center|size|tile|...)\s*,`) and the
|
||||
`windowrulev2` keyword, failing on a match. Better still (heavier):
|
||||
`hyprland --verify`-style parse if one exists. Cost: small runCommand
|
||||
check; catches the whole class. Pairs with the theme-shot harness that
|
||||
actually caught this.
|
||||
|
||||
- **No automated check for installer pure contracts**
|
||||
`compose-lock.py`, disko `swapSize`/`withLuks` arg contract, and
|
||||
hardware-db module names vs `nixos-hardware.nixosModules` have no
|
||||
|
||||
@@ -17,6 +17,25 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-09 — #45 V2 verify Boreal default + capture preview.png (theme-shot)
|
||||
- **Task:** NEXT #45 — close the honesty gap on Boreal-as-default (shipped V0
|
||||
only at #42) and capture the picker preview. VM-capable environment (KVM).
|
||||
- **Did:** Rendered the full Boreal desktop headlessly via `tools/theme-shot.nix`
|
||||
(softGL, 1920×1080). Confirmed the session reads as **Boreal** — aurora
|
||||
wallpaper paints, Waybar violet accent (`#B79BE8`) workspace pill, GeistMono
|
||||
clock, rofi launcher violet prompt/selection — not Tokyo Night. Captured a
|
||||
480×270 `themes/boreal/preview.png` (matches the other 21's format) from the
|
||||
desktop frame; added a cursor-park to theme-shot so the shot is clean. (En
|
||||
route, found+fixed the windowrule banner — separate commit `ed7fd93`.)
|
||||
- **Verified:** V0 flake check green; **V2** theme-shot desktop.png + menu.png
|
||||
viewed (banner gone post-fix, bar+launcher themed). Scripted: contrast 24×7
|
||||
pass; audit boreal advisory-only.
|
||||
- **Pending:** preview is a headless bare-desktop capture, not the
|
||||
floating-terminal composition of the other 21 — hardware recapture noted
|
||||
under theme polish. V3 (real panel/GPU) not done — not required. The float
|
||||
rules now parse but weren't exercised on real windows (item 41 territory).
|
||||
- **Next suggestion:** #46 (install swap=0 / LUKS fail-closed) — driver ready.
|
||||
|
||||
## 2026-07-09 — Fix Hyprland windowrule config-error banner (windowrule 0.53 migration)
|
||||
- **Task:** bug tripped over while doing #45 (VM Boreal verify) — the default
|
||||
desktop showed a red Hyprland config-error banner on every boot, occluding
|
||||
|
||||
BIN
themes/boreal/preview.png
Normal file
BIN
themes/boreal/preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
@@ -61,13 +61,19 @@ pkgs.testers.runNixOSTest {
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_file("/run/user/1000/hypr", 180)
|
||||
# hyprctl dispatch helper (session env resolved from the runtime dir).
|
||||
hy = "su - nomarchy -c 'XDG_RUNTIME_DIR=/run/user/1000 HYPRLAND_INSTANCE_SIGNATURE=$(ls /run/user/1000/hypr | head -1) hyprctl dispatch"
|
||||
# The session exec-once paints the wallpaper (softGL first paint at
|
||||
# 1920x1080 is slow) — give it a generous settle.
|
||||
machine.sleep(30)
|
||||
# Park the cursor in the bottom-right corner so it doesn't sit in the
|
||||
# middle of the desktop shot (that frame doubles as the theme-picker
|
||||
# preview.png source).
|
||||
machine.execute(hy + " movecursor 1912 1075' >/dev/null 2>&1")
|
||||
machine.sleep(1)
|
||||
machine.screenshot("desktop")
|
||||
# Open the root menu for the polish review.
|
||||
hy = "su - nomarchy -c 'XDG_RUNTIME_DIR=/run/user/1000 HYPRLAND_INSTANCE_SIGNATURE=$(ls /run/user/1000/hypr | head -1) hyprctl dispatch exec"
|
||||
machine.execute(hy + " nomarchy-menu' >/dev/null 2>&1")
|
||||
machine.execute(hy + " exec nomarchy-menu' >/dev/null 2>&1")
|
||||
machine.sleep(8)
|
||||
machine.screenshot("menu")
|
||||
'';
|
||||
|
||||
Reference in New Issue
Block a user