diff options
Diffstat (limited to 'modules/desktop/niri/keybindings.nix')
| -rw-r--r-- | modules/desktop/niri/keybindings.nix | 284 |
1 files changed, 177 insertions, 107 deletions
diff --git a/modules/desktop/niri/keybindings.nix b/modules/desktop/niri/keybindings.nix index 5fd07fe..d1d15a9 100644 --- a/modules/desktop/niri/keybindings.nix +++ b/modules/desktop/niri/keybindings.nix @@ -4,117 +4,187 @@ ... }: let - workspaceBinds = - lib.concatMapStringsSep "\n" - ( - { key, workspace }: - '' - Mod+${key} { focus-workspace "${workspace}"; } - Mod+Shift+${key} { move-column-to-workspace "${workspace}"; }'' - ) - [ - { - key = "1"; - workspace = "1"; - } - { - key = "2"; - workspace = "2"; - } - { - key = "3"; - workspace = "3"; - } - { - key = "4"; - workspace = "4"; - } - { - key = "5"; - workspace = "5"; - } - { - key = "6"; - workspace = "6"; - } - { - key = "7"; - workspace = "7"; - } - { - key = "8"; - workspace = "8"; - } - { - key = "9"; - workspace = "9"; - } - { - key = "0"; - workspace = "10"; - } - ]; -in -{ - config.wayland.windowManager.niri.extraConfig = '' - binds { - // Niri defaults retained alongside the established launch and close bindings. - Mod+Shift+Slash { show-hotkey-overlay; } - Mod+O repeat=false { toggle-overview; } - Mod+Q repeat=false { close-window; } - Mod+Shift+Q repeat=false { close-window; } + workspaces = [ + { + key = "1"; + workspace = "1"; + } + { + key = "2"; + workspace = "2"; + } + { + key = "3"; + workspace = "3"; + } + { + key = "4"; + workspace = "4"; + } + { + key = "5"; + workspace = "5"; + } + { + key = "6"; + workspace = "6"; + } + { + key = "7"; + workspace = "7"; + } + { + key = "8"; + workspace = "8"; + } + { + key = "9"; + workspace = "9"; + } + { + key = "0"; + workspace = "10"; + } + ]; - ${lib.optionalString config.desktop.enable ''Mod+R hotkey-overlay-title="Run an Application: rofi" { spawn "${lib.getExe config.desktop.rofi.package}" "-show" "drun"; }''} - ${lib.optionalString config.terminal.kitty.enable '' - Mod+Return hotkey-overlay-title="Open a Terminal: kitty" { spawn "${lib.getExe config.terminal.kitty.package}"; } - Mod+T { spawn "${lib.getExe config.terminal.kitty.package}"; }''} - ${lib.optionalString (config.terminal.kitty.enable && config.file-management.yazi.enable) - ''Mod+F { spawn "${lib.getExe config.terminal.kitty.package}" "--class" "yazi" "--title" "Yazi" "-e" "${lib.getExe config.file-management.yazi.package}"; }'' + workspaceBinds = builtins.foldl' lib.mergeAttrs { } ( + map ( + { key, workspace }: + { + "Mod+${key}".focus-workspace = [ workspace ]; + "Mod+Shift+${key}".move-column-to-workspace = [ workspace ]; } + ) workspaces + ); +in +{ + config.wayland.windowManager.niri.settings.binds = { + "Mod+Shift+Slash".show-hotkey-overlay = { }; - // Niri's column/window-aware directional navigation. - Mod+H { focus-column-left; } - Mod+J { focus-window-down; } - Mod+K { focus-window-up; } - Mod+L { focus-column-right; } - Mod+Ctrl+H { move-column-left; } - Mod+Ctrl+J { move-window-down; } - Mod+Ctrl+K { move-window-up; } - Mod+Ctrl+L { move-column-right; } - - // Preserve the old Shift movement muscle memory as aliases. - Mod+Shift+H { move-column-left; } - Mod+Shift+J { move-window-down; } - Mod+Shift+K { move-window-up; } - Mod+Shift+L { move-column-right; } - - Mod+D { toggle-window-floating; } - Mod+V { toggle-window-floating; } - Mod+M { fullscreen-window; } - Mod+Equal { set-column-width "+10%"; } - Mod+Minus { set-column-width "-10%"; } - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Ctrl+U { move-column-to-workspace-down; } - Mod+Ctrl+I { move-column-to-workspace-up; } - Mod+W { toggle-column-tabbed-display; } + "Mod+O" = { + _props.repeat = false; + toggle-overview = { }; + }; + "Mod+Shift+Q" = { + _props.repeat = false; + close-window = { }; + }; + } + // workspaceBinds + // (lib.optionalAttrs config.desktop.enable { + "Mod+R" = { + _props.hotkey-overlay-title = "Run an Application: rofi"; + spawn = [ + (lib.getExe config.desktop.rofi.package) + "-show" + "drun" + ]; + }; + }) + // (lib.optionalAttrs config.terminal.kitty.enable { + "Mod+Return" = { + _props.hotkey-overlay-title = "Open a Terminal: kitty"; + spawn = [ (lib.getExe config.terminal.kitty.package) ]; + }; + "Mod+T".spawn = [ (lib.getExe config.terminal.kitty.package) ]; + }) + // (lib.optionalAttrs (config.terminal.kitty.enable && config.file-management.yazi.enable) { + "Mod+F".spawn = [ + (lib.getExe config.terminal.kitty.package) + "--class" + "yazi" + "--title" + "Yazi" + "-e" + (lib.getExe config.file-management.yazi.package) + ]; + }) + // { + # Column-aware directional navigation. + "Mod+H".focus-column-left = { }; + "Mod+L".focus-column-right = { }; + "Mod+Ctrl+H".move-column-left = { }; + "Mod+Ctrl+L".move-column-right = { }; - ${workspaceBinds} + # Preserve the old Shift movement muscle memory as aliases. + "Mod+Shift+H".move-column-left = { }; + "Mod+Shift+L".move-column-right = { }; - ${lib.optionalString config.system.brightnessctl.enable '' - XF86MonBrightnessDown allow-when-locked=true { spawn "${lib.getExe config.system.brightnessctl.package}" "set" "5%-"; } - XF86MonBrightnessUp allow-when-locked=true { spawn "${lib.getExe config.system.brightnessctl.package}" "set" "+5%"; }''} - ${lib.optionalString config.media.pamixer.enable '' - XF86AudioLowerVolume allow-when-locked=true { spawn "${lib.getExe config.media.pamixer.package}" "--decrease" "5"; } - XF86AudioRaiseVolume allow-when-locked=true { spawn "${lib.getExe config.media.pamixer.package}" "--increase" "5"; } - XF86AudioMute allow-when-locked=true { spawn "${lib.getExe config.media.pamixer.package}" "--toggle-mute"; }''} - ${lib.optionalString config.media.playerctl.enable ''XF86AudioPlay allow-when-locked=true { spawn "${lib.getExe config.media.playerctl.package}" "play-pause"; }''} + # Vim-style workspace scrolling. + "Mod+J".focus-workspace-down = { }; + "Mod+K".focus-workspace-up = { }; + "Mod+Shift+J".move-column-to-workspace-down = { }; + "Mod+Shift+K".move-column-to-workspace-up = { }; - ${lib.optionalString (config.media.grim.enable && config.media.slurp.enable) - '' - Mod+P { spawn-sh "${lib.getExe config.media.grim.package} -g \"$(${lib.getExe config.media.slurp.package})\" - | ${lib.getExe' config.desktop.wl-clipboard.package "wl-copy"}"; } - Mod+Shift+P { spawn-sh "mkdir -p \"$HOME/Pictures/Screenshots\" && ${lib.getExe config.media.grim.package} -g \"$(${lib.getExe config.media.slurp.package})\" \"$HOME/Pictures/Screenshots/screenshot-$(date +%Y%m%d-%H%M%S).png\""; }'' - } - } - ''; + "Mod+D".toggle-window-floating = { }; + "Mod+V".toggle-window-floating = { }; + "Mod+M".fullscreen-window = { }; + "Mod+Equal".set-column-width = [ "+10%" ]; + "Mod+Minus".set-column-width = [ "-10%" ]; + "Mod+U".focus-workspace-down = { }; + "Mod+I".focus-workspace-up = { }; + "Mod+Ctrl+U".move-column-to-workspace-down = { }; + "Mod+Ctrl+I".move-column-to-workspace-up = { }; + "Mod+W".toggle-column-tabbed-display = { }; + } + // (lib.optionalAttrs config.system.brightnessctl.enable { + "XF86MonBrightnessDown" = { + _props.allow-when-locked = true; + spawn = [ + (lib.getExe config.system.brightnessctl.package) + "set" + "5%-" + ]; + }; + "XF86MonBrightnessUp" = { + _props.allow-when-locked = true; + spawn = [ + (lib.getExe config.system.brightnessctl.package) + "set" + "+5%" + ]; + }; + }) + // (lib.optionalAttrs config.media.pamixer.enable { + "XF86AudioLowerVolume" = { + _props.allow-when-locked = true; + spawn = [ + (lib.getExe config.media.pamixer.package) + "--decrease" + "5" + ]; + }; + "XF86AudioRaiseVolume" = { + _props.allow-when-locked = true; + spawn = [ + (lib.getExe config.media.pamixer.package) + "--increase" + "5" + ]; + }; + "XF86AudioMute" = { + _props.allow-when-locked = true; + spawn = [ + (lib.getExe config.media.pamixer.package) + "--toggle-mute" + ]; + }; + }) + // (lib.optionalAttrs config.media.playerctl.enable { + "XF86AudioPlay" = { + _props.allow-when-locked = true; + spawn = [ + (lib.getExe config.media.playerctl.package) + "play-pause" + ]; + }; + }) + // (lib.optionalAttrs (config.media.grim.enable && config.media.slurp.enable) { + "Mod+P".spawn-sh = [ + "${lib.getExe config.media.grim.package} -g \"$(${lib.getExe config.media.slurp.package})\" - | ${lib.getExe' config.desktop.wl-clipboard.package "wl-copy"}" + ]; + "Mod+Shift+P".spawn-sh = [ + ''mkdir -p "$HOME/Pictures/Screenshots" && ${lib.getExe config.media.grim.package} -g "$(${lib.getExe config.media.slurp.package})" "$HOME/Pictures/Screenshots/screenshot-$(date +%Y%m%d-%H%M%S).png"'' + ]; + }); } |
