169 lines
5.9 KiB
Nix
169 lines
5.9 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
|
|
let
|
|
inherit (lib) mkIf optionals;
|
|
cfg = config.omni.desktop;
|
|
omni = config.omni.lib;
|
|
user = config.omni.user;
|
|
|
|
terminal = cfg.defaultTerminal;
|
|
browser = cfg.defaultBrowser;
|
|
in
|
|
{
|
|
config = mkIf (cfg.enable) {
|
|
home-manager.users.${user} = {
|
|
wayland.windowManager.hyprland.settings = {
|
|
"$mainMod" = "SUPER";
|
|
|
|
bind = [
|
|
# Application launches
|
|
"$mainMod, Return, exec, ${terminal}"
|
|
"$mainMod, B, exec, ${browser}"
|
|
"$mainMod, E, exec, thunar"
|
|
"$mainMod, R, exec, walker"
|
|
"$mainMod, D, exec, walker"
|
|
|
|
# Window management
|
|
"$mainMod, Q, killactive"
|
|
"$mainMod, F, fullscreen, 1"
|
|
"$mainMod SHIFT, F, fullscreen, 0"
|
|
"$mainMod, Space, togglefloating"
|
|
"$mainMod, P, pseudo"
|
|
"$mainMod, J, layoutmsg, togglesplit"
|
|
"$mainMod, G, togglegroup"
|
|
"$mainMod, Tab, changegroupactive"
|
|
|
|
# Focus (vim keys)
|
|
"$mainMod, h, movefocus, l"
|
|
"$mainMod, l, movefocus, r"
|
|
"$mainMod, k, movefocus, u"
|
|
"$mainMod, j, movefocus, d"
|
|
|
|
# Focus (arrow keys)
|
|
"$mainMod, left, movefocus, l"
|
|
"$mainMod, right, movefocus, r"
|
|
"$mainMod, up, movefocus, u"
|
|
"$mainMod, down, movefocus, d"
|
|
|
|
# Move windows (vim keys)
|
|
"$mainMod SHIFT, h, movewindow, l"
|
|
"$mainMod SHIFT, l, movewindow, r"
|
|
"$mainMod SHIFT, k, movewindow, u"
|
|
"$mainMod SHIFT, j, movewindow, d"
|
|
|
|
# Move windows (arrow keys)
|
|
"$mainMod SHIFT, left, movewindow, l"
|
|
"$mainMod SHIFT, right, movewindow, r"
|
|
"$mainMod SHIFT, up, movewindow, u"
|
|
"$mainMod SHIFT, down, movewindow, d"
|
|
|
|
# Workspaces
|
|
"$mainMod, 1, workspace, 1"
|
|
"$mainMod, 2, workspace, 2"
|
|
"$mainMod, 3, workspace, 3"
|
|
"$mainMod, 4, workspace, 4"
|
|
"$mainMod, 5, workspace, 5"
|
|
"$mainMod, 6, workspace, 6"
|
|
"$mainMod, 7, workspace, 7"
|
|
"$mainMod, 8, workspace, 8"
|
|
"$mainMod, 9, workspace, 9"
|
|
"$mainMod, 0, workspace, 10"
|
|
|
|
# Move to workspace
|
|
"$mainMod SHIFT, 1, movetoworkspace, 1"
|
|
"$mainMod SHIFT, 2, movetoworkspace, 2"
|
|
"$mainMod SHIFT, 3, movetoworkspace, 3"
|
|
"$mainMod SHIFT, 4, movetoworkspace, 4"
|
|
"$mainMod SHIFT, 5, movetoworkspace, 5"
|
|
"$mainMod SHIFT, 6, movetoworkspace, 6"
|
|
"$mainMod SHIFT, 7, movetoworkspace, 7"
|
|
"$mainMod SHIFT, 8, movetoworkspace, 8"
|
|
"$mainMod SHIFT, 9, movetoworkspace, 9"
|
|
"$mainMod SHIFT, 0, movetoworkspace, 10"
|
|
|
|
# Scroll workspaces
|
|
"$mainMod, mouse_down, workspace, e+1"
|
|
"$mainMod, mouse_up, workspace, e-1"
|
|
|
|
# Screenshots (grim + satty for annotation)
|
|
", Print, exec, grim -g \"$(slurp)\" - | satty -f - --output-filename ~/Pictures/Screenshots/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')"
|
|
"SHIFT, Print, exec, grim - | satty -f - --output-filename ~/Pictures/Screenshots/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')"
|
|
"$mainMod, Print, exec, grim -g \"$(slurp)\" - | wl-copy"
|
|
|
|
# Screen recording
|
|
"$mainMod SHIFT, R, exec, wf-recorder -g \"$(slurp)\" -f ~/Videos/recording_$(date +'%Y-%m-%d-%H%M%S.mp4')"
|
|
|
|
# Lock screen
|
|
"$mainMod, L, exec, hyprlock"
|
|
|
|
# System / Power
|
|
"$mainMod SHIFT, Q, exit,"
|
|
"$mainMod SHIFT, P, exec, systemctl poweroff"
|
|
"$mainMod SHIFT, B, exec, systemctl reboot"
|
|
"$mainMod ALT, R, exec, systemctl --user restart waybar"
|
|
|
|
# Clipboard
|
|
"$mainMod, Y, exec, cliphist list | walker --dmenu | cliphist decode | wl-copy"
|
|
"$mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy"
|
|
|
|
# Color picker
|
|
"$mainMod SHIFT, C, exec, hyprpicker -a"
|
|
|
|
# Scratchpad
|
|
"$mainMod, S, togglespecialworkspace, magic"
|
|
"$mainMod SHIFT, S, movetoworkspace, special:magic"
|
|
|
|
# Theme cycling
|
|
"$mainMod ALT, T, exec, omni-theme-bg-next"
|
|
"$mainMod ALT SHIFT, T, exec, omni-theme-next"
|
|
]
|
|
# Coding shortcuts
|
|
++ optionals (omni.isEnabled "coding") [
|
|
"$mainMod, C, exec, code"
|
|
"$mainMod SHIFT, C, exec, ${terminal} -e nvim"
|
|
]
|
|
# Communication shortcuts
|
|
++ optionals (omni.isEnabled "communication") [
|
|
"$mainMod CTRL, D, exec, discord"
|
|
"$mainMod CTRL SHIFT, D, exec, slack"
|
|
];
|
|
|
|
# Resize with vim/arrow keys
|
|
binde = [
|
|
"$mainMod CTRL, h, resizeactive, -50 0"
|
|
"$mainMod CTRL, l, resizeactive, 50 0"
|
|
"$mainMod CTRL, k, resizeactive, 0 -50"
|
|
"$mainMod CTRL, j, resizeactive, 0 50"
|
|
"$mainMod CTRL, left, resizeactive, -50 0"
|
|
"$mainMod CTRL, right, resizeactive, 50 0"
|
|
"$mainMod CTRL, up, resizeactive, 0 -50"
|
|
"$mainMod CTRL, down, resizeactive, 0 50"
|
|
];
|
|
|
|
# Mouse bindings
|
|
bindm = [
|
|
"$mainMod, mouse:272, movewindow"
|
|
"$mainMod, mouse:273, resizewindow"
|
|
];
|
|
|
|
# Media/brightness keys (locked — work even when input inhibited)
|
|
bindl = [
|
|
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
|
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
|
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
|
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
|
", XF86MonBrightnessUp, exec, brightnessctl set 10%+"
|
|
", XF86MonBrightnessDown, exec, brightnessctl set 10%-"
|
|
", XF86AudioPlay, exec, playerctl play-pause"
|
|
", XF86AudioNext, exec, playerctl next"
|
|
", XF86AudioPrev, exec, playerctl previous"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|