{ lib, pkgs, config, ... }: let modifier = config.windowManager.modifierKey; in { imports = [ (import ./swaylock.nix) (import ./swayidle.nix) (import ./waybar.nix) (import ./hycov.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 = { 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 = true; }; decoration = { rounding = 5; 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, 1, default, popin" "border, 1, 1, default" "fade, 1, 1, default" "workspaces, 1, 3, overshot" "borderangle,1, 50, linear, loop" ]; }; bind = [ # movement "${modifier}, h, movefocus, l" "${modifier}, l, movefocus, r" "${modifier}, j, layoutmsg, cyclenext" "${modifier}, k, layoutmsg, cycleprev" # window management "${modifier}, F, fullscreen," "${modifier}, V, togglefloating," "${modifier}_SHIFT, X, killactive" # master layout "${modifier}, space, layoutmsg,swapwithmaster master" "${modifier}, W, layoutmsg, orientationprev" "${modifier}_SHIFT, W, layoutmsg, orientationnext" # window grouping "${modifier}_SHIFT, V, togglegroup," "${modifier}_SHIFT, j, changegroupactive,b" "${modifier}_SHIFT, k, changegroupactive,f" "${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" "NIXOS_OZONE_WL,1" "WLR_NO_HARDWARE_CURSORS,1" ]; windowrule = [ "float, title:wlogout" "idleinhibit always, vrmonitor" "idleinhibit focus, steam_app" ]; workspace = [ "11, default:true" ]; general = { gaps_out = 10; resize_on_border = true; layout = "master"; "col.active_border" = lib.mkForce "rgb(FFFF00) rgb(00FFFF) rgb(FF00FF)"; border_size = lib.mkDefault 5; }; 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 ''; }; services.mako = { enable = true; }; programs.waybar.settings.mainBar.modules-left = ["hyprland/workspaces" "hyprland/window"]; }