{ browser, launcher, shortcutCommands, terminal, }: { # Application and utility launchers "Mod+Return" = { spawn = terminal; _props.hotkey-overlay-title = "Terminal"; }; "Mod+B" = { spawn = browser; _props.hotkey-overlay-title = "Browser"; }; "Mod+Space" = { _props.repeat = false; spawn = launcher; _props.hotkey-overlay-title = "App Launcher"; }; "Mod+Ctrl+Return" = { _props.repeat = false; spawn = shortcutCommands.nixosTerminal; _props.hotkey-overlay-title = "NixOS Config Terminal"; }; "Mod+Ctrl+Shift+Return" = { _props.repeat = false; spawn = shortcutCommands.nixosSwitch; _props.hotkey-overlay-title = "NixOS Switch"; }; "Mod+Ctrl+E" = { _props.repeat = false; spawn = shortcutCommands.editSecrets; _props.hotkey-overlay-title = "Edit Secrets"; }; "Mod+Ctrl+C" = { _props.repeat = false; spawn = shortcutCommands.pickColor; _props.hotkey-overlay-title = "Pick Color"; }; # Hardware media, volume, and brightness keys "XF86AudioPlay" = { spawn-sh = "playerctl play-pause"; _props.allow-when-locked = true; }; "XF86AudioStop" = { spawn-sh = "playerctl stop"; _props.allow-when-locked = true; }; "XF86AudioPrev" = { spawn-sh = "playerctl previous"; _props.allow-when-locked = true; }; "XF86AudioNext" = { spawn-sh = "playerctl next"; _props.allow-when-locked = true; }; "XF86AudioRaiseVolume" = { spawn-sh = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"; _props.allow-when-locked = true; }; "XF86AudioLowerVolume" = { spawn-sh = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"; _props.allow-when-locked = true; }; "XF86AudioMute" = { spawn-sh = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; _props.allow-when-locked = true; }; "XF86AudioMicMute" = { spawn-sh = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; _props.allow-when-locked = true; }; "XF86MonBrightnessUp" = { spawn-sh = "brightnessctl s 5%+"; _props.allow-when-locked = true; }; "XF86MonBrightnessDown" = { spawn-sh = "brightnessctl s 5%-"; _props.allow-when-locked = true; }; # Screenshots "Mod+S".screenshot = { }; "Mod+Ctrl+S".screenshot-screen = { }; "Mod+Alt+S".screenshot-window = { }; # Session and compositor controls "Mod+Shift+Slash".show-hotkey-overlay = { }; "Mod+Escape" = { toggle-keyboard-shortcuts-inhibit = { }; _props.allow-inhibiting = false; }; "Mod+Ctrl+L" = { spawn-sh = "loginctl lock-session"; _props.hotkey-overlay-title = "Lock Screen"; }; "Mod+Ctrl+Shift+Q".quit = { }; "Ctrl+Alt+Delete".quit = { }; "Mod+Shift+P".power-off-monitors = { }; # Overview and window close "Mod+O" = { toggle-overview = { }; _props.repeat = false; }; "Mod+Q" = { close-window = { }; _props.repeat = false; }; # Keyboard focus movement "Mod+Left".focus-column-or-monitor-left = { }; "Mod+Down".focus-window-down = { }; "Mod+Up".focus-window-up = { }; "Mod+Right".focus-column-or-monitor-right = { }; "Mod+H".focus-column-or-monitor-left = { }; "Mod+J".focus-window-down = { }; "Mod+K".focus-window-up = { }; "Mod+L".focus-column-or-monitor-right = { }; # Keyboard window and column movement "Mod+Alt+Left".move-column-left-or-to-monitor-left = { }; "Mod+Alt+Down".move-window-down-or-to-workspace-down = { }; "Mod+Alt+Up".move-window-up-or-to-workspace-up = { }; "Mod+Alt+Right".move-column-right-or-to-monitor-right = { }; "Mod+Alt+H".move-column-left-or-to-monitor-left = { }; "Mod+Alt+J".move-window-down-or-to-workspace-down = { }; "Mod+Alt+K".move-window-up-or-to-workspace-up = { }; "Mod+Alt+L".move-column-right-or-to-monitor-right = { }; # First and last column navigation "Mod+Home".focus-column-first = { }; "Mod+End".focus-column-last = { }; "Mod+Alt+Home".move-column-to-first = { }; "Mod+Alt+End".move-column-to-last = { }; # Move focus, columns, and workspaces across monitors "Mod+Tab".focus-monitor-next = { }; "Mod+A" = { _props.repeat = false; spawn = shortcutCommands.swapMonitorWorkspaces; _props.hotkey-overlay-title = "Swap Monitor Workspaces"; }; "Mod+Alt+Tab".move-column-to-monitor-next = { }; "Mod+Shift+Tab".move-workspace-to-monitor-next = { }; "Mod+Shift+Left".focus-monitor-left = { }; "Mod+Shift+Down".focus-monitor-down = { }; "Mod+Shift+Up".focus-monitor-up = { }; "Mod+Shift+Right".focus-monitor-right = { }; # Linear workspace navigation "Mod+Page_Down".focus-workspace-down = { }; "Mod+Page_Up".focus-workspace-up = { }; "Mod+U".focus-workspace-down = { }; "Mod+I".focus-workspace-up = { }; # Move columns between adjacent workspaces "Mod+Alt+Page_Down".move-column-to-workspace-down = { }; "Mod+Alt+Page_Up".move-column-to-workspace-up = { }; "Mod+Alt+U".move-column-to-workspace-down = { }; "Mod+Alt+I".move-column-to-workspace-up = { }; # Reorder workspaces "Mod+Shift+Page_Down".move-workspace-down = { }; "Mod+Shift+Page_Up".move-workspace-up = { }; "Mod+Shift+U".move-workspace-down = { }; "Mod+Shift+I".move-workspace-up = { }; # Mouse workspace navigation "Mod+WheelScrollDown" = { focus-workspace-down = { }; _props.cooldown-ms = 150; }; "Mod+WheelScrollUp" = { focus-workspace-up = { }; _props.cooldown-ms = 150; }; "Mod+Alt+WheelScrollDown" = { move-column-to-workspace-down = { }; _props.cooldown-ms = 150; }; "Mod+Alt+WheelScrollUp" = { move-column-to-workspace-up = { }; _props.cooldown-ms = 150; }; # Mouse column navigation and movement "Mod+WheelScrollRight".focus-column-or-monitor-right = { }; "Mod+WheelScrollLeft".focus-column-or-monitor-left = { }; "Mod+Alt+WheelScrollRight".move-column-right-or-to-monitor-right = { }; "Mod+Alt+WheelScrollLeft".move-column-left-or-to-monitor-left = { }; "Mod+Shift+WheelScrollDown".focus-column-or-monitor-right = { }; "Mod+Shift+WheelScrollUp".focus-column-or-monitor-left = { }; # Direct workspace focus "Mod+1".focus-workspace = 1; "Mod+2".focus-workspace = 2; "Mod+3".focus-workspace = 3; "Mod+4".focus-workspace = 4; "Mod+5".focus-workspace = 5; "Mod+6".focus-workspace = 6; "Mod+7".focus-workspace = 7; "Mod+8".focus-workspace = 8; "Mod+9".focus-workspace = 9; # Move columns to numbered workspaces "Mod+Ctrl+1".move-column-to-workspace = 1; "Mod+Ctrl+2".move-column-to-workspace = 2; "Mod+Ctrl+3".move-column-to-workspace = 3; "Mod+Ctrl+4".move-column-to-workspace = 4; "Mod+Ctrl+5".move-column-to-workspace = 5; "Mod+Ctrl+6".move-column-to-workspace = 6; "Mod+Ctrl+7".move-column-to-workspace = 7; "Mod+Ctrl+8".move-column-to-workspace = 8; "Mod+Ctrl+9".move-column-to-workspace = 9; # Add and remove windows from columns "Mod+BracketLeft".consume-or-expel-window-left = { }; "Mod+BracketRight".consume-or-expel-window-right = { }; "Mod+Comma".consume-window-into-column = { }; "Mod+Period".expel-window-from-column = { }; # Column and window presentation modes "Mod+R".switch-preset-column-width = { }; "Mod+Shift+R".switch-preset-column-width-back = { }; "Mod+Ctrl+R".reset-window-height = { }; "Mod+Ctrl+Shift+R".switch-preset-window-height = { }; "Mod+F".maximize-column = { }; "Mod+Shift+F".fullscreen-window = { }; "Mod+M".maximize-window-to-edges = { }; "Mod+C".center-column = { }; # Manual column width and window height adjustments "Mod+Shift+H".set-column-width = "-10%"; "Mod+Shift+L".set-column-width = "+10%"; "Mod+Shift+J".set-window-height = "+10%"; "Mod+Shift+K".set-window-height = "-10%"; "Mod+Minus".set-column-width = "-10%"; "Mod+Equal".set-column-width = "+10%"; "Mod+Shift+Minus".set-window-height = "-10%"; "Mod+Shift+Equal".set-window-height = "+10%"; # Floating and tabbed layout toggles "Mod+Alt+V".toggle-window-floating = { }; "Mod+Shift+V".switch-focus-between-floating-and-tiling = { }; "Mod+W".toggle-column-tabbed-display = { }; }