nix/home/desktop/hyprland/default.nix
2024-03-01 12:32:23 +00:00

215 lines
6.2 KiB
Nix

{
lib,
pkgs,
config,
...
}: let
modifier = config.windowManager.modifierKey;
menu = config.programs.menu.dmenuCommand;
in {
imports = [
(import ../utils/swaylock.nix)
(import ../utils/swayidle.nix)
(import ../utils/waybar.nix)
(import ../utils/display.nix)
];
xdg.portal = {
enable = true;
configPackages = [pkgs.hyprland];
extraPortals = [pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk];
};
wayland.windowManager.hyprland = {
enable = true;
systemd.enable = true;
settings = {
exec-once = ["${pkgs.swaybg}/bin/swaybg -i ${config.stylix.image} -m fill"];
input = {
touchpad = {
natural_scroll = true;
scroll_factor = 0.5;
};
kb_options = lib.mkDefault "caps:escape";
kb_layout = lib.mkDefault "gb";
numlock_by_default = true;
};
gestures = {
workspace_swipe = true;
workspace_swipe_numbered = false;
};
decoration = {
rounding = 0;
drop_shadow = false;
};
bezier = [
"overshot, 0.05, 0.9, 0.1, 1.1"
"linear, 0.0, 0.0, 1.0, 1.0"
];
animations = {
enabled = true;
animation = [
"windows, 1, 3, default, popin"
"border, 1, 1, default"
"fade, 1, 1, default"
"workspaces, 1, 1, default"
"borderangle,1, 50, linear, loop"
];
};
bind = [
# movement
"${modifier}, h, movefocus, l"
"${modifier}, l, movefocus, r"
"${modifier}_SHIFT, space, cyclenext, floating"
# window management
"${modifier}, F, fullscreen,"
"${modifier}, V, togglefloating,"
"${modifier}_SHIFT, X, killactive"
# master layout
"${modifier}, j, layoutmsg, rollnext"
"${modifier}, k, layoutmsg, rollprev"
"${modifier}, space, layoutmsg, swapwithmaster master"
"${modifier}, W, layoutmsg, orientationtop"
"${modifier}_SHIFT, W, layoutmsg, orientationleft"
# window grouping
"${modifier}_SHIFT, V, togglegroup,"
"${modifier}_SHIFT, j, changegroupactive, f"
"${modifier}_SHIFT, k, changegroupactive, b"
"${modifier}_SHIFT, h, moveintogroup, l"
"${modifier}_SHIFT, l, moveintogroup, r"
# scratch buffer
"${modifier}, Y, togglespecialworkspace"
"${modifier}_SHIFT, Y, movetoworkspace, special"
# applications
"${modifier}, slash, focuswindow, brave-browser"
"${modifier}, n, focuswindow, Logseq"
# workspaces
"${modifier}, 1, workspace,1"
"${modifier}, 2, workspace,2"
"${modifier}, 3, workspace,3"
"${modifier}, 4, workspace,4"
"${modifier}, 5, workspace,5"
"${modifier}, 6, workspace,6"
"${modifier}, 7, workspace,7"
"${modifier}, 8, workspace,8"
"${modifier}, 9, workspace,9"
"${modifier}, 0, workspace,10"
"${modifier}, left, workspace,r-1"
"${modifier}, right, workspace,r+1"
"${modifier}_SHIFT, 1, movetoworkspace,1"
"${modifier}_SHIFT, 2, movetoworkspace,2"
"${modifier}_SHIFT, 3, movetoworkspace,3"
"${modifier}_SHIFT, 4, movetoworkspace,4"
"${modifier}_SHIFT, 5, movetoworkspace,5"
"${modifier}_SHIFT, 6, movetoworkspace,6"
"${modifier}_SHIFT, 7, movetoworkspace,7"
"${modifier}_SHIFT, 8, movetoworkspace,8"
"${modifier}_SHIFT, 9, movetoworkspace,9"
"${modifier}_SHIFT, 0, movetoworkspace,10"
];
bindm = [
"${modifier}, mouse:272, movewindow"
"${modifier}, mouse:273, resizewindow"
];
env = [
"GDK_BACKEND,wayland,x11"
"QT_QPA_PLATFORM,wayland;xcb"
"SDL_VIDEODRIVER,wayland"
"CLUTTER_BACKEND,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_TYPE,wayland"
"XDG_SESSION_DESKTOP,Hyprland"
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
];
windowrule = [
"float, title:wlogout"
"idleinhibit always, vrmonitor"
"idleinhibit focus, steam_app"
];
workspace = [
"11, default:true"
];
general = {
gaps_out = 2;
gaps_in = 2;
resize_on_border = true;
layout = "master";
"col.active_border" = lib.mkForce "rgb(FFFF00) rgb(00FFFF) rgb(FF00FF)";
border_size = lib.mkDefault 2;
};
master = {
mfact = 0.7;
new_on_top = true;
};
misc = {
vrr = 2;
focus_on_activate = true;
};
};
# https://wiki.hyprland.org/Configuring/Variables/
extraConfig = ''
bind = ${modifier}, R, submap, resize
submap = resize
binde = ,right,resizeactive,10 0
binde = ,left,resizeactive,-10 0
binde = ,up,resizeactive,0 -10
binde = ,down,resizeactive,0 10
binde = ,k,resizeactive,0 -10
binde = ,j,resizeactive,0 10
binde = ,l,splitratio,0.05
binde = ,h,splitratio,-0.05
binde = SHIFT,l,splitratio,0.3
binde = SHIFT,h,splitratio,-0.3
bind = , escape, submap,reset
bind = , enter, submap,reset
bind = ${modifier}, R, submap,reset
bind = CONTROL, C, submap,reset
submap = reset
bind = ${modifier}_CONTROL, V, submap, passthrough
submap = passthrough
bind = ${modifier}_CONTROL, V, submap, reset
bind = SUPER, escape, submap, reset
submap = reset
device {
name = zsa-technology-labs-moonlander-mark-i
kb_variant =
kb_options = esperanto:qwerty,lv3:ralt_switch
}
'';
};
programs.scripts = [
{
name = "focus-application";
install = true;
text = ''
windows=$(hyprctl clients -j | jq -r '.[] | .title')
window=$(echo "$windows" | ${menu})
hyprctl dispatch focuswindow title:"$window"
'';
hotkeys = [
{
key = "tab";
}
];
}
];
services.mako = {
enable = true;
};
programs.waybar.settings.mainBar.modules-left = ["hyprland/workspaces" "hyprland/window"];
}