# Hyprland is a dynamic tiling Wayland compositor that is highly customizable and performant. { pkgs, config, lib, ... }: let border-size = config.theme.border-size; gaps-in = config.theme.gaps-in; gaps-out = config.theme.gaps-out; active-opacity = config.theme.active-opacity; inactive-opacity = config.theme.inactive-opacity; rounding = config.theme.rounding; blur = config.theme.blur; keyboardLayout = config.var.keyboardLayout; background = "rgb(" + config.lib.stylix.colors.base00 + ")"; in { imports = [ ./animations.nix ./bindings.nix ./polkitagent.nix ]; home.packages = with pkgs; [ qt5.qtwayland qt6.qtwayland libsForQt5.qt5ct qt6Packages.qt6ct hyprshot hyprpicker swappy imv wf-recorder wlr-randr wl-clipboard brightnessctl gnome-themes-extra libva dconf wayland-utils wayland-protocols glib direnv meson ]; wayland.windowManager.hyprland = { enable = true; xwayland.enable = true; systemd = { enable = false; variables = [ "--all" ]; # https://wiki.hyprland.org/Nix/Hyprland-on-Home-Manager/#programs-dont-work-in-systemd-services-but-do-on-the-terminal }; package = null; portalPackage = null; settings = { "$mod" = "SUPER"; "$shiftMod" = "SUPER_SHIFT"; "$altMod" = "SUPER_ALT"; exec-once = [ "systemctl --user enable --now hyprpaper.service &" ]; monitor = config.var.hyprland.monitor; env = [ "XDG_CURRENT_DESKTOP,Hyprland" "MOZ_ENABLE_WAYLAND,1" "ANKI_WAYLAND,1" "DISABLE_QT5_COMPAT,0" "NIXOS_OZONE_WL,1" "XDG_SESSION_TYPE,wayland" "XDG_SESSION_DESKTOP,Hyprland" "QT_AUTO_SCREEN_SCALE_FACTOR,1" "QT_QPA_PLATFORM=wayland,xcb" "QT_WAYLAND_DISABLE_WINDOWDECORATION,1" "ELECTRON_OZONE_PLATFORM_HINT,auto" "__GL_GSYNC_ALLOWED,0" "__GL_VRR_ALLOWED,0" "DISABLE_QT5_COMPAT,0" "DIRENV_LOG_FORMAT," "WLR_DRM_NO_ATOMIC,1" "WLR_BACKEND,vulkan" "WLR_RENDERER,vulkan" "WLR_NO_HARDWARE_CURSORS,1" "SDL_VIDEODRIVER,wayland" "CLUTTER_BACKEND,wayland" ]; workspace = config.var.hyprland.workspace ++ [ "special:scratchpad, on-created-empty:[float; size monitor_w/1.5 monitor_h/1.5; center] $TERMINAL" ]; cursor = { no_hardware_cursors = true; default_monitor = "0"; }; general = { resize_on_border = true; gaps_in = gaps-in; gaps_out = gaps-out; border_size = border-size; layout = "master"; "col.inactive_border" = lib.mkForce background; }; decoration = { dim_special = 0.3; active_opacity = active-opacity; inactive_opacity = inactive-opacity; rounding = rounding; shadow = { enabled = true; range = 20; render_power = 3; }; blur = { enabled = if blur then "true" else "false"; size = 18; }; }; master = { new_status = true; allow_small_split = true; mfact = 0.65; }; misc = { vfr = true; disable_hyprland_logo = true; disable_splash_rendering = true; disable_autoreload = false; focus_on_activate = true; new_window_takes_over_fullscreen = 2; }; windowrule = [ "match:title hyprpanel-settings, float on" "match:class xdg-desktop-portal-gtk, float on, center on, size monitor_w/2 monitor_h/2" # Bitwarden extension # idle inhibit while watching videos #"idleinhibit focus, class:^(mpv|.+exe|celluloid)$" #"idleinhibit focus, class:^(zen)$, title:^(.*YouTube.*)$" #"idleinhibit fullscreen, class:^(zen)$" #"dimaround, class:^(gcr-prompter)$" #"dimaround, class:^(xdg-desktop-portal-gtk)$" #"dimaround, class:^(polkit-gnome-authentication-agent-1)$" #"dimaround, class:^(zen)$, title:^(File Upload)$" ]; layerrule = [ "match:namespace vicinae, no_anim on, blur on, ignore_alpha 0" #"no_anim, launcher" #"no_anim, ^ags-.*" ]; input = { kb_layout = keyboardLayout; kb_options = "caps:escape"; follow_mouse = 1; sensitivity = 0.5; repeat_delay = 300; repeat_rate = 50; numlock_by_default = true; touchpad = { natural_scroll = true; clickfinger_behavior = true; }; }; }; }; }