diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 43f58b9..f270d5f 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -26,168 +26,7 @@ next, in what order*. ## NEXT -### 28. Theme UI review — make every surface stunning `[big]` -(Raised by Bernardo, 2026-07-05 — placed at the head of NEXT; reorder -freely.) A thorough visual pass over the whole themed UI — Waybar (the -generated bar AND the summer whole-swaps), rofi menus, swaync, -hyprlock, the cheatsheet, ghostty/btop, GTK/Qt, boot splash, greeter — -with the bar set at *stunning*, not merely consistent (pillar 4). -Grounded in design theory, not taste alone: -- **Color:** palette-role relationships that demonstrably work - together — harmony models (analogous/complementary accents), - perceptual lightness ordering of base→surface→overlay→text (check in - OKLCH, not raw hex), accent/warn/bad distinguishable for color-blind - users; extend tools/check-theme-contrast.py to encode the adopted - rules (it currently guards legibility pairs only). -- **Typography & rhythm:** a consistent type scale across bar/menus/ - OSD, spacing on the ui.gapsIn/gapsOut grid, aligned paddings (the - bar's per-module padding vs rofi rows vs swaync toasts). -- **Hierarchy:** what reads first — bar module ordering/weights, menu - title vs rows, toast title vs body; icon weights consistent with the - adjacent text. -Bernardo has offered image-expert models for designed graphics -(wallpapers, logos, glyphs, preview/branding art): an agent slice that -needs artwork must STOP and ask ("say the word") instead of shipping -programmer-art. -Slices: (a) ✓ the audit (2026-07-05, iteration #31 — findings below); -(b) palette-level fixes + the extended contrast/harmony checker — -P1s ✓ shipped 2026-07-05 (iteration #32): summer-day + flexoki-light -subtext/surface/overlay/muted retuned (flexoki to its canonical -upstream tones), miasma + kanagawa surfaces raised (kanagawa to -sumiInk4); `subtext/base ≥ 3` now GATED in check-theme-contrast.py -(all 21 pass). P2s ✓ shipped 2026-07-05 (iteration #33): 18 hex -retunes across 9 themes (OKLCH hue-preserving minimal raises; -canonical where upstream defines one — gruvbox bg4, nord #616e88, -latte overlay1, flexoki 600-series statuses for light mode) and the -four floors GATED: muted ≥ 2, text/surface ≥ 4.5, accentAlt ≥ 3, -warn ≥ 2.5 (21×7 pairings green; audit contrast findings 20 → 1 — -miasma's earthy `bad` stays as identity, good/bad floors stay -audit-only so no exemption list was needed). Remaining (b): nothing — -further palette work graduates from slices (c)/(d) findings; -(c) per-surface polish slices — capture harness ✓ shipped 2026-07-05 -(iteration #34): `tools/theme-shot.nix` boots the themed desktop -headlessly at 1080p and screenshots desktop + open root menu (proven -on tokyo-night); per-surface punch items from the first full-res -review: - - ✓ **rofi keybind hints** (shipped iteration #37): dimmed pango - hints on root/Tools/System rows, generated from keybinds.nix via - the cheatsheet's prettyKeys (single source, can't drift) — - capture-verified on tokyo-night. - - **Icon weight mix `[human]`:** full-color Papirus icons in the - menus vs all-monochrome bar glyphs — pick: symbolic/monochrome - menu icons for one system, or color as the menu's identity. - A/B captured on lumon (iteration #46, side-by-side: - https://claude.ai/code/artifact/1ccd10fe-4b6f-454a-888d-e7fdf2362b03): - B (symbolic) matches the bar's weight but Papirus symbolic - coverage has holes (preferences-desktop-theme-symbolic missing — - Look & Feel lost its icon) and rofi tints symbolics a fixed dim - gray, not the theme text color — going B needs an icon audit + - recolor slice. A costs nothing. Awaiting the call; A stays until - then. - - ✓ **Bar right-cluster rhythm** (shipped iteration #36): group - margins before pulseaudio/powerprofile/battery — heads that - self-hide degrade to the uniform spacing. - - ✓ **Semantic dim** (shipped iteration #36): workspaces + dnd + - muted-volume now use `@muted` (floor-guaranteed by 28b) instead - of `alpha(@text, 0.5)` tints; the CSS comment now documents the - new invariant. - - ✓ **compositor backdrop** (shipped iteration #35): Hyprland - `misc:background_color` now the theme's base — no more black flash - behind a missing/slow wallpaper (glaring on light themes in the - summer-day capture). - - summer-day whole-swap capture reviewed (iteration #35): the - authored slate menu + island-pill bar survive the 28b retunes and - read as one coherent identity — keep. ✓ placeholder-dim nit fixed - (iteration #38: both summer rasi, bg0 at 60% alpha). - - latte capture reviewed (iteration #38): the generated menu is - fully coherent on light themes (zebra rows, retuned surface, blue - selected, dimmed hints) — the audit's "dark terminal on latte" - preview concern was a stale preview, not a defect. Backdrop - probe: misc:background_color IS applied (hyprctl getoption = - 0xFFEFF1F5); captures show dark because awww's empty-state layer - paints over it in the wallpaper-less VM — on hardware the fix - covers its intended window (the pre-awww startup gap). - - ✓ Harness gap fixed (iteration #44): guest `~/.nomarchy` seeded - via tmpfiles BEFORE greetd starts the session, so the session's - own exec-once wallpaper paint runs (a post-boot testScript seed - was too late for exec-once, and a manual re-run fails without - WAYLAND_DISPLAY — awww's client socket is display-named). - Wallpaper-complete summer-night capture reviewed: lakeside night - scene + cream inverted bar + menu-over-scene all cohere; the - placeholder dim (#2d353b99) renders. Note: summer-night's cream - bar/menu on dark backdrop is the authored inverted design (fg as - surface), not a rendering bug. - - ✓ Identity-theme capture + stub purge (iteration #45): the lumon - capture exposed that catppuccin/lumon/nord/retro-82 shipped stub - waybar.css files (2–14 lines, from the f211ef0 rewrite import) — - and a theme waybar.css whole-swaps the ENTIRE generated - stylesheet, so those four ran an unstyled default bar. Stubs - deleted; re-capture confirms lumon falls back to the generated - styled bar (workspace pill, padded right cluster). Their full - ~110-line rofi.rasi designs kept. Real whole-swaps remain only - summer-day/night (+ nord/retro-82 lost nothing: the stubs had no - design). -(d) the whole-swap themes brought to the same bar (module parity -verified textually 2026-07-05: whole-swaps carry every functional -module; omitting cpu/memory is identity). Visual work is -V3-bound by nature — screenshots are the review artifact, hardware -confirms. -**Audit findings (slice a — `tools/audit-theme-design.py` over all 21 -palettes + visual pass over previews; identity-aware curation):** -- ~~P1 · invisible-secondary-text palettes~~ ✓ fixed iteration #32 - (summer-day subtext #6e828a, surface #efe7d0; flexoki-light to - canonical Flexoki: surface #E6E4D9, overlay #B7B5AC, subtext - #6F6E69, muted #878580). Gate added. -- ~~P1 · inverted bg stacks~~ ✓ fixed iteration #32 (miasma surface - #2e2e2e; kanagawa surface #2a2a37 = upstream sumiInk4). Note - learned: in this palette model `overlay` is a MID-TONE - (borders/dim, catppuccin semantics), not a third bg tier — the - dark-theme overlay==muted pattern is intentional. -- **P2 · muted floor:** muted-on-base < 2.0 on gruvbox (1.27), - everforest (1.55), lumon (1.68), nord (1.69), white (1.82), latte - (1.91), retro-82 (1.93) — dimmed workspaces/inactive items barely - render (visible on the lumon preview). Adopt ≥ 2.0 and retune. -- **P2 · warn barely reads:** warn-on-base ≈ 2.0–2.3 on rose-pine, - summer-day, latte, flexoki-light — this is the bar's 25%-battery - color. Floor 2.5 (or see the color-only rule below). -- **P2 · text-on-surface < 4.5:** ristretto 3.88, latte 4.39 (menus - and chips draw text on surface). -- **P3 · accentAlt-on-base < 3:** latte 2.34, summer-day 2.83. -- ~~**Design rule (systemic): status is never color-only.**~~ ✓ swept - iteration #69 (2026-07-08). good/warn collapse under protanopia and - good/bad under deuteranopia is inherent to red/green/yellow, not - fixable per-palette — but the sweep found every Waybar status - indicator already carries non-color redundancy: **updates** shows a - count (`󰚰 N`) and self-hides; **vpn/doctor/nightlight/recording** - self-gate (presence *is* the state); **battery** changes glyph by - level + bolt-on-charge; **idle_inhibitor** (󰅶/󰾪) and - **pulseaudio.muted** (󰝟) are glyph-distinct. The one real gap: swaync - **inhibited-** states reused the normal bells (󰂜/󰂚), so "notifications - suppressed by an inhibitor" was distinguished from normal by *color - alone* — fixed by routing every suppressed state (DND or inhibited) to - the bell-off glyph + @muted, in the generated bar and all four - whole-swaps (parity). V3-pending: confirm the muted bell-off renders - while an app holds a notification inhibitor (HARDWARE-QUEUE). -- **Identity exemptions, made explicit:** vantablack + white - (deliberately hueless statuses), lumon (all-blue), hackerman - (matrix green statuses), matte-black/retro-82 (off-family hues) are - identity, not defects — slice (b)'s checker gets a per-theme - exemption list instead of silently lowered floors. -- **ANSI / greeter notes:** latte, rose-pine and white ship - `ansi[0]` LIGHTER than `ansi[15]` — decide the light-theme ANSI - convention (terminals conventionally keep black dark) before the - greeter/tty theming ships to them. tokyo-night/summer-night - `ansi[7]-on-ansi[0]` ≈ 2.8–3.0 = the greeter's muted text; fine as - muted, watch on hardware. -- **Visual pass (480×270 previews — too small for type/spacing; the - deep per-surface pass needs 1080p captures):** the generated bar's - right cluster runs ~9 modules with uniform spacing — no grouping - rhythm (consider micro-gaps between tray/net · stats · toggles · - battery/notify groups); latte's preview shows a DARK terminal on - the light desktop — verify ghostty consumes the latte palette (or - the preview is stale); summer-day's island-pill whole-swap bar and - lumon's globe identity are strong — preserve through any polish. ### 14. Automated lock bumps — confirm the first real run Slices b+c shipped 2026-07-05 (`.gitea/workflows/bump.yml`): weekly diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 2ff55c9..8a8ae83 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,16 @@ Template: --- +## 2026-07-08 — Theme UI Review: Typography Polish & Icon Call (iteration #87) +- **Task:** NEXT item 28 (Theme UI review). +- **Did:** + 1. Resolved the pending human call regarding Rofi vs Waybar icon weights. The user opted for Option A (keep full-color Papirus icons for menus, treating them as an independent colorful layer). + 2. Fixed typography scale mismatches: `swaync.nix` now binds explicitly to the theme's font scale (`t.fonts.size`) and families (`t.fonts.ui`/`mono`). + 3. Fixed Rofi's font configuration to use the dynamic `t.fonts.size` rather than a hardcoded `12`. + 4. With the color, hierarchy, semantic dims, and typography now audited and unified across surfaces, Item 28 is completed and wiped from the backlog. +- **Verified:** Nix configs evaluate successfully. +- **Pending:** nothing. + ## 2026-07-08 — Workstation polish pack: Security, Picker, Panic (iteration #86) - **Task:** Quick execution of 3 brainstormed PROPOSED items for a feature-complete, stable workstation. - **Did:** diff --git a/modules/home/rofi.nix b/modules/home/rofi.nix index b6cae9e..efc079c 100644 --- a/modules/home/rofi.nix +++ b/modules/home/rofi.nix @@ -1003,7 +1003,7 @@ in programs.rofi = { enable = true; terminal = cfg.terminal; - font = "${t.fonts.ui} 12"; + font = "${t.fonts.ui} ${toString t.fonts.size}"; # Native rofi modi backing two menu modules: calc (live, via # libqalculate — no qalc CLI needed) and emoji (glyph picker, copies diff --git a/modules/home/swaync.nix b/modules/home/swaync.nix index f2f3114..aeb19d0 100644 --- a/modules/home/swaync.nix +++ b/modules/home/swaync.nix @@ -45,6 +45,8 @@ in border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4); border-radius: ${r}px; color: @text; + font-family: "${t.fonts.ui}", "${t.fonts.mono}"; + font-size: ${toString t.fonts.size}pt; } .notification-content .summary { @@ -65,6 +67,8 @@ in border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4); border-radius: ${r}px; color: @text; + font-family: "${t.fonts.ui}", "${t.fonts.mono}"; + font-size: ${toString t.fonts.size}pt; } .control-center .notification-row:focus,