{ config, pkgs, ... }: { programs.niri.settings.binds = with config.lib.niri.actions; let set-volume = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@"; playerctl = spawn "${pkgs.playerctl}/bin/playerctl"; in { "Mod+O" = { action = toggle-overview; repeat = false; }; "Mod+Slash".action = show-hotkey-overlay; 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"; XF86AudioPlay.action = playerctl "play-pause"; XF86AudioStop.action = playerctl "pause"; XF86AudioPrev.action = playerctl "previous"; XF86AudioNext.action = playerctl "next"; "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%"; # "Mod+Shift+V".action = switch-focus-between-floating-and-tiling; "Mod+Shift+P".action = power-off-monitors; "Mod+W".action = toggle-column-tabbed-display; "Mod+S".action = spawn "sh" "-c" '' filename="/media/ss/$(date +%Y-%m-%d_%H-%M-%S).png" grim -g "$(slurp)" - | tee "$filename" | wl-copy ''; "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" wl-copy < "$edited" ''; # --- 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; # The 'quit' action without arguments performs the action with confirmation. "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+F".action = maximize-column; # "Mod+V".action = toggle-window-floating; # Renamed from toggle-floating to match docs}; "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; # The wonky format used here is to work-around https://github.com/sodiboo/niri-flake/issues/944 "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 ]; }; }