feat(themes): per-theme rofi identities for nord/retro-82/lumon/kanagawa
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/<slug>/
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 <noreply@anthropic.com>
This commit is contained in:
@@ -91,11 +91,23 @@ how to override it. Items marked ✓ are shipped.
|
|||||||
logo button opens nomarchy-menu); the other four identity themes are
|
logo button opens nomarchy-menu); the other four identity themes are
|
||||||
palette recolors and already match. Remaining: a visual pass over all
|
palette recolors and already match. Remaining: a visual pass over all
|
||||||
six on the live ISO
|
six on the live ISO
|
||||||
- **Per-theme rofi identity:** the `themes/<slug>/rofi.rasi` whole-swap
|
- ✓ **Per-theme rofi identity:** the `themes/<slug>/rofi.rasi` whole-swap
|
||||||
ships, and summer-day/night carry their legacy designs (inverted window,
|
ships, and all six identity themes now carry a designed `.rasi`. summer-day/
|
||||||
green inputbar, yellow bottom-border). Remaining: author `.rasi`
|
night keep their legacy ports (inverted window, green inputbar, yellow
|
||||||
identities for the other four ported themes if/when they want one (the
|
bottom-border); the other four were authored from each theme's character
|
||||||
generated palette theme is the default and looks fine)
|
(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
|
- ✓ **Visual theme picker (preview thumbnails):** `nomarchy-menu theme` is now
|
||||||
a rofi **icon grid of real desktop previews** instead of a plain-text list —
|
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),
|
each theme a screenshot of its themed desktop (waybar + floating terminal),
|
||||||
|
|||||||
107
themes/kanagawa/rofi.rasi
Normal file
107
themes/kanagawa/rofi.rasi
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/**
|
||||||
|
* Nomarchy Kanagawa — rofi whole-swap (themes/<slug>/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; }
|
||||||
110
themes/lumon/rofi.rasi
Normal file
110
themes/lumon/rofi.rasi
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/**
|
||||||
|
* Nomarchy Lumon — rofi whole-swap (themes/<slug>/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; }
|
||||||
110
themes/nord/rofi.rasi
Normal file
110
themes/nord/rofi.rasi
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/**
|
||||||
|
* Nomarchy Nord — rofi whole-swap (themes/<slug>/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; }
|
||||||
109
themes/retro-82/rofi.rasi
Normal file
109
themes/retro-82/rofi.rasi
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/**
|
||||||
|
* Nomarchy Retro 82 — rofi whole-swap (themes/<slug>/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; }
|
||||||
Reference in New Issue
Block a user