{ config, pkgs, lib, inputs, ... }: let system = pkgs.stdenv.hostPlatform.system; hyprland = inputs.hyprland.packages.${system}; hyprland-plugins = inputs.hyprland-plugins.packages.${system}; hy3 = inputs.hy3.packages.${system}; debug = true; in { environment = { variables = { HYPRLAND_TRACE = if debug then "1" else "0"; AQ_TRACE = if debug then "1" else "0"; XDG_CURRENT_DESKTOP = "Hyprland"; XDG_SESSION_TYPE = "wayland"; XDG_SESSION_DESKTOP = "Hyprland"; LIBSEAT_BACKEND = "logind"; }; sessionVariables = { XCURSOR_THEME = "Adwaita"; XCURSOR_SIZE = "24"; GTK_THEME = "Orchis-Teal-Dark"; MOZ_ENABLE_WAYLAND = "1"; MOZ_USE_XINPUT = "1"; _JAVA_AWT_WM_NONREPARENTING = "1"; }; }; xdg.portal = { enable = true; xdgOpenUsePortal = true; config = { common.default = ["gtk"]; hyprland.default = ["gtk" "hyprland"]; }; extraPortals = [ pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-wlr hyprland.xdg-desktop-portal-hyprland ]; }; programs.xwayland.enable = true; home-manager.users.${config.user} = { wayland.windowManager.hyprland = { enable = true; package = hyprland.hyprland; xwayland.enable = true; systemd.enable = true; # Plugins plugins = [ hyprland-plugins.hyprexpo hy3.hy3 ]; # Config settings = { # Debug debug.disable_logs = ! debug; debug.disable_time = ! debug; debug.enable_stdout_logs = debug; # Monitors monitor = map (monitor: "${monitor.name}, highres, auto, ${toString monitor.scale}" ) config.monitors; # Autostart exec-once = config.autoRun; # General general = { gaps_in = config.theme.innerGap; gaps_out = config.theme.outerGap; layout = "hy3"; resize_on_border = "yes"; extend_border_grab_area = 20; border_size = config.theme.borderWidth; "col.active_border" = "rgb(${config.theme.colors.accent})"; "col.inactive_border" = "rgb(${config.theme.colors.base04})"; }; # Gestures gestures = { workspace_swipe = true; workspace_swipe_fingers = 3; workspace_swipe_forever = true; workspace_swipe_cancel_ratio = 0.15; }; # Decoration decoration = { rounding = config.theme.outerRadius; shadow.enabled = false; blur = { enabled = true; size = 4; passes = 2; noise = 0.008; contrast = 0.8916; brightness = 0.8; }; }; # Animations animations = { enabled = true; bezier = [ "windowIn, 0.06, 0.71, 0.25, 1" "windowResize, 0.04, 0.67, 0.38, 1" ]; animation = [ "windowsIn, 1, 3, windowIn, slide #popin 20%" "windowsOut, 1, 3, windowIn, slide #popin 70%" "windowsMove, 1, 2.5, windowResize" "border, 1, 10, default" "borderangle, 1, 8, default" "fade, 1, 3, default" "workspaces, 1, 6, default" "layers, 1, 5, windowIn, slide" ]; }; # Input input = { kb_layout = "us"; kb_variant = ""; kb_model = ""; kb_options = "gtp:alt_shit_toggle, compose:ralt"; kb_rules = ""; follow_mouse = 1; touchpad = { natural_scroll = "yes"; }; sensitivity = 0; }; # Keybinds "$mod" = "SUPER"; bind = [ # Launch programs "$mod, W, exec, ${config.default.browser}" "$mod, D, exec, ${config.default.appLauncher}" "$mod, L, exec, ${config.default.lockScreen}" "$mod, Return, exec, ${config.default.terminal}" ", Print, exec, grimblast copy area" # Misc "$mod SHIFT, L, exit" "$mod, tab, hyprexpo:expo, toggle" # Window operations "$mod SHIFT, Q, killactive" "$mod SHIFT, SPACE, togglefloating" "$mod, F, fullscreen" "$mod, J, togglesplit" # Move focus with mod + arrow keys "$mod, left, movefocus, l" "$mod, right, movefocus, r" "$mod, up, movefocus, u" "$mod, down, movefocus, d" # Move window across workspace with mod + arrow keys "$mod SHIFT, left, hy3:movewindow, l" "$mod SHIFT, right, hy3:movewindow, r" "$mod SHIFT, up, hy3:movewindow, u" "$mod SHIFT, down, hy3:movewindow, d" # Switch workspaces with mod + [0-9] "$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" # Move active window to a workspace with mod + SHIFT + [0-9] "$mod SHIFT, 1, movetoworkspacesilent, 1" "$mod SHIFT, 2, movetoworkspacesilent, 2" "$mod SHIFT, 3, movetoworkspacesilent, 3" "$mod SHIFT, 4, movetoworkspacesilent, 4" "$mod SHIFT, 5, movetoworkspacesilent, 5" "$mod SHIFT, 6, movetoworkspacesilent, 6" "$mod SHIFT, 7, movetoworkspacesilent, 7" "$mod SHIFT, 8, movetoworkspacesilent, 8" "$mod SHIFT, 9, movetoworkspacesilent, 9" "$mod SHIFT, 0, movetoworkspacesilent, 10" # Move to tab "LALT, 1, hy3:focustab, index, 01" "LALT, 2, hy3:focustab, index, 02" "LALT, 3, hy3:focustab, index, 03" "LALT, 4, hy3:focustab, index, 04" "LALT, 5, hy3:focustab, index, 05" "LALT, 6, hy3:focustab, index, 06" "LALT, 7, hy3:focustab, index, 07" "LALT, 8, hy3:focustab, index, 08" "LALT, 9, hy3:focustab, index, 09" "LALT, 0, hy3:focustab, index, 10" "$mod SHIFT, B, hy3:makegroup, h" "$mod SHIFT, V, hy3:makegroup, v" "$mod SHIFT, C, hy3:changegroup, toggletab" # Scroll through existing workspaces with mod + scroll "$mod, mouse_down, workspace, e+1" "$mod, mouse_up, workspace, e-1" ]; bindn = [ # Focus windows with scroll wheel or middle click ", mouse:272, hy3:focustab, mouse" ", mouse_down, hy3:focustab, l, require_hovered" ", mouse_up, hy3:focustab, r, require_hovered" ]; bindm = [ # Move/resize windows with mod + LMB/RMB and dragging "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" ]; binde = [ # Audio # raise volume ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+" # lower volume ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" # mute speaker ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" # mute mic ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" # Media # play ", XF86AudioPlay, exec, playerctl play-pause" # next ", XF86AudioNext, exec, playerctl next" # prev ", XF86AudioPrev, exec, playerctl previous" # Backlight ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" ", XF86MonBrightnessUp, exec, brightnessctl set 5%+" ]; # Plugin configuration plugin = { # hy3 hy3 = { tabs = { height = 24; text_height = 9; text_padding = 10; padding = 2; render_text = true; text_font = "monospace"; radius = config.theme.outerRadius; border_width = config.theme.borderWidth; "col.active" = "rgb(${config.theme.colors.base00})"; "col.active.border" = "rgb(${config.theme.colors.accent})"; "col.active.text" = "rgb(${config.theme.colors.base05})"; "col.inactive" = "rgb(${config.theme.colors.base00})"; "col.inactive.border" = "rgb(${config.theme.colors.base04})"; "col.inactive.text" = "rgb(${config.theme.colors.base05})"; }; autotile = { enable = true; }; }; }; # XWayland xwayland = { force_zero_scaling = "true"; use_nearest_neighbor = "false"; }; # Misc misc = { disable_hyprland_logo = true; disable_splash_rendering = true; key_press_enables_dpms = true; mouse_move_enables_dpms = true; vrr = 1; }; }; # end settings }; # end hyprland }; # end home-manager }