152 lines
5.6 KiB
Nix
152 lines
5.6 KiB
Nix
# Hyprland keybindings configuration
|
|
{ ... }:
|
|
|
|
{
|
|
wayland.windowManager.hyprland.settings = {
|
|
# Variables
|
|
"$mod" = "SUPER";
|
|
"$terminal" = "foot";
|
|
"$browser" = "zen";
|
|
|
|
# Keybindings
|
|
bind = [
|
|
# Rofi
|
|
"$mod, Space, exec, rofi -show system:rofi-system"
|
|
"$mod ALT, Space, exec, rofi-websearch"
|
|
|
|
# Foot terminal - go to workspace 50, launch if not running
|
|
"$mod, A, exec, hyprctl dispatch workspace 50; hyprctl clients -j | grep -q foot || $terminal"
|
|
|
|
# Zed - go to workspace 60, launch if not running
|
|
"$mod, Z, exec, hyprctl dispatch workspace 60; hyprctl clients -j | grep -q dev.zed.Zed || zeditor"
|
|
|
|
# Zen Browser - workspace 70 (DP-3), launch if no browser on that workspace
|
|
"$mod, B, exec, hyprctl dispatch workspace 70; hyprctl clients -j | jq -e '.[] | select(.class == \"zen-twilight\" and .workspace.id == 70)' > /dev/null || hyprctl dispatch exec [workspace 70 silent] -- $browser"
|
|
# Zen Browser - workspace 71 (eDP-1), launch new window if no browser on that workspace
|
|
"$mod ALT, B, exec, hyprctl dispatch workspace 71; hyprctl clients -j | jq -e '.[] | select(.class == \"zen-twilight\" and .workspace.id == 71)' > /dev/null || hyprctl dispatch exec [workspace 71 silent] -- $browser --new-window"
|
|
|
|
# Nautilus - go to workspace 80, launch if not running
|
|
"$mod, N, exec, hyprctl dispatch workspace 80; hyprctl clients -j | grep -q org.gnome.Nautilus || nautilus"
|
|
|
|
# Haruna - go to workspace 90
|
|
"$mod, M, workspace, 90"
|
|
|
|
"$mod, Escape, exec, hyprlock"
|
|
|
|
# Switch to KiCad workspaces (both monitors)
|
|
"$mod, K, workspace, 101"
|
|
"$mod, K, workspace, 102"
|
|
# Launch KiCad project selector
|
|
"$mod CTRL, K, exec, kicad-projects"
|
|
# Launch library editors
|
|
"$mod, L, exec, kicad-lib-launch"
|
|
# Show project manager
|
|
"$mod SHIFT, K, togglespecialworkspace, kicad-pm"
|
|
# Swap SCH/PCB positions
|
|
"$mod ALT, K, exec, kicad-swap"
|
|
# Cycle through project instances
|
|
"$mod, bracketright, exec, kicad-cycle f"
|
|
"$mod, bracketleft, exec, kicad-cycle b"
|
|
|
|
# FreeCAD - go to workspace 110, launch if not running
|
|
"$mod, F, exec, hyprctl dispatch workspace 110; hyprctl clients -j | grep -q org.freecad.FreeCAD || env QT_QPA_PLATFORM=xcb FreeCAD --single-instance"
|
|
|
|
# Window management
|
|
"$mod, Q, killactive"
|
|
"$mod, W, fullscreen"
|
|
"$mod, R, togglefloating"
|
|
"$mod, P, pseudo"
|
|
"$mod, E, togglesplit"
|
|
|
|
# Focus movement
|
|
"$mod, left, movefocus, l"
|
|
"$mod, right, movefocus, r"
|
|
"$mod, up, movefocus, u"
|
|
"$mod, down, movefocus, d"
|
|
|
|
# Workspace switching
|
|
"$mod, 1, workspace, 1"
|
|
"$mod, 2, workspace, 2"
|
|
"$mod, 3, workspace, 3"
|
|
"$mod, 4, workspace, 4"
|
|
"$mod, 5, workspace, 5"
|
|
"$mod, 6, workspace, 6"
|
|
"$mod, 7, workspace, 7"
|
|
"$mod, 8, workspace, 8"
|
|
"$mod, 9, workspace, 9"
|
|
"$mod, 0, workspace, 10"
|
|
|
|
# Move window to workspace
|
|
"$mod SHIFT, 1, movetoworkspace, 1"
|
|
"$mod SHIFT, 2, movetoworkspace, 2"
|
|
"$mod SHIFT, 3, movetoworkspace, 3"
|
|
"$mod SHIFT, 4, movetoworkspace, 4"
|
|
"$mod SHIFT, 5, movetoworkspace, 5"
|
|
"$mod SHIFT, 6, movetoworkspace, 6"
|
|
"$mod SHIFT, 7, movetoworkspace, 7"
|
|
"$mod SHIFT, 8, movetoworkspace, 8"
|
|
"$mod SHIFT, 9, movetoworkspace, 9"
|
|
"$mod SHIFT, 0, movetoworkspace, 10"
|
|
|
|
# Special workspace (scratchpad)
|
|
"$mod, S, togglespecialworkspace, magic"
|
|
"$mod SHIFT, S, movetoworkspace, special:magic"
|
|
|
|
# Exit Hyprland
|
|
"$mod SHIFT, E, exit"
|
|
|
|
# Scroll through workspaces on current monitor (vertical model)
|
|
"$mod, mouse_down, workspace, m-1"
|
|
"$mod, mouse_up, workspace, m+1"
|
|
|
|
# Keyboard workspace navigation (up/down)
|
|
"$mod CTRL, up, workspace, m-1"
|
|
"$mod CTRL, down, workspace, m+1"
|
|
"$mod CTRL SHIFT, up, movetoworkspace, m-1"
|
|
"$mod CTRL SHIFT, down, movetoworkspace, m+1"
|
|
|
|
# Clipboard history (SUPER+SHIFT+V)
|
|
"$mod SHIFT, V, exec, cliphist list | rofi -dmenu -p 'Clipboard' | cliphist decode | wl-copy"
|
|
|
|
# Screenshot bindings (saves to ~/Pictures/Screenshots/)
|
|
", Print, exec, mkdir -p ~/Pictures/Screenshots && grimblast --notify copysave area ~/Pictures/Screenshots/$(date +%F_%T).png"
|
|
"SHIFT, Print, exec, mkdir -p ~/Pictures/Screenshots && grimblast --notify copysave output ~/Pictures/Screenshots/$(date +%F_%T).png"
|
|
"CTRL, Print, exec, grimblast --notify save area - | swappy -f -"
|
|
|
|
# System menu (rofi)
|
|
"$mod, X, exec, rofi -show system -modes 'system:rofi-system'"
|
|
|
|
# On-screen keyboard toggle (for tablet mode)
|
|
# "$mod, K, exec, pkill wvkbd-mobintl || wvkbd-mobintl"
|
|
|
|
# Refresh waybar (for dock/undock)
|
|
"$mod CTRL, Space, exec, pkill waybar; waybar-start"
|
|
];
|
|
|
|
# Mouse bindings
|
|
bindm = [
|
|
"$mod, mouse:272, movewindow"
|
|
"$mod, mouse:273, resizewindow"
|
|
];
|
|
|
|
# Repeat bindings (hold key for continuous action)
|
|
binde = [
|
|
"$mod ALT, left, resizeactive, -20 0"
|
|
"$mod ALT, right, resizeactive, 20 0"
|
|
"$mod ALT, up, resizeactive, 0 -20"
|
|
"$mod ALT, down, resizeactive, 0 20"
|
|
];
|
|
|
|
# Media/hardware key bindings (bindl = works even when locked)
|
|
bindl = [
|
|
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
|
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
|
];
|
|
|
|
# Volume keys with repeat (binde = repeat when held)
|
|
bindel = [
|
|
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+"
|
|
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
|
];
|
|
};
|
|
}
|