feat(desktop): add the rofi launcher (task 0024) #16

Merged
alexion merged 1 commits from task-0024-rofi-launcher into main 2026-07-22 17:04:38 -04:00
Owner

Task: .claude/tasks/0024-rofi-launcher.md

Summary

Adds a rofi launcher module to the desktop group (enabled by the aggregator).

  • An application launcher: rofi -show drun, modi = "drun", bound on Super+R. Per the operator's direction this is application-launch only — binary-run, window-switch, math (rofi-calc) and emoji (rofi-emoji) were dropped, and the two plugins removed, to keep the prompt fast and uncluttered. This narrows the task/spec "search-everything launcher" to a plain launcher (task criterion 2 marked [-]); it's reversible — any mode or plugin can be added back. Icons are off (show-icons = false) since per-entry icon resolution is drun's main per-launch cost.
  • A session menu (lock / suspend / log out / reboot / shut down) built on the same themed rofi via rofi -dmenu, bound on Super+Shift+X (pairing with lock on Super+X).
  • Reuse as the dmenu frontend is the themed rofi itself: any rofi -dmenu invocation inherits the Stylix Nord theme, so later utility menus (clipboard, etc.) look uniform for free.
  • Launcher and power-menu keybinds live in this module, contributed through settings.bind, which concatenates with the compositor's own binds in the single hyprland.conf — each command sits next to its binding and is referenced by store path.
  • Gives Hyprland's layer surfaces their own fade-in (layersIn/fadeLayersIn), a touch quicker than the window animation, so the launcher fades in briskly rather than snapping into place.

nix flake check passes (neogaia system toplevel builds green).

Deviations

  • rofi-wayland no longer exists — merged into pkgs.rofi (2.0.0), which is Wayland-capable; the module uses that.
  • No Waybar window-rewrite icon mapping: rofi renders as a layer-shell overlay, not a workspace window, so the convention doesn't apply.

Review

Risk

Overall: Medium

  • Blast radius: Low — a new opt-in module plus one mkDefault line, no existing callers touched.
  • Reversibility: Low — pure additive Nix, delete to revert, no state or migration.
  • Test coverage: Medium — nix flake check proves it builds, but launcher binds and power-menu logic are untestable headless.
  • Sensitive domain: Medium — the power menu invokes session/power actions (loginctl, systemctl suspend/reboot/poweroff); a mis-wired case could log out or power off.
  • Size & complexity: Low — ~30 lines, flat control flow, one literal case.
  • Runtime criticality: Medium — user-facing daily-driver launcher and power controls, but local desktop tooling only.

Spec / Standards

  • The power-menu key (Super+Shift+X) is the operator's choice, pairing with lock on Super+X; the parent spec's keybind table has no power-menu key of its own.
  • Standards: the two hard comment-policy findings (a semicolon in a comment, cross-file narration of Stylix) were fixed in the diff; no standards findings left unaddressed.

— Claude

Task: `.claude/tasks/0024-rofi-launcher.md` ## Summary Adds a rofi launcher module to the desktop group (enabled by the aggregator). - An application launcher: `rofi -show drun`, `modi = "drun"`, bound on `Super+R`. Per the operator's direction this is application-launch only — binary-run, window-switch, math (`rofi-calc`) and emoji (`rofi-emoji`) were dropped, and the two plugins removed, to keep the prompt fast and uncluttered. This narrows the task/spec "search-everything launcher" to a plain launcher (task criterion 2 marked `[-]`); it's reversible — any mode or plugin can be added back. Icons are off (`show-icons = false`) since per-entry icon resolution is drun's main per-launch cost. - A session menu (lock / suspend / log out / reboot / shut down) built on the same themed rofi via `rofi -dmenu`, bound on `Super+Shift+X` (pairing with lock on `Super+X`). - Reuse as the dmenu frontend is the themed rofi itself: any `rofi -dmenu` invocation inherits the Stylix Nord theme, so later utility menus (clipboard, etc.) look uniform for free. - Launcher and power-menu keybinds live in this module, contributed through `settings.bind`, which concatenates with the compositor's own binds in the single `hyprland.conf` — each command sits next to its binding and is referenced by store path. - Gives Hyprland's layer surfaces their own fade-in (`layersIn`/`fadeLayersIn`), a touch quicker than the window animation, so the launcher fades in briskly rather than snapping into place. `nix flake check` passes (neogaia system toplevel builds green). ### Deviations - `rofi-wayland` no longer exists — merged into `pkgs.rofi` (2.0.0), which is Wayland-capable; the module uses that. - No Waybar `window-rewrite` icon mapping: rofi renders as a layer-shell overlay, not a workspace window, so the convention doesn't apply. ## Review ### Risk **Overall: Medium** - Blast radius: Low — a new opt-in module plus one `mkDefault` line, no existing callers touched. - Reversibility: Low — pure additive Nix, delete to revert, no state or migration. - Test coverage: Medium — `nix flake check` proves it builds, but launcher binds and power-menu logic are untestable headless. - Sensitive domain: Medium — the power menu invokes session/power actions (`loginctl`, `systemctl suspend/reboot/poweroff`); a mis-wired case could log out or power off. - Size & complexity: Low — ~30 lines, flat control flow, one literal `case`. - Runtime criticality: Medium — user-facing daily-driver launcher and power controls, but local desktop tooling only. ### Spec / Standards - The power-menu key (`Super+Shift+X`) is the operator's choice, pairing with lock on `Super+X`; the parent spec's keybind table has no power-menu key of its own. - Standards: the two hard comment-policy findings (a semicolon in a comment, cross-file narration of Stylix) were fixed in the diff; no standards findings left unaddressed. — Claude
alexion added 1 commit 2026-07-22 17:03:56 -04:00
Add a rofi module to the desktop group, enabled by the aggregator.
It runs the drun application launcher, bound on Super+R. A session menu
built on the same themed rofi is bound on Super+Shift+X, and every
rofi -dmenu call inherits the Stylix theme, so later utility menus
reuse it for free.

Also give layer surfaces their own fade-in (layersIn and fadeLayersIn)
a touch quicker than the window animation, so the launcher fades in
briskly rather than snapping into place.
alexion force-pushed task-0024-rofi-launcher from e6c63d98da to 7d9a0dae36 2026-07-22 17:03:56 -04:00 Compare
alexion merged commit 7d9a0dae36 into main 2026-07-22 17:04:38 -04:00
alexion deleted branch task-0024-rofi-launcher 2026-07-22 17:04:38 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alexion/dotfiles#16