feat(theme): finish neon-glass polish (#88)
Some checks failed
Check / eval (push) Has been cancelled

Rewrite whole-swap rofi.rasi to rofi-native @colors (was invalid CSS
var()); cyan glass panel matching Boreal's hex-alpha pattern. btop
titles/selection in accent cyan; ui rounding/opacity tuned; preview.png
from theme-shot. Bar stays generated from JSON (no waybar.css).

Verified: V2 — contrast 24×7; theme-wholeswap; theme-shot neon-glass
desktop+menu viewed; boreal theme-shot regression green.
This commit is contained in:
Bernardo Magri
2026-07-11 11:07:02 +01:00
parent 2cd38e168d
commit 13f1b2b70e
8 changed files with 110 additions and 65 deletions

View File

@@ -55,19 +55,6 @@ runtime-computed `resume_offset` into the boot cmdline, and the dev box runs
exactly this layout (`/proc/cmdline` verified) but isn't Nomarchy. Steps in exactly this layout (`/proc/cmdline` verified) but isn't Nomarchy. Steps in
HARDWARE-QUEUE. Close #76 on PASS. HARDWARE-QUEUE. Close #76 on PASS.
### 88. neon-glass polish / finish (`VISION § D`)
**Promoted** (Bernardo 2026-07-11) from PROPOSED finish-or-quarantine —
**path = finish**, not quarantine. Theme ships as whole-swap (`themes/neon-glass/`:
rofi.rasi, btop.theme, preview, backgrounds); waybar.css was removed earlier
(#53) so the bar uses the generated path from the JSON palette.
- Visual polish pass: rofi/btop/preview coherence with the glass aesthetic;
regenerate `preview.png` via theme-shot if needed.
- Contrast + design audit green (already contrast-gated; re-check after edits).
- **V2:** theme-shot neon-glass (and one other theme for regression) —
view desktop/menu shots per VERIFICATION §3.
- Do **not** reintroduce a broken whole-swap waybar.css without full
`@define-color` parity (theme-wholeswap check).
## LATER ## LATER
- **Wallpapers artifact split** (ROADMAP § Faster switches — decided, - **Wallpapers artifact split** (ROADMAP § Faster switches — decided,
@@ -131,9 +118,8 @@ high-ROI, etc.) live in the journal + ROADMAP — not here.*
fixture. Control-center / MOTD already mention these; the gap is the fixture. Control-center / MOTD already mention these; the gap is the
silent first *graphical* session for people who never open those. silent first *graphical* session for people who never open those.
_(#80#83 + #85#87 shipped 2026-07-11. neon-glass → **NEXT #88** finish _(#80#83 + #85#88 shipped 2026-07-11. Theme A day-2 + neon-glass finish
path. Theme A day-2 largely shipped — VISION ✓. Dock/hibernate V3 → shipped — VISION ✓. Dock/hibernate V3 → HARDWARE-QUEUE.)_
HARDWARE-QUEUE.)_
### v1.0 pointer ### v1.0 pointer

View File

@@ -19,6 +19,19 @@ Template:
--- ---
## 2026-07-11 — #88 neon-glass polish / finish
- **Task:** NEXT #88 — finish neon-glass (`VISION § D`), not quarantine.
- **Did:** Rewrote `themes/neon-glass/rofi.rasi` (was invalid `var()` CSS;
now Boreal-style glass with `@colors`, cyan edge, soft selection).
btop accent titles/selection; JSON ui rounding 14 + slight glass
opacity; `preview.png` from theme-shot desktop. No waybar.css.
- **Verified:** **V2** — contrast 24×7 pass; theme-wholeswap green;
theme-shot neon-glass desktop+menu viewed (cyan bar + glass menu);
boreal theme-shot regression green (menu/bar intact).
- **Pending:** —
- **Next suggestion:** post-install hardware hints PROPOSED, or human
HARDWARE-QUEUE.
## 2026-07-11 — Promote neon-glass → NEXT #88 (Bernardo) ## 2026-07-11 — Promote neon-glass → NEXT #88 (Bernardo)
- **Task:** human triage: promote neon-glass PROPOSED. - **Task:** human triage: promote neon-glass PROPOSED.
- **Did:** NEXT **#88** neon-glass polish/finish (`VISION § D`); path = - **Did:** NEXT **#88** neon-glass polish/finish (`VISION § D`); path =

View File

@@ -400,6 +400,13 @@ Design/decision records and a running log of shipped work (items marked
built-in. Rules in `modules/nixos/dock-audio-rules.nix`; built-in. Rules in `modules/nixos/dock-audio-rules.nix`;
`checks.dock-audio` pure + conf-file VM. Real hotplug V3 in `checks.dock-audio` pure + conf-file VM. Real hotplug V3 in
HARDWARE-QUEUE. HARDWARE-QUEUE.
✓ **neon-glass finish (#88, `VISION § D`):** rewrote whole-swap
`rofi.rasi` to rofi-native `@color` glass panel (cyan rim, soft
selection wash — same hex-alpha glass pattern as Boreal); btop title/
selection in accent cyan; ui rounding/opacity tuned; `preview.png`
regenerated from theme-shot. Bar remains generated from JSON (no
waybar.css reintro). Contrast + theme-wholeswap green; V2 theme-shot
neon-glass + boreal viewed.
- ✓ **Hibernate double-unlock:** on resume from hibernate the LUKS - ✓ **Hibernate double-unlock:** on resume from hibernate the LUKS
passphrase already gates the machine, but locking hyprlock before sleep passphrase already gates the machine, but locking hyprlock before sleep
meant a second password. Fixed by *not locking* before an encrypted meant a second password. Fixed by *not locking* before an encrypted

View File

@@ -93,7 +93,7 @@ Reference: [HARDWARE.md](HARDWARE.md) §4§5, §11 (doctor).
| Idea | Intent | Notes | | Idea | Intent | Notes |
|------|--------|-------| |------|--------|-------|
| **Fewer themes, sharper** | Finish or quarantine neon-glass; invest in whole-swap quality | **NEXT #88** finish path (promoted 2026-07-11); contrast stays gated | | **Fewer themes, sharper** | Finish or quarantine neon-glass; invest in whole-swap quality | #88 finish — glass rofi (proper @colors), btop, preview; bar stays generated (no broken waybar.css) |
| **Time-of-day pair** ✓ | Auto light/dark (e.g. summer-day ↔ summer-night) from schedule | ✓ shipped #79 (2026-07-10) — `settings.autoTheme` + timer; still one engine | | **Time-of-day pair** ✓ | Auto light/dark (e.g. summer-day ↔ summer-night) from schedule | ✓ shipped #79 (2026-07-10) — `settings.autoTheme` + timer; still one engine |
| **Theme switch speed** | Wallpapers artifact split (LATER) if switches still feel slow | GOALS: no second pipeline | | **Theme switch speed** | Wallpapers artifact split (LATER) if switches still feel slow | GOALS: no second pipeline |
@@ -156,9 +156,7 @@ From GOALS non-goals and installer audits — do not “fill the roadmap” with
1. `VISION § B` — post-install hardware hints (self-gated first-session 1. `VISION § B` — post-install hardware hints (self-gated first-session
toast when `fwupdmgr` / `fprintd-list` exist; one-shot markers; no nag) toast when `fwupdmgr` / `fprintd-list` exist; one-shot markers; no nag)
2. `VISION § D` — neon-glass polish → **NEXT #88** (finish path; do not 2. `VISION § D` / LATER — wallpapers artifact split (decided deferred;
reintroduce broken whole-swap waybar without @define-color parity)
3. `VISION § D` / LATER — wallpapers artifact split (decided deferred;
promote only if theme-switch latency still hurts after measurement) promote only if theme-switch latency still hurts after measurement)
4. `VISION § H` — HARDWARE-QUEUE burn-down (human-only V3; agents only 4. `VISION § H` — HARDWARE-QUEUE burn-down (human-only V3; agents only
append exact steps) append exact steps)

View File

@@ -28,14 +28,14 @@
"size": 11 "size": 11
}, },
"ui": { "ui": {
"gapsIn": 5, "gapsIn": 6,
"gapsOut": 12, "gapsOut": 14,
"borderSize": 2, "borderSize": 2,
"rounding": 10, "rounding": 14,
"iconSize": 36, "iconSize": 36,
"activeOpacity": 1.0, "activeOpacity": 0.96,
"inactiveOpacity": 0.95, "inactiveOpacity": 0.90,
"terminalOpacity": 0.96, "terminalOpacity": 0.94,
"blur": true, "blur": true,
"shadow": true "shadow": true
}, },

View File

@@ -1,9 +1,10 @@
# Neon Glass — btop whole-swap (keep hexes aligned with neon-glass.json)
theme[main_bg]="#0B0E14" theme[main_bg]="#0B0E14"
theme[main_fg]="#E0E6F0" theme[main_fg]="#E0E6F0"
theme[title]="#E0E6F0" theme[title]="#00F0FF"
theme[hi_fg]="#00F0FF" theme[hi_fg]="#00F0FF"
theme[selected_bg]="#1E2530" theme[selected_bg]="#1E2530"
theme[selected_fg]="#E0E6F0" theme[selected_fg]="#00F0FF"
theme[inactive_fg]="#4B566B" theme[inactive_fg]="#4B566B"
theme[graph_text]="#8F9BB3" theme[graph_text]="#8F9BB3"
theme[meter_bg]="#151A22" theme[meter_bg]="#151A22"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View File

@@ -1,93 +1,133 @@
/* /**
* Neon Glass Rofi Theme * Neon Glass — rofi whole-swap (themes/<slug>/rofi.rasi).
* Glassmorphic, transparent, blurred background with glowing accents. * Vibe: cyber-frost panel on near-black void — cyan rim light, soft
* violet alt, translucent surfaces (hex-alpha, same pattern as Boreal's
* glassBg). Structure mirrors the generated theme so the theme-grid
* picker's -theme-str still lays out. No configuration {} block —
* modi/terminal/show-icons come from modules/home/rofi.nix.
*
* Palette locks to themes/neon-glass.json (keep in sync on color edits).
*/ */
* { * {
/* Using standard theme palette via env variables injected by home-manager, base: #0B0E14;
or fallback if testing independently. The whole-swap still gets the glassBg: #0B0E14E0; /* ~88% opaque void glass */
colors injected into the RASI by the module! */ surface: #151A22;
glassSurf: #151A22CC;
overlay: #1E2530;
text: #E0E6F0;
subtext: #8F9BB3;
muted: #4B566B;
accent: #00F0FF;
accentAlt: #B026FF;
accentSoft: #00F0FF33; /* cyan wash for selection */
neonEdge: #00F0FF80; /* cyan border glow */
good: #00FFA3;
warn: #FFD000;
bad: #FF003C;
font: "Inter 12";
background-color: transparent; background-color: transparent;
text-color: var(text, #E0E6F0); text-color: @text;
font: "Inter 13";
} }
window { window {
width: 600px; background-color: @glassBg;
/* transparent base with slight tint */
background-color: rgba(11, 14, 20, 0.45);
border: 1px; border: 1px;
border-color: rgba(0, 240, 255, 0.3); border-color: @neonEdge;
border-radius: 24px; border-radius: 16px;
padding: 24px; width: 620px;
/* Blur would be applied via hyprland layerrule for rofi */ location: center;
anchor: center;
padding: 18px;
} }
mainbox { mainbox {
spacing: 16px; background-color: transparent;
children: [ inputbar, message, listview ];
spacing: 14px;
} }
inputbar { inputbar {
background-color: rgba(21, 26, 34, 0.5); children: [ prompt, entry ];
background-color: @glassSurf;
text-color: @text;
border: 1px; border: 1px;
border-color: rgba(0, 240, 255, 0.5); border-color: @neonEdge;
border-radius: 12px; border-radius: 12px;
padding: 12px 16px; padding: 12px 16px;
spacing: 12px; spacing: 12px;
children: [ prompt, entry ];
} }
prompt { prompt { text-color: @accent; }
text-color: var(accent, #00F0FF);
}
entry { entry {
placeholder: "Search..."; text-color: @text;
placeholder-color: var(subtext, #8F9BB3); cursor: text;
placeholder: "Search…";
placeholder-color: @muted;
} }
listview { listview {
lines: 7; background-color: transparent;
spacing: 8px; columns: 1;
lines: 8;
dynamic: true;
scrollbar: true; scrollbar: true;
border: 0px; spacing: 6px;
padding: 4px 0px 0px 0px;
} }
element { element {
padding: 10px 16px; background-color: transparent;
text-color: @text;
orientation: horizontal;
border-radius: 12px; border-radius: 12px;
padding: 10px 14px;
spacing: 12px; spacing: 12px;
} }
element normal.normal, element alternate.normal { element normal.normal,
element alternate.normal {
background-color: transparent; background-color: transparent;
} }
/* Selected: soft cyan wash + bright accent label (glass highlight). */
element selected.normal { element selected.normal {
background-color: rgba(0, 240, 255, 0.15); background-color: @accentSoft;
text-color: @accent;
border: 1px; border: 1px;
border-color: rgba(0, 240, 255, 0.4); border-color: @neonEdge;
text-color: var(accent, #00F0FF);
} }
element-icon { element-icon {
size: 24px;
background-color: transparent; background-color: transparent;
size: 30px;
cursor: inherit;
} }
element-text { element-text {
background-color: transparent; background-color: transparent;
text-color: inherit;
highlight: bold;
vertical-align: 0.5; vertical-align: 0.5;
} }
element-text selected { message { padding: 0px; }
text-color: var(accent, #00F0FF);
textbox {
background-color: @glassSurf;
text-color: @text;
border: 1px;
border-color: @overlay;
border-radius: 12px;
padding: 10px 14px;
} }
scrollbar { scrollbar {
width: 4px; width: 4px;
handle-width: 4px; handle-width: 4px;
handle-color: rgba(0, 240, 255, 0.8); handle-color: @accent;
background-color: rgba(21, 26, 34, 0.5); background-color: @surface;
border: 0px; border: 0px;
} }