From 37204f5f45e30f70f5e0662a9ba8252752ca1e55 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 20 Jun 2026 19:45:37 +0100 Subject: [PATCH] feat(themes): per-theme rofi identities for nord/retro-82/lumon/kanagawa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author a designed rofi.rasi whole-swap for the four remaining identity themes, so all six now carry a distinct menu look (summer-day/night already shipped their legacy ports). Each is built from the theme's character rather than a legacy layout (their waybar overrides are palette-only, so there was nothing to port): - nord: soft rounded "frost panel" — frost border, brighter-frost selection, aurora-purple prompt - retro-82: sharp CRT terminal — square corners, amber-on-navy, a teal scanline underline, mono - lumon: clinical cyan "bezel" — thick cyan frame, a framed-not-filled readout inputbar, mono - kanagawa: ink & paper — warm washi-paper frame, deep ink-well inputbar, crystal-blue wave selection Each file is self-contained (it replaces the generated theme) and keeps the element structure the theme-grid picker's per-invocation -theme-str layers onto. rofi.nix needs no change — its existing themes// rofi.rasi probe whole-swaps when the file is present. All four parse clean under `rofi -dump-theme`. Co-Authored-By: Claude Opus 4.8 --- docs/ROADMAP.md | 22 ++++++-- themes/kanagawa/rofi.rasi | 107 ++++++++++++++++++++++++++++++++++++ themes/lumon/rofi.rasi | 110 ++++++++++++++++++++++++++++++++++++++ themes/nord/rofi.rasi | 110 ++++++++++++++++++++++++++++++++++++++ themes/retro-82/rofi.rasi | 109 +++++++++++++++++++++++++++++++++++++ 5 files changed, 453 insertions(+), 5 deletions(-) create mode 100644 themes/kanagawa/rofi.rasi create mode 100644 themes/lumon/rofi.rasi create mode 100644 themes/nord/rofi.rasi create mode 100644 themes/retro-82/rofi.rasi diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index c0a64bb..98c9654 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -91,11 +91,23 @@ how to override it. Items marked ✓ are shipped. logo button opens nomarchy-menu); the other four identity themes are palette recolors and already match. Remaining: a visual pass over all six on the live ISO -- **Per-theme rofi identity:** the `themes//rofi.rasi` whole-swap - ships, and summer-day/night carry their legacy designs (inverted window, - green inputbar, yellow bottom-border). Remaining: author `.rasi` - identities for the other four ported themes if/when they want one (the - generated palette theme is the default and looks fine) +- ✓ **Per-theme rofi identity:** the `themes//rofi.rasi` whole-swap + ships, and all six identity themes now carry a designed `.rasi`. summer-day/ + night keep their legacy ports (inverted window, green inputbar, yellow + bottom-border); the other four were authored from each theme's character + (no legacy layout to port — their waybar whole-swaps are palette-only): + **nord** a soft rounded "frost panel" (frost border, brighter-frost + selection, aurora-purple prompt); **retro-82** a sharp CRT terminal (square + corners, amber-on-navy, a teal scanline underline, mono); **lumon** a + clinical cyan "bezel" (thick cyan frame, a *framed*-not-filled readout + inputbar, mono); **kanagawa** ink-and-paper (warm washi-paper frame, a + deeper ink-well inputbar, crystal-blue wave reserved for the selection). + Each is self-contained (it replaces the generated theme) and keeps the + element structure the theme-grid picker's per-invocation `-theme-str` + layers onto; all four parse clean under `rofi -dump-theme`. The generated + palette theme stays the default for the other 15 presets. Remaining: a + visual pass over the four on hardware (the parse check confirms syntax, not + aesthetics). - ✓ **Visual theme picker (preview thumbnails):** `nomarchy-menu theme` is now a rofi **icon grid of real desktop previews** instead of a plain-text list — each theme a screenshot of its themed desktop (waybar + floating terminal), diff --git a/themes/kanagawa/rofi.rasi b/themes/kanagawa/rofi.rasi new file mode 100644 index 0000000..139e26a --- /dev/null +++ b/themes/kanagawa/rofi.rasi @@ -0,0 +1,107 @@ +/** + * Nomarchy Kanagawa — rofi whole-swap (themes//rofi.rasi). + * Ink-and-paper identity: a sumi-ink canvas inside a warm washi-paper frame + * (the same text-toned border the theme uses on windows — the only warm + * frame of the four), the inputbar a deeper ink well, and the crystal-blue + * wave reserved for the selected row. Soft rounding, an unhurried feel. + * The `configuration {}` block is omitted on purpose — modi/terminal/ + * show-icons come from modules/home/rofi.nix. + */ + +* { + sumi: #1f1f28; /* sumi ink — the canvas */ + well: #090618; /* deeper ink — inputbar + zebra */ + paper: #dcd7ba; /* washi paper — text + frame */ + parch: #c8c093; /* parchment — the prompt */ + grey: #727169; + wave: #7e9cd8; /* crystal-blue wave — the selection */ + + font: "JetBrainsMono Nerd Font 14"; + background-color: transparent; + text-color: @paper; +} + +window { + background-color: @sumi; + border: 2px; + border-color: @paper; /* the warm paper frame (kanagawa's border tone) */ + border-radius: 10px; + width: 40%; + location: center; + anchor: center; + padding: 8px; +} + +mainbox { + background-color: transparent; + children: [ inputbar, message, listview ]; + spacing: 0px; +} + +inputbar { + children: [ prompt, entry ]; + background-color: @well; /* the ink well */ + text-color: @paper; + border-radius: 8px; + padding: 10px 12px; + spacing: 8px; + margin: 0px 0px 8px 0px; +} + +prompt { text-color: @parch; } + +entry { + text-color: @paper; + cursor: text; + placeholder: "search…"; + placeholder-color: @grey; +} + +listview { + background-color: transparent; + columns: 1; + lines: 8; + dynamic: true; + scrollbar: false; + spacing: 4px; + padding: 8px 0px 0px 0px; +} + +element { + background-color: transparent; + text-color: @paper; + orientation: horizontal; + border-radius: 8px; + padding: 10px 14px; + spacing: 12px; +} + +element alternate.normal { + background-color: @well; +} +element selected.normal { + background-color: @wave; + text-color: @sumi; +} + +element-icon { + background-color: transparent; + size: 36px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: bold; + vertical-align: 0.5; +} + +message { padding: 8px 0px 0px 0px; } +textbox { + background-color: @well; + text-color: @paper; + border-radius: 8px; + padding: 8px 12px; +} + +scrollbar { width: 0px; } diff --git a/themes/lumon/rofi.rasi b/themes/lumon/rofi.rasi new file mode 100644 index 0000000..bbcbf62 --- /dev/null +++ b/themes/lumon/rofi.rasi @@ -0,0 +1,110 @@ +/** + * Nomarchy Lumon — rofi whole-swap (themes//rofi.rasi). + * Clinical-terminal identity (the MDR readout): a thick cyan bezel around a + * cold teal screen, the inputbar FRAMED rather than filled (a data field, + * not a button), near-white headings, cyan selection. Faintly softened + * corners keep it boxy without going razor-sharp like Retro 82. + * The `configuration {}` block is omitted on purpose — modi/terminal/ + * show-icons come from modules/home/rofi.nix. + */ + +* { + base: #16242d; + surface: #1b2d40; + overlay: #304860; + text: #d6e2ee; + ice: #f2fcff; /* near-white — the prompt */ + cyan: #8bc9eb; /* the Lumon glow — bezel + select */ + + font: "JetBrainsMono Nerd Font 13"; + background-color: transparent; + text-color: @text; +} + +window { + background-color: @base; + border: 3px; /* a screen bezel */ + border-color: @cyan; + border-radius: 4px; /* boxy, faintly softened */ + width: 40%; + location: center; + anchor: center; + padding: 10px; +} + +mainbox { + background-color: transparent; + children: [ inputbar, message, listview ]; + spacing: 0px; +} + +/* Framed, not filled — a readout field rather than a button. */ +inputbar { + children: [ prompt, entry ]; + background-color: transparent; + text-color: @text; + border: 1px; + border-color: @overlay; + border-radius: 4px; + padding: 10px 12px; + spacing: 8px; + margin: 0px 0px 8px 0px; +} + +prompt { text-color: @ice; } + +entry { + text-color: @text; + cursor: text; + placeholder: "refine…"; + placeholder-color: @overlay; +} + +listview { + background-color: transparent; + columns: 1; + lines: 8; + dynamic: true; + scrollbar: false; + spacing: 4px; + padding: 8px 0px 0px 0px; +} + +element { + background-color: transparent; + text-color: @text; + orientation: horizontal; + border-radius: 4px; + padding: 10px 14px; + spacing: 12px; +} + +element alternate.normal { + background-color: @surface; +} +element selected.normal { + background-color: @cyan; + text-color: @base; +} + +element-icon { + background-color: transparent; + size: 36px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: bold; + vertical-align: 0.5; +} + +message { padding: 8px 0px 0px 0px; } +textbox { + background-color: @surface; + text-color: @text; + border-radius: 4px; + padding: 8px 12px; +} + +scrollbar { width: 0px; } diff --git a/themes/nord/rofi.rasi b/themes/nord/rofi.rasi new file mode 100644 index 0000000..cfe3a2d --- /dev/null +++ b/themes/nord/rofi.rasi @@ -0,0 +1,110 @@ +/** + * Nomarchy Nord — rofi whole-swap (themes//rofi.rasi). + * Frost identity: a soft, rounded "frost panel". The window wears a calm + * frost border; the selected row lifts to the brighter frost, and the + * prompt picks up the aurora purple for the one point of warmth. + * The `configuration {}` block is omitted on purpose — modi/terminal/ + * show-icons come from modules/home/rofi.nix. Element structure mirrors + * the generated theme so the theme-grid picker's per-invocation + * -theme-str (vertical cards) still lays out correctly. + */ + +* { + base: #2e3440; + surface: #3b4252; + overlay: #4c566a; + text: #d8dee9; + frost1: #81a1c1; /* calm frost — the border */ + frost2: #88c0d0; /* bright frost — the selection */ + aurora: #b48ead; /* the single accent pop — prompt */ + + font: "JetBrainsMono Nerd Font 13"; + background-color: transparent; + text-color: @text; +} + +window { + background-color: @base; + border: 2px; + border-color: @frost1; + border-radius: 14px; /* Nord is soft and rounded */ + width: 40%; + location: center; + anchor: center; + padding: 8px; +} + +mainbox { + background-color: transparent; + children: [ inputbar, message, listview ]; + spacing: 0px; +} + +inputbar { + children: [ prompt, entry ]; + background-color: @surface; + text-color: @text; + border-radius: 10px; + padding: 10px 12px; + spacing: 8px; + margin: 0px 0px 8px 0px; +} + +prompt { text-color: @aurora; } + +entry { + text-color: @text; + cursor: text; + placeholder: "Search…"; + placeholder-color: @overlay; +} + +listview { + background-color: transparent; + columns: 1; + lines: 8; + dynamic: true; + scrollbar: false; + spacing: 4px; + padding: 8px 0px 0px 0px; +} + +element { + background-color: transparent; + text-color: @text; + orientation: horizontal; + border-radius: 8px; + padding: 10px 14px; + spacing: 12px; +} + +/* Faint frost-grey zebra; the selected row below still wins. */ +element alternate.normal { + background-color: @surface; +} +element selected.normal { + background-color: @frost2; + text-color: @base; +} + +element-icon { + background-color: transparent; + size: 36px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: bold; + vertical-align: 0.5; +} + +message { padding: 8px 0px 0px 0px; } +textbox { + background-color: @surface; + text-color: @text; + border-radius: 8px; + padding: 8px 12px; +} + +scrollbar { width: 0px; } diff --git a/themes/retro-82/rofi.rasi b/themes/retro-82/rofi.rasi new file mode 100644 index 0000000..9ca4c05 --- /dev/null +++ b/themes/retro-82/rofi.rasi @@ -0,0 +1,109 @@ +/** + * Nomarchy Retro 82 — rofi whole-swap (themes//rofi.rasi). + * CRT-terminal identity: SQUARE corners (the giveaway against every rounded + * theme), amber-on-navy phosphor, a monospace face. The window wears a hard + * amber frame; the inputbar sits over a teal underline (a stray scanline), + * and the prompt + selected row burn amber. + * The `configuration {}` block is omitted on purpose — modi/terminal/ + * show-icons come from modules/home/rofi.nix. + */ + +* { + navy: #05182e; + panel: #00172e; + overlay: #134e5a; + sand: #f6dcac; /* phosphor cream — the foreground */ + teal: #3f8f8a; /* the underline scanline */ + amber: #faa968; /* the glow — frame, prompt, select */ + + font: "JetBrainsMono Nerd Font 13"; + background-color: transparent; + text-color: @sand; +} + +window { + background-color: @navy; + border: 2px; + border-color: @amber; + border-radius: 0px; /* sharp: this is a terminal */ + width: 40%; + location: center; + anchor: center; + padding: 10px; +} + +mainbox { + background-color: transparent; + children: [ inputbar, message, listview ]; + spacing: 0px; +} + +inputbar { + children: [ prompt, entry ]; + background-color: @panel; + text-color: @sand; + border-bottom: 2px; /* a teal scanline under the field */ + border-color: @teal; + border-radius: 0px; + padding: 10px 12px; + spacing: 8px; + margin: 0px 0px 8px 0px; +} + +prompt { text-color: @amber; } + +entry { + text-color: @sand; + cursor: text; + placeholder: "search…"; + placeholder-color: @overlay; +} + +listview { + background-color: transparent; + columns: 1; + lines: 8; + dynamic: true; + scrollbar: false; + spacing: 2px; + padding: 8px 0px 0px 0px; +} + +element { + background-color: transparent; + text-color: @sand; + orientation: horizontal; + border-radius: 0px; /* square rows too */ + padding: 10px 14px; + spacing: 12px; +} + +element alternate.normal { + background-color: @panel; +} +element selected.normal { + background-color: @amber; + text-color: @navy; +} + +element-icon { + background-color: transparent; + size: 36px; + cursor: inherit; +} +element-text { + background-color: transparent; + text-color: inherit; + highlight: bold; + vertical-align: 0.5; +} + +message { padding: 8px 0px 0px 0px; } +textbox { + background-color: @panel; + text-color: @sand; + border-radius: 0px; + padding: 8px 12px; +} + +scrollbar { width: 0px; }