feat(menu): network/bluetooth/capture/ask modules + keybindings cheatsheet

Build out the rofi menu system roadmap item:

- New nomarchy-menu modules: network (nmtui), bluetooth (blueman-manager),
  capture (grim/slurp submenu → clipboard/file), ask (free-text → claude
  CLI in a terminal), and keybinds (the SUPER+? cheatsheet).
- modules/home/keybinds.nix is now the single source of truth for both the
  Hyprland bind strings and the cheatsheet, so the two can't drift —
  hyprland.nix maps it into `bind`, rofi.nix renders the padded two-column
  sheet (generated/mouse binds live in its `extra` rows).
- New binds: SUPER+Space (quick launch), SUPER+M (main menu), SUPER+?
  (cheatsheet). SUPER+D stays rofi -show drun.
- Ask Claude pulls claude-code fresh from npm via `npx
  @anthropic-ai/claude-code@latest` (the nixpkgs package lags model
  releases); nodejs is bundled for npx.

nix flake check passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-06-13 19:46:01 +01:00
parent 60138e20d0
commit 58d79aad17
5 changed files with 152 additions and 45 deletions

View File

@@ -17,6 +17,11 @@ let
"$mod SHIFT, ${ws}, movetoworkspace, ${ws}"
])
9);
# The keyboard binds — single source shared with the SUPER+? cheatsheet
# (rofi.nix renders the same list). Edit them in ./keybinds.nix.
keybinds = import ./keybinds.nix;
mkBind = b: "${b.mods}, ${b.key}, ${b.action}";
in
{
wayland.windowManager.hyprland = lib.mkIf config.nomarchy.hyprland.enable {
@@ -125,41 +130,11 @@ in
force_default_wallpaper = lib.mkDefault 0;
};
bind = [
"$mod, Return, exec, $terminal"
"$mod, D, exec, rofi -show drun"
"$mod, E, exec, $terminal -e yazi"
"$mod, Q, killactive"
"$mod, F, fullscreen"
"$mod, V, togglefloating"
"$mod SHIFT, E, exit"
# Theme picker (menu dispatcher): apply writes the state and
# runs home-manager switch (progress via notify-send).
"$mod, T, exec, nomarchy-menu theme"
# Cycle the current theme's wallpapers (instant, no rebuild).
"$mod SHIFT, T, exec, nomarchy-theme-sync bg next"
# Power menu (rofi dmenu via the nomarchy-menu dispatcher).
# Not Escape: Super+Escape gets swallowed before reaching the
# dispatcher on some setups (input methods / modal handling).
"$mod, X, exec, nomarchy-menu power"
# Notification centre (swaync).
"$mod, N, exec, swaync-client -t"
# Clipboard history (cliphist via the menu dispatcher).
"$mod CTRL, V, exec, nomarchy-menu clipboard"
# Focus
"$mod, H, movefocus, l"
"$mod, L, movefocus, r"
"$mod, K, movefocus, u"
"$mod, J, movefocus, d"
# Screenshot region to clipboard
", Print, exec, grim -g \"$(slurp)\" - | wl-copy"
] ++ workspaceBinds;
# Rendered from ./keybinds.nix (the cheatsheet reads the same list),
# plus the generated per-workspace binds. Like exec-once above this
# stays a normal-priority list, so a downstream `bind = [...]`
# concatenates rather than replaces.
bind = map mkBind keybinds.binds ++ workspaceBinds;
# Media keys via swayosd-client: it performs the action AND shows
# the on-screen display (the nomarchy.osd module). e = repeat,