Files
nixos-config/modules/home-manager/hypr/hyprland/keybinds.nix

136 lines
5.0 KiB
Nix

# Note that some keybindings are delegated to other components, e.g. the quickshell module
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.hypr;
in
{
config = {
wayland.windowManager.hyprland = {
settings = {
"$mod" = "SUPER";
# Global bindings
bind = [
# Launch applications
"$mod, space, exec, ${lib.getExe config.nix-config.launcher}"
"$mod, return, exec, kitty"
"$mod, b, exec, ${cfg.browser}"
"$mod, s, exec, ${cfg.ide}"
"$mod, e, exec, ${lib.getExe pkgs.nautilus}"
# Lock screen
"$mod, l, exec, loginctl lock-session"
# Close window
"$mod, Q, killactive,"
# Force close window
"$mod+Shift, Q, forcekillactive,"
# Toggle Floating and reduce size
"$mod, f, togglefloating,"
"$mod, f, resizeactive, 50% 50%,"
# "$mod, P, pseudo, " # dwindle
# "$mod, J, togglesplit, " # dwindle
# Toggle fullscreen
"$mod+Shift, f, fullscreen,"
# Alt-tab alternative
"$mod, Tab, cyclenext,"
"$mod, Tab, bringactivetotop,"
# Move the window
"$mod+Shift, left, movewindow, l"
"$mod+Shift, right, movewindow, r"
"$mod+Shift, up, movewindow, u"
"$mod+Shift, down, movewindow, d"
# Move window to workspace
"$mod+Ctrl, left, movetoworkspace, -1"
"$mod+Ctrl, right, movetoworkspace, +1"
# Switch workspace
"$mod, left, workspace, e-1"
"$mod, right, workspace, e+1"
"$mod, mouse_down, workspace, e-1"
"$mod, mouse_up, workspace, e+1"
# move to scratch workspace
"$mod+Ctrl, up, movetoworkspace, special:magic"
"$mod+Ctrl, down, movetoworkspace, prev"
# switch to scratch workspace
"$mod, up, togglespecialworkspace, magic"
"$mod, down, togglespecialworkspace, magic"
# Screenshot
"$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# # somehow logitech calls this SUPER_L but we refer to it by its code
"SUPER_L&Shift_L, S, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"Shift&SUPER_L&Shift_L, S, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# when there is a dedicated screenshot button
", XF86Cut, exec, hyprshot -m region -o ~/Pictures/Screenshots"
"Shift, XF86Cut, exec, hyprshot -m window -o ~/Pictures/Screenshots"
# Other pickers using the same launcher
"$mod+Ctrl, space, exec, ${lib.getExe config.nix-config.filePicker}"
"$mod, period, exec, ${lib.getExe config.nix-config.emojiPicker}"
];
# repeatable bindings
binde = [
# Reshape the window in focus
"$mod, MINUS, resizeactive, -2% -2%"
"$mod, KP_Subtract, resizeactive, -2% -2%"
"$mod, PLUS, resizeactive, 2% 2%"
"$mod, KP_Add, resizeactive, 2% 2%"
];
# lock-screen bindings
bindl = [
", XF86PowerOff, exec, hyprctl dispatch dpms on eDP-1"
## depending on the setup we expect different behaviors when closing the lid:
# either sleep & lock screen OR switch to clamshell mode
# through the `services.logind.lidSwitch` and `services.logind.lidSwitchDocked` we can differentiate both cases
# when not docked, the system is put to sleep and the screen is implicitly locked as per the hypridle configuration
# when docked, the lid switch is ignored by logind and needs to be handled manually, see below:
# if an additional monitor is detected, simply deactivate the internal screen and continue working on the external monitor
", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1,disable"
## on reopening the lid, turn the internal screen back on
", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1"
# we need to reload the monitor configuration so that the internal screen is turned back on
", switch:off:Lid Switch, exec, hyprctl reload"
];
# bindr = [
# # Overview
# "$mod, , overview:toggle"
# ];
bindm = [
# move the window using left click
"$mod, mouse:272, movewindow"
# resize the window using right click
"$mod, mouse:273, resizewindow"
];
};
# extraConfig = ''
# bind= , XF86AudioMicMute, submap, player_submap
# submap=player_submap
# bind=, XF86AudioRaiseVolume, exec, notify-send previous; hyprctl dispatch submap reset
# bind=, XF86AudioLowerVolume, exec, notify-send next; hyprctl dispatch submap reset
# bind=, XF86AudioMicMute, exec, notify-send pause; hyprctl dispatch submap reset
# submap=reset
# '';
};
};
}