feat(home): switch launcher/menu from fuzzel to rofi 2.0
rofi 2.0 landed in nixpkgs 26.05 with native Wayland (mainline upstreamed the lbonn rofi-wayland fork — `wayland enabled`), so the original reason to prefer fuzzel (rofi being X11-only / needing a community fork) is gone. rofi's `.rasi` is far more expressive than fuzzel's flat INI, which lets the launcher be a proper themed hero surface and revives the legacy per-theme launcher designs. - modules/home/rofi.nix replaces fuzzel.nix: per-element theme generated from theme-state.json (accent border, highlighted selection, rounded inputbar) via lib.formats.rasi.mkLiteral; themes/<slug>/rofi.rasi whole-swap; the nomarchy-menu dispatcher re-pointed to `rofi -dmenu` (power/theme/clipboard/calc with -mesg/files/web + root picker). - SUPER+D is now `rofi -show drun`; the menu binds are unchanged. - nomarchy.fuzzel.enable → nomarchy.rofi.enable; fuzzel dropped from home.packages. Pango handles nf-glyph fallback (no explicit font list needed as fuzzel's fcft did). show-icons off until an icon theme ships. Verified: flake check green, HM generation builds, the generated theme.rasi parses under `rofi -dump-theme`, Hyprland config verifies. Not verified: rofi's on-screen rendering needs a real session. Docs: README menu/override/roadmap sections and the module tree updated; the per-theme launcher roadmap item now points at porting the legacy rofi.rasi designs (the whole-swap mechanism is in place). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
48
README.md
48
README.md
@@ -57,7 +57,7 @@ Flat on purpose. Two module trees, one options file each, no hidden layers.
|
||||
│ ├── waybar.nix
|
||||
│ ├── ghostty.nix
|
||||
│ ├── btop.nix
|
||||
│ ├── fuzzel.nix # launcher + nomarchy-menu (power, clip)
|
||||
│ ├── rofi.nix # launcher + nomarchy-menu (power, clip)
|
||||
│ ├── swaync.nix # notifications, same JSON
|
||||
│ ├── idle.nix # hyprlock + hypridle, same JSON
|
||||
│ └── yazi.nix # flagship TUI file manager + plugins
|
||||
@@ -172,7 +172,7 @@ examples: **[docs/OVERRIDES.md](docs/OVERRIDES.md)**.
|
||||
| `nomarchy.keyboard.variant` | `""` | XKB variant for the session |
|
||||
| `nomarchy.hyprland.enable` | `true` | Nomarchy's Hyprland config |
|
||||
| `nomarchy.waybar.enable` | `true` | Nomarchy's Waybar |
|
||||
| `nomarchy.fuzzel.enable` | `true` | Themed fuzzel + `nomarchy-menu` (power menu) |
|
||||
| `nomarchy.rofi.enable` | `true` | Themed rofi launcher + `nomarchy-menu` dispatcher |
|
||||
| `nomarchy.swaync.enable` | `true` | swaync notifications, themed |
|
||||
| `nomarchy.idle.enable` | `true` | hyprlock + hypridle (idle lock 5 min, display off 10, suspend 30) |
|
||||
| `nomarchy.yazi.enable` | `true` | yazi TUI file manager, themed + curated plugins |
|
||||
@@ -224,7 +224,7 @@ per theme — a single place to look, unlike the old distro's split:
|
||||
| `btop.theme` | baked into the generation (generated from the palette when absent) |
|
||||
| `waybar.css` | **whole-swap**: replaces the generated bar style entirely (probed at eval time, self-contained) |
|
||||
| `waybar.jsonc` | whole-swap for the bar *layout* (must be plain JSON) |
|
||||
| `fuzzel.ini` | **whole-swap**: replaces the generated launcher/menu config entirely |
|
||||
| `rofi.rasi` | **whole-swap**: replaces the generated launcher/menu theme entirely |
|
||||
|
||||
Six ported themes ship a `waybar.css` identity (catppuccin, lumon, nord,
|
||||
retro-82, summer-day, summer-night). Custom user themes can live in
|
||||
@@ -261,37 +261,37 @@ close · `SUPER+1..9` workspaces · `Print` region screenshot.
|
||||
|
||||
## Roadmap
|
||||
- **Menu system** (apps launcher + theme switching + system actions), built
|
||||
on fuzzel — already shipped for SUPER+D/SUPER+T, dmenu mode does nested
|
||||
menus and per-entry icons, and its INI theme can be baked from
|
||||
theme-state.json like every other app:
|
||||
- ✓ shipped: `modules/home/fuzzel.nix` (palette/fonts/border from the
|
||||
theme JSON, `themes/<slug>/fuzzel.ini` whole-swap) and the
|
||||
on rofi 2.0 (native Wayland on 26.05) — its `.rasi` theme is baked from
|
||||
theme-state.json like every other app, with rich per-element styling:
|
||||
- ✓ shipped: `modules/home/rofi.nix` (per-element theme generated from
|
||||
the palette, `themes/<slug>/rofi.rasi` whole-swap) and the
|
||||
`nomarchy-menu` dispatcher: root picker (no args) · `power`
|
||||
(lock/logout/suspend/hibernate/reboot/shutdown, SUPER+X) ·
|
||||
`theme` (SUPER+T) · `clipboard` (cliphist, SUPER+CTRL+V) · `calc`
|
||||
(qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo)
|
||||
(qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo).
|
||||
SUPER+D is `rofi -show drun`.
|
||||
- next modules: Network ▸ nmtui · Bluetooth ▸ blueman · Capture ▸
|
||||
screenshot · **ask Claude**: `--prompt-only` →
|
||||
`$TERMINAL -e claude "<question>"` — the claude CLI auths via OAuth
|
||||
against a Pro/Max subscription (no API key); REPL stays open for
|
||||
follow-ups (claude-code in nixpkgs is unfree — allowUnfree is on)
|
||||
- known limits accepted for now: no live-as-you-type results (dmenu
|
||||
input is static per invocation) and no image previews
|
||||
- decision record: this resolves the old Walker/Lua question in favor of
|
||||
simplicity — no GTK4 launcher, no second theming pipeline, no image
|
||||
previews (instant `bg next` covers wallpaper browsing); the dispatcher
|
||||
owns the menu structure, so the renderer stays swappable
|
||||
screenshot · **ask Claude**: free-text → `$TERMINAL -e claude
|
||||
"<question>"` — the claude CLI auths via OAuth against a Pro/Max
|
||||
subscription (no API key); REPL stays open for follow-ups (claude-code
|
||||
in nixpkgs is unfree — allowUnfree is on)
|
||||
- launcher icons: `show-icons` is off (no icon theme shipped yet);
|
||||
enabling it well means shipping an icon theme (Papirus/Adwaita)
|
||||
- decision record: resolves the old Walker/Lua question — no GTK4
|
||||
launcher, no second theming pipeline; the dispatcher owns the menu
|
||||
structure, so the renderer stays swappable (we moved fuzzel → rofi 2.0
|
||||
once mainline gained native Wayland, for its richer theming)
|
||||
- **Theme parity with legacy:** summer-day/night now carry their legacy
|
||||
bar layouts as `waybar.jsonc` whole-swaps (adapted: dead legacy script
|
||||
modules dropped, Nerd-Fonts-v2 codepoints remapped to FontAwesome/v3,
|
||||
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 fuzzel identity:** the `themes/<slug>/fuzzel.ini` whole-swap
|
||||
mechanism ships; what remains is authoring the inis for the six identity
|
||||
themes from their legacy rofi.rasi files (per-element colors like
|
||||
summer-night's green inputbar aren't expressible in fuzzel's flat
|
||||
scheme — approximate, note the rest as a renderer limitation)
|
||||
- **Per-theme rofi identity:** the `themes/<slug>/rofi.rasi` whole-swap
|
||||
mechanism ships; what remains is porting the legacy `rofi.rasi` designs
|
||||
(summer-day/night already have them in the legacy branch) for the
|
||||
identity themes — rofi's `.rasi` expresses their per-element looks
|
||||
(green inputbar, inverted window) directly, unlike the old flat scheme
|
||||
- **Faster switches:** move `backgrounds/` out of the flake source (the 86 MB
|
||||
re-copy on every state write is the main eval tax), then pre-built theme
|
||||
variants if still needed
|
||||
|
||||
Reference in New Issue
Block a user