{ config, osConfig, perSystem, launcher, lockscreen, # pkgs, # lib, ... }: let inherit (config.lib.stylix) colors; # inherit (lib) mkIf; hostname = osConfig.networking.hostName; cursorSize = config.stylix.cursor.size; fontName = config.stylix.fonts.sansSerif.name; keyboard = if hostname == "eldrid" then "chromeos" else "platform"; xdgPictures = config.xdg.userDirs.pictures; # ifLaptop = mkIf (hostname != "dunamis"); in { enable = true; systemd = { enable = true; variables = [ "--all" ]; }; package = perSystem.hyprland.hyprland; portalPackage = perSystem.hyprland.xdg-desktop-portal-hyprland; # plugins = with pkgs.hyprlandPlugins; [ # hyprspace # hy3 # hyprscroller # ]; settings = { input = { kb_layout = "us,ua"; resolve_binds_by_sym = if hostname == "dunamis" then 0 else 1; repeat_rate = 50; repeat_delay = 300; # mouse accel_profile = "flat"; sensitivity = 0; }; device = [ { name = "ite-tech.-inc.-ite-device(8910)-keyboard"; kb_variant = "colemak_dh,"; } { name = "at-translated-set-2-keyboard"; kb_variant = "colemak_dh,"; } { name = "keyd-virtual-keyboard"; kb_variant = "colemak_dh,"; } ]; xwayland.force_zero_scaling = true; monitor = [ ", preferred, auto, 1" "desc:AOC 27V2G5 0x0000026C, addreserved, 0, 300, 0, 0" "desc:Samsung Electric Company S24R65x H4TMA03291, preferred, 0x0, 1, bitdepth, 10, vrr, 1" "desc:Philips Consumer Electronics Company 27M2N5500 UK02418033254, 2560x1440@180.00Hz, 0x0, 1.3333333, bitdepth, 10, vrr, 1" "desc:BOE 0x08E8, preferred, 1920x0, 1.2, bitdepth, 10" "desc:LG Display 0x068B, preferred, 1920x0, 1.2, bitdepth, 10" "desc:Chimei Innolux Corporation 0x1406, preferred, 1920x0, 1.2" "desc:KDC 0x0000, preferred, 1920x0, 1.25" ]; env = [ "ELECTRON_OZONE_PLATFORM_HINT,auto" "QT_QPA_PLATFORM,wayland" "QT_QPA_PLATFORMTHEME,gtk3" "XCURSORSIZE,${toString cursorSize}" "GSK_RENDERER,ngl" ]; decoration = { shadow.enabled = false; # drop_shadow = false; blur = { size = 8; passes = 3; }; # shadow_offset = "0 5"; # "col.shadow" = "rgba(00000099)"; rounding = 12; }; misc = { font_family = fontName; disable_splash_rendering = true; disable_hyprland_logo = true; # vfr = true; }; bezier = [ "easeOutQuad, 0.25, 0.46, 0.45, 0.94" "easeOutExpo, 0.19, 1, 0.22, 1" ]; animation = [ "workspaces, 1, 3, easeOutExpo, slidefade 20%" "windows, 1, 3, easeOutExpo, popin 80%" "layers, 1, 2, easeOutExpo, fade" ]; plugin = [ { overview = { gapsIn = 12; gapsOut = 24; exitOnClick = true; centerAligned = true; showNewWorkspace = false; showEmptyWorkspace = false; affectStrut = false; }; hyprexpo = { columns = 3; gap_size = 8; #bg_col = "rgb(111111)"; workspace_method = "first 1"; # [center/first] [workspace] e.g. first 1 or center m+1 enable_gesture = true; # laptop touchpad gesture_fingers = 3; # 3 or 4 gesture_distance = 400; # how far is the "max" gesture_positive = false; # positive = swipe down. Negative = swipe up.; }; } { hy3 = { autotile = true; tab_first_window = false; tabs = { render_text = true; height = 24; padding = 8; rounding = 8; text_height = 14; text_center = true; text_font = fontName; "col.active" = "0xff${colors.base00}"; "col.inactive" = "0xff${colors.base00}"; "col.urgent" = "0xff${colors.base00}"; "col.active.text" = "0xff${colors.base0D}"; "col.inactive.text" = "0xff${colors.base05}"; "col.urgent.text" = "0xff${colors.base09}"; "col.active.border" = "0xff${colors.base00}"; "col.inactive.border" = "0xff${colors.base00}"; "col.urgent.border" = "0xff${colors.base00}"; }; }; } { scroller = { column_widths = "onethird onehalf twothirds one"; window_heights = "onethird onehalf twothirds one"; gesture_scroll_fingers = 3; gesture_overview_fingers = 3; jump_labels_font = fontName; jump_labels_color = "0xff${colors.base0A}"; }; } ]; dwindle = { force_split = 2; default_split_ratio = 1.2; }; master = { mfact = 0.6; }; "$mod" = "SUPER"; "$modShift" = "$mod SHIFT"; "$modCtrl" = "$mod CTRL"; "$modShiftCtrl" = "$mod SHIFT CTRL"; "$left" = "N"; "$down" = "E"; "$up" = "I"; "$right" = "O"; "$terminal" = "ghostty"; "$launcher" = launcher; "$screenLocker" = lockscreen; "$webBrowser" = "io.github.zen_browser.zen"; "$clipboardManager" = "copyq menu"; general = { "col.active_border" = "0xff${colors.base0D}"; "col.inactive_border" = "0xff${colors.base03}"; gaps_in = 4; gaps_out = 8; border_size = 3; allow_tearing = true; layout = "dwindle"; }; group = { "col.border_active" = "0xff${colors.base0D}"; "col.border_inactive" = "0xff${colors.base03}"; "col.border_locked_active" = "0xff${colors.base0A}"; "col.border_locked_inactive" = "0xff${colors.base0F}"; groupbar = { height = 16; rounding = 0; indicator_height = 0; gradient_rounding = 4; font_size = 14; gradients = true; font_family = fontName; "text_color" = "0xff${colors.base00}"; "col.active" = "0xff${colors.base0D}"; "col.inactive" = "0xff${colors.base03}"; }; }; binds.scroll_event_delay = 0; cursor.persistent_warps = true; bind = [ "$mod, Return, exec, $terminal" "$mod, Space, exec, $launcher" # "$modShift, Space, exec, $launcher" "$modCtrl, Q, killactive" "$modCtrl, M, fullscreen" "$modCtrl, G, togglefloating" "$mod, G, pin" "$mod, T, togglegroup" "$mod, period, changegroupactive, f" "$mod, comma, changegroupactive, b" "$modCtrl, period, movewindoworgroup, r" "$modCtrl, comma, movewindoworgroup, l" "$mod, Tab, cyclenext," "$modShift, Tab, cyclenext, prev" "$mod, Tab, bringactivetotop," "$modShift, U, focusurgentorlast" "$modCtrl, L, exec, $screenLocker" "$modCtrl, B, exec, $webBrowser" "$modCtrl, V, exec, $clipboardManager" "$modCtrl, K, focuswindow, title:(Meet:.*)" # ", Print, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp -o -r -c '\#\#00000000')\" -t ppm - | ${pkgs.satty}/bin/satty --filename - --fullscreen --output-filename ${xdgPictures}/screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png" ", Print, exec, hyprshot -z -m region -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png" "CTRL, Print, exec, hyprshot -z -m window -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png" "SHIFT, Print, exec, hyprshot -z -m output -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png" ## navigation "$mod, $left, movefocus, l" "$mod, $down, movefocus, d" "$mod, $up, movefocus, u" "$mod, $right, movefocus, r" "$modShift, $left, workspace, e-1" "$modShift, $right, workspace, e+1" "$mod, left, movefocus, l" "$mod, up, movefocus, u" "$mod, down, movefocus, d" "$mod, right, movefocus, r" "$modShift, W, focuscurrentorlast" "$mod, mouse_down, workspace, e-1" "$mod, mouse_up, workspace, e+1" "$modShift, left, workspace, e-1" "$modShift, right, workspace, e+1" "$modCtrl, $left, movewindow, l" "$modCtrl, $down, movewindow, d" "$modCtrl, $up, movewindow, u" "$modCtrl, $right, movewindow, r" "$modCtrl, left, movewindow, l" "$modCtrl, up, movewindow, u" "$modCtrl, down, movewindow, d" "$modCtrl, right, movewindow, r" # workspaces "$mod, 1, workspace, 1" "$mod, 2, workspace, 2" "$mod, 3, workspace, 3" "$mod, 4, workspace, 4" "$mod, 5, workspace, 5" "$mod, 6, workspace, 6" "$mod, 7, workspace, 7" "$mod, 8, workspace, 8" "$mod, 9, workspace, 9" "$mod, 0, togglespecialworkspace" "$modShiftCtrl, 1, movetoworkspace, 1" "$modShiftCtrl, 2, movetoworkspace, 2" "$modShiftCtrl, 3, movetoworkspace, 3" "$modShiftCtrl, 4, movetoworkspace, 4" "$modShiftCtrl, 5, movetoworkspace, 5" "$modShiftCtrl, 6, movetoworkspace, 6" "$modShiftCtrl, 7, movetoworkspace, 7" "$modShiftCtrl, 8, movetoworkspace, 8" "$modShiftCtrl, 9, movetoworkspace, 9" "$modShiftCtrl, 0, movetoworkspace, special" "$mod, Q, workspace, 1" "$mod, W, workspace, 2" "$mod, F, workspace, 3" "$mod, P, workspace, 4" "$mod, B, workspace, 5" "$mod, J, workspace, 6" "$mod, L, workspace, 7" "$mod, U, workspace, 8" "$mod, Y, workspace, 9" "$mod, apostrophe, togglespecialworkspace" "$modShiftCtrl, Q, movetoworkspace, 1" "$modShiftCtrl, W, movetoworkspace, 2" "$modShiftCtrl, F, movetoworkspace, 3" "$modShiftCtrl, P, movetoworkspace, 4" "$modShiftCtrl, B, movetoworkspace, 5" "$modShiftCtrl, J, movetoworkspace, 6" "$modShiftCtrl, L, movetoworkspace, 7" "$modShiftCtrl, U, movetoworkspace, 8" "$modShiftCtrl, Y, movetoworkspace, 9" "$modShiftCtrl, apostrophe, movetoworkspace, special" "$modShiftCtrl, $left, movetoworkspace, e-1" "$modShiftCtrl, $right, movetoworkspace, e+1" "$modShiftCtrl, left, movetoworkspace, e-1" "$modShiftCtrl, right, movetoworkspace, e+1" ''$mod ALT, mouse_down, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.25}')"'' ''$mod ALT, mouse_up, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.25}')"'' "$mod ALT, mouse:274, exec, hyprctl keyword cursor:zoom_factor 1" # middle wheel click ]; # binde = [ # "$mod, comma, resizeactive, -10 0" # "$mod, period, resizeactive, 10 0" # "$modShift, comma, resizeactive, 0 -10" # "$modShift, period, resizeactive, 0 10" # ]; bindl = [ "$mod, Escape, exec, hyprctl switchxkblayout all next" ", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, disable'" ", switch:off:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, preferred, 1920x0, 1.2'" ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ", XF86AudioPlay, exec, playerctl play-pause" ", XF86AudioPrev, exec, playerctl previous" ", XF86AudioNext, exec, playerctl next" "$modShiftCtrl ALT, Q, exit" ]; binde = [ ", XF86MonBrightnessUp, exec, brightnessctl s 5%+" ", XF86MonBrightnessDown, exec, brightnessctl s 5%-" "ALT, XF86MonBrightnessUp, exec, brightnessctl s 5%+ -d ${keyboard}::kbd_backlight" "ALT, XF86MonBrightnessDown, exec, brightnessctl s 5%- -d ${keyboard}::kbd_backlight" ", XF86KbdBrightnessUp, exec, brightnessctl s 5%+ -d ${keyboard}::kbd_backlight" ", XF86KbdBrightnessDown, exec, brightnessctl s 5%- -d ${keyboard}::kbd_backlight" ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" ]; bindm = [ "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" "$mod ALT, mouse:272, resizewindow" ]; gestures = { workspace_swipe = true; workspace_swipe_fingers = 3; workspace_swipe_distance = 300; }; workspace = [ "1, defaultName:general" "2, defaultName:web" "3, defaultName:chat" "4, defaultName:code" "5, defaultName:uni" "6, defaultName:games" "7, defaultName:system" "8, defaultName:media" "9, defaultName:tray" # "10, defaultName:" ]; windowrulev2 = [ ## tray/misc utilities # file picker "float, class:xdg-desktop-portal-gtk" "size <50% <90%, class:xdg-desktop-portal-gtk" "center 1, class:xdg-desktop-portal-gtk" # xdp-hyprland stream picker "float, initialTitle:MainPicker" # general apps "float, class:(com.saivert.pwvucontrol)" "float, class:(re.sonny.Junction)" "float, class:(com.github.hluk.copyq)" "float, class:(nm-connection-editor)" "float, class:(.blueman-manager-wrapped)" # telegram "maximize, initialTitle:Медіапереглядач" "noborder, title:TelegramDesktop" "keepaspectratio, title:TelegramDesktop" "noblur, title:TelegramDesktop" "float, title:TelegramDesktop" "pin, title:TelegramDesktop" # any chromium-based "noborder, title:Картинка в картинці" "keepaspectratio, title:Картинка в картинці" "noblur, title:Картинка в картинці" "float, title:Картинка в картинці" "pin, title:Картинка в картинці" # and firefox "noborder, title:Picture-in-Picture" "keepaspectratio, title:Picture-in-Picture" "noblur, title:Picture-in-Picture" "float, title:Picture-in-Picture" "pin, title:Picture-in-Picture" # screenshot editor "noanim, class:com.gabm.satty" "float, class:com.gabm.satty" "rounding 0, class:com.gabm.satty" "size 100% 100%, class:com.gabm.satty" "move 0 0, class:com.gabm.satty" "pin, class:com.gabm.satty" ## games "float, class:(com.mojang.minecraft.java-edition)" "immediate, class:(com.mojang.minecraft.java-edition)" # cs2 "immediate, class:(cs2)" # deadlock # "float, class:(steam_app_1422450)" "fullscreen, class:(steam_app_1422450)" "immediate, class:(steam_app_1422450)" "immediate, initialTitle:(Ghostrunner)" # dead by daylight "immediate, class:deadbydaylight-egs-shipping.exe" ## workspace assignments "workspace name:chat, class:org.telegram.desktop" "workspace name:chat, class:org.signal.Signal" "workspace name:chat, class:im.riot.Riot" "workspace name:chat, class:WebCord" "workspace name:games, class:com.heroicgameslauncher.hgl" "workspace name:games, class:net.lutris.Lutris" "workspace name:games, class:steam" # "workspace name:game, class:" ]; }; extraConfig = '' bind = $modShift, 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 = , $right, resizeactive, 10 0 binde = , $left, resizeactive, -10 0 binde = , $up, resizeactive, 0 -10 binde = , $down, resizeactive, 0 10 bind = , escape, submap, reset submap = reset ''; }