nixos-config/modules/home-manager/hyprland.nix
2025-03-29 19:12:43 +03:00

135 lines
4.6 KiB
Nix

{
pkgs,
...
}:
let
startupScript = pkgs.pkgs.writeShellScriptBin "hyprland-start" ''
${pkgs.waybar}/bin/waybar &
${pkgs.swww}/bin/swww init &
sleep 1
${pkgs.swww}/bin/swww img /home/mrflos/Nextcloud/Images/Wallpapers/chihiro014.jpg &
'';
in
{
imports = [ <home-manager/nixos> ];
home-manager.users.mrflos =
{ pkgs, ... }:
{
home.stateVersion = "23.05";
home.packages = with pkgs; [
swww
grimblast
swaylock
waybar
yarn
];
programs = {
wayland.windowManager.hyprland.enable = true;
wayland.windowManager.hyprland.settings = {
exec-once = ''${startupScript}/bin/hyprland-start'';
"$mod" = "SUPER";
# assign apps
"$term" = "kitty";
"$editor" = "nvim";
"$file" = "dolphin";
"$browser" = "zen";
bind =
[
", Print, exec, grimblast copy area"
# Window/Session actions
"$mod, Q, killactive"
"ALT, F4, killactive"
"$mod, delete, exit" # kill hyperland session
"$mod, W, togglefloating" # toggle the window on focus to float
"$mod, G, togglegroup" # toggle the window on focus to float
"ALT, return, fullscreen" # toggle the window on focus to fullscreen
"$mod, L, exec, swaylock" # lock screen
# "$mod, backspace, exec, wlogout-launcher-hyprland 1" # logout menu
"$CONTROL, ESCAPE, exec, systemctl-toggle --user waybar.service"
# Application shortcuts
"$mod, T, exec, $term" # open terminal
"$mod, E, exec, $file" # open file manager
"$mod, C, exec, $editor" # open vscode
"$mod, F, exec, $browser" # open browser
# Move focus with mainMod + arrow keys
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
"ALT, Tab, movefocus, d"
# Switch workspaces relative to the active workspace with mainMod + CTRL + [←→]
"$mod CTRL, right, workspace, r+1"
"$mod CTRL, left, workspace, r-1"
# move to the first empty workspace instantly with mainMod + CTRL + [↓]
"$mod CTRL, down, workspace, empty"
# Move active window to a relative workspace with mainMod + CTRL + ALT + [←→]
"$mod CTRL ALT, right, movetoworkspace, r+1"
"$mod CTRL ALT, left, movetoworkspace, r-1"
# Move active window around current workspace with mainMod + SHIFT + CTRL [←→↑↓]
"$mod SHIFT $CONTROL, left, movewindow, l"
"$mod SHIFT $CONTROL, right, movewindow, r"
"$mod SHIFT $CONTROL, up, movewindow, u"
"$mod SHIFT $CONTROL, down, movewindow, d"
# Scroll through existing workspaces with mainMod + scroll
"$mod, mouse_down, workspace, e+1"
"$mod, mouse_up, workspace, e-1"
# Special workspaces (scratchpad)
"$mod ALT, S, movetoworkspacesilent, special"
"$mod, S, togglespecialworkspace,"
# Toggle Layout
"$mod, J, togglesplit," # dwindle
]
++ (
# workspaces
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
builtins.concatLists (
builtins.genList (
x:
let
ws =
let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in
[
"$mod, ${ws}, workspace, ${toString (x + 1)}"
"$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
"$mod ALT, ${ws}, movetoworkspacesilent, ${toString (x + 1)}" # Move window silently to workspace Super + Alt + [0-9]
]
) 10
)
);
# Move/Resize windows with mainMod + LMB/RMB and dragging
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
# Resize windows
binde = [
"$mod SHIFT, right, resizeactive, 30 0"
"$mod SHIFT, left, resizeactive, -30 0"
"$mod SHIFT, up, resizeactive, 0 -30"
"$mod SHIFT, down, resizeactive, 0 30"
];
};
};
};
}