summaryrefslogtreecommitdiff
path: root/home/wayland/niri/binds.nix
blob: 0277e501d651a588cdb691ce0cf087dcfc957ab0 (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
{ config, pkgs, ... }:

let
  # helpers
  actions = config.lib.niri.actions;
  spawn = actions.spawn;

  # common action factories
  set-volume = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@";
  playerctl = spawn "${pkgs.playerctl}/bin/playerctl";
in
{
  programs.niri.settings.binds = with actions; {

    # Overview / help
    "Mod+O" = {
      action = toggle-overview;
      repeat = false;
    };
    "Mod+Slash".action = show-hotkey-overlay;

    # Audio
    XF86AudioRaiseVolume.action = set-volume "2%+";
    XF86AudioLowerVolume.action = set-volume "2%-";
    XF86AudioMute.action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
    XF86AudioMicMute.action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle";

    # Media keys
    XF86AudioPlay.action = playerctl "play-pause";
    XF86AudioStop.action = playerctl "pause";
    XF86AudioPrev.action = playerctl "previous";
    XF86AudioNext.action = playerctl "next";

    # Column sizing
    "Mod+Minus".action = set-column-width "-10%";
    "Mod+Equal".action = set-column-width "+10%";

    # Finer height adjustments when in column with other windows.
    "Mod+Shift+Minus".action = set-window-height "-10%";
    "Mod+Shift+Equal".action = set-window-height "+10%";

    # Misc
    # "Mod+Shift+V".action = switch-focus-between-floating-and-tiling;
    "Mod+Shift+P".action = power-off-monitors;
    "Mod+W".action = toggle-column-tabbed-display;

    # Screenshot (selection -> copy + save)
    "Mod+S".action = spawn "sh" "-c"
    ''
      filename="/media/ss/$(date +%Y-%m-%d_%H-%M-%S).png"
      grim -g "$(slurp)" - | tee "$filename" | wl-copy
    '';

    # Screenshot (selection -> save -> edit with satty -> copy edited)
    "Mod+Shift+S".action = spawn "sh" "-c"
    ''
      filename="/media/ss/$(date +%Y-%m-%d_%H-%M-%S).png"
      grim -g "$(slurp)" "$filename"

      edited="/media/ss/$(date +%Y-%m-%d_%H-%M-%S)-edited.png"
      satty --filename "$filename" --output-filename "$edited"
    '';

    "Mod+Shift+D".action = spawn "sh" "-c"
    ''
      cliphist list | fuzzel --dmenu | cliphist decode | wl-copy
    '';

    # --- System / General ---
    "Mod+Return".action = spawn "foot";
    "Mod+D".action = spawn "fuzzel";
    "Mod+BracketLeft".action = consume-or-expel-window-left;
    "Mod+BracketRight".action = consume-or-expel-window-right;

    "Mod+R".action = switch-preset-column-width;
    "Mod+Shift+R".action = reset-window-height;
    "Mod+F".action = maximize-column;
    "Mod+Shift+F".action = fullscreen-window;
    "Mod+C".action = center-column;

    "Mod+Comma".action = consume-window-into-column;
    "Mod+Period".action = expel-window-from-column;

    "Mod+Shift+E".action = quit;

    # --- Window Navigation (Focus) ---
    "Mod+H".action = focus-column-left;
    "Mod+L".action = focus-column-right;
    "Mod+J".action = focus-workspace-down;
    "Mod+K".action = focus-workspace-up;

    # --- Window Management (Move) ---
    "Mod+Shift+H".action = move-column-left;
    "Mod+Shift+L".action = move-column-right;
    "Mod+Shift+J".action = move-window-down-or-to-workspace-down;
    "Mod+Shift+K".action = move-window-up-or-to-workspace-up;

    # --- Window State ---
    "Mod+Shift+Q".action = close-window;

    "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+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 ];
  };
}