aboutsummaryrefslogtreecommitdiffstats
path: root/modules/desktop/niri/keybindings.nix
blob: 5fd07fe68b94c20558ba8251480a974953b625ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
{
  config,
  lib,
  ...
}:
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; }

      ${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}"; }''
      }

      // 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; }

      ${workspaceBinds}

      ${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"; }''}

      ${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\""; }''
      }
    }
  '';
}