Commit 5321125

HPCesia <me@hpcesia.com>
2025-10-10 05:50:23
feat: complete niri keybindings
1 parent 30976a0
Changed files (2)
modules
modules/desktop/shell/niri/default.nix
@@ -1,5 +1,5 @@
 {inputs, ...}: {
-  flake.modules.nixos.niri = {pkgs, ...}: {
+  flake.modules.nixos.niri = _: {
     imports = [inputs.niri-flake.nixosModules.niri];
 
     niri-flake.cache.enable = false;
@@ -17,10 +17,7 @@
 
     programs.dankMaterialShell = {
       enable = true;
-      niri = {
-        enableKeybinds = true;
-        enableSpawn = true;
-      };
+      niri = {enableSpawn = true;};
     };
   };
 }
modules/desktop/shell/niri/keybinding.nix
@@ -1,16 +1,60 @@
 {
   flake.modules.homeManager.niri = {config, ...}: {
-    programs.niri.settings.binds = with config.lib.niri.actions; {
+    programs.niri.settings.binds = with config.lib.niri.actions; let
+      dms-ipc = spawn "dms" "ipc";
+    in {
       # Mod-Shift-/, which is usually the same as Mod-?,
       # shows a list of important hotkeys.
       "Mod+Shift+Slash".action = show-hotkey-overlay;
 
-      # Programs hotkey
+      "Mod+Shift+E".action = quit;
+      "Ctrl+Alt+Delete".action = quit;
+
+      "Print".action = screenshot;
+      "Mod+Shift+S".action = screenshot;
+      "Alt+Print".action = screenshot-window;
+
       "Mod+Grave".action = spawn "ghostty";
 
+      # === DankMaterialShell Actions ===
+      # Partially copy from DMS' niri home manager module
+      "Mod+Space" = {
+        action = dms-ipc "spotlight" "toggle";
+        hotkey-overlay.title = "Toggle Application Launcher";
+      };
+      "Super+Alt+L" = {
+        action = dms-ipc "lock" "lock";
+        hotkey-overlay.title = "Toggle Lock Screen";
+      };
+
+      "XF86AudioRaiseVolume" = {
+        allow-when-locked = true;
+        action = dms-ipc "audio" "increment" "3";
+      };
+      "XF86AudioLowerVolume" = {
+        allow-when-locked = true;
+        action = dms-ipc "audio" "decrement" "3";
+      };
+      "XF86AudioMute" = {
+        allow-when-locked = true;
+        action = dms-ipc "audio" "mute";
+      };
+      "XF86AudioMicMute" = {
+        allow-when-locked = true;
+        action = dms-ipc "audio" "micmute";
+      };
+      "XF86MonBrightnessUp" = {
+        allow-when-locked = true;
+        action = dms-ipc "brightness" "increment" "5" "";
+      };
+      "XF86MonBrightnessDown" = {
+        allow-when-locked = true;
+        action = dms-ipc "brightness" "decrement" "5" "";
+      };
+
+      # === Window and Column Actions ===
       "Mod+Q".action = close-window;
 
-      # Focus
       "Mod+H".action = focus-column-left;
       "Mod+J".action = focus-window-down;
       "Mod+K".action = focus-window-up;
@@ -21,8 +65,11 @@
       "Mod+Right".action = focus-column-right;
       "Mod+Home".action = focus-column-first;
       "Mod+End".action = focus-column-last;
+      "Mod+WheelScrollRight".action = focus-column-right;
+      "Mod+WheelScrollLeft".action = focus-column-left;
+      "Mod+Shift+WheelScrollDown".action = focus-column-right;
+      "Mod+Shift+WheelScrollUp".action = focus-column-left;
 
-      # Move
       "Mod+Ctrl+H".action = move-column-left;
       "Mod+Ctrl+J".action = move-window-down;
       "Mod+Ctrl+K".action = move-window-up;
@@ -33,13 +80,97 @@
       "Mod+Ctrl+Right".action = move-column-right;
       "Mod+Ctrl+Home".action = move-column-to-first;
       "Mod+Ctrl+End".action = move-column-to-last;
+      "Mod+Ctrl+WheelScrollRight".action = move-column-right;
+      "Mod+Ctrl+WheelScrollLeft".action = move-column-left;
+      "Mod+Ctrl+Shift+WheelScrollDown".action = move-column-right;
+      "Mod+Ctrl+Shift+WheelScrollUp".action = move-column-left;
 
-      # Resize
       "Mod+Minus".action = set-column-width "-10%";
       "Mod+Equal".action = set-column-width "+10%";
-
       "Mod+Shift+Minus".action = set-window-height "-10%";
       "Mod+Shift+Equal".action = set-window-height "+10%";
+
+      "Mod+R".action = switch-preset-column-width;
+      "Mod+Shift+R".action = switch-preset-window-height;
+      "Mod+Ctrl+R".action = reset-window-height;
+
+      "Mod+F".action = maximize-column;
+      "Mod+Shift+F".action = fullscreen-window;
+      "Mod+Ctrl+F".action = expand-column-to-available-width;
+
+      "Mod+BracketLeft".action = consume-or-expel-window-left;
+      "Mod+BracketRight".action = consume-or-expel-window-right;
+      "Mod+Comma".action = consume-window-into-column;
+      "Mod+Period".action = expel-window-from-column;
+
+      "Mod+W".action = toggle-window-floating;
+      "Mod+Shift+W".action = switch-focus-between-floating-and-tiling;
+
+      "Mod+T".action = toggle-column-tabbed-display;
+
+      # === Workspace Actions ===
+      "Mod+Page_Down".action = focus-workspace-down;
+      "Mod+Page_Up".action = focus-workspace-up;
+      "Mod+D".action = focus-workspace-down; # Default is `U`, use Helix binding instead.
+      "Mod+U".action = focus-workspace-up; # Default is `I`, use Helix binding instead.
+      "Mod+WheelScrollDown".action = focus-workspace-down;
+      "Mod+WheelScrollDown".cooldown-ms = 150;
+      "Mod+WheelScrollUp".action = focus-workspace-up;
+      "Mod+WheelScrollUp".cooldown-ms = 150;
+
+      "Mod+Ctrl+Page_Down".action = move-column-to-workspace-down;
+      "Mod+Ctrl+Page_Up".action = move-column-to-workspace-up;
+      "Mod+Ctrl+D".action = move-column-to-workspace-down;
+      "Mod+Ctrl+U".action = move-column-to-workspace-up;
+      "Mod+Ctrl+WheelScrollDown".action = move-column-to-workspace-down;
+      "Mod+Ctrl+WheelScrollDown".cooldown-ms = 150;
+      "Mod+Ctrl+WheelScrollUp".action = move-column-to-workspace-up;
+      "Mod+Ctrl+WheelScrollUp".cooldown-ms = 150;
+
+      "Mod+Shift+Page_Down".action = move-workspace-down;
+      "Mod+Shift+Page_Up".action = move-workspace-up;
+      "Mod+Shift+D".action = move-workspace-down;
+      "Mod+Shift+U".action = move-workspace-up;
+
+      "Mod+1".action = focus-workspace 1;
+      "Mod+2".action = focus-workspace 2;
+      "Mod+3".action = focus-workspace 3;
+      "Mod+4".action = focus-workspace 4;
+      "Mod+5".action = focus-workspace 5;
+      "Mod+6".action = focus-workspace 6;
+      "Mod+7".action = focus-workspace 7;
+      "Mod+8".action = focus-workspace 8;
+      "Mod+9".action = focus-workspace 9;
+
+      # TODO: Uncomment below if niri-flake has `move-column-to-workspace`
+      # "Mod+Ctrl+1".action = move-column-to-workspace 1;
+      # "Mod+Ctrl+2".action = move-column-to-workspace 2;
+      # "Mod+Ctrl+3".action = move-column-to-workspace 3;
+      # "Mod+Ctrl+4".action = move-column-to-workspace 4;
+      # "Mod+Ctrl+5".action = move-column-to-workspace 5;
+      # "Mod+Ctrl+6".action = move-column-to-workspace 6;
+      # "Mod+Ctrl+7".action = move-column-to-workspace 7;
+      # "Mod+Ctrl+8".action = move-column-to-workspace 8;
+      # "Mod+Ctrl+9".action = move-column-to-workspace 9;
+
+      # === Monitor Actions ===
+      "Mod+Shift+Left".action = focus-monitor-left;
+      "Mod+Shift+Down".action = focus-monitor-down;
+      "Mod+Shift+Up".action = focus-monitor-up;
+      "Mod+Shift+Right".action = focus-monitor-right;
+      "Mod+Shift+H".action = focus-monitor-left;
+      "Mod+Shift+J".action = focus-monitor-down;
+      "Mod+Shift+K".action = focus-monitor-up;
+      "Mod+Shift+L".action = focus-monitor-right;
+
+      "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
+      "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down;
+      "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up;
+      "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
+      "Mod+Shift+Ctrl+H".action = move-column-to-monitor-left;
+      "Mod+Shift+Ctrl+J".action = move-column-to-monitor-down;
+      "Mod+Shift+Ctrl+K".action = move-column-to-monitor-up;
+      "Mod+Shift+Ctrl+L".action = move-column-to-monitor-right;
     };
   };
 }