{ pkgs, config, lib, ... }: { options.modules.hyprland = { enable = lib.mkEnableOption "Enable Hyprland"; additionalPackages = lib.mkOption { type = lib.types.listOf lib.types.package; description = "Additional Hyprland-related packages to install"; default = []; }; }; config = lib.mkIf config.modules.hyprland.enable { environment.systemPackages = with pkgs; [ hyprlock hypridle wl-clipboard cliphist swww ] ++ config.modules.hyprland.additionalPackages; programs.hyprland.withUWSM = true; programs.hyprland.enable = true; programs.hyprland.xwayland.enable = true; services.logind.extraConfig = '' HandleLidSwitch=suspend HandleLidSwitchExternalPower=ignore HandlePowerKey=ignore ''; xdg.portal = { enable = true; extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; }; security.polkit.enable = true; systemd.user.services.authentication-agent = { description = "GNOME Authentication Agent"; wantedBy = ["graphical-session.target"]; wants = ["graphical-session.target"]; after = ["graphical-session.target"]; serviceConfig = { Type = "simple"; ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; services = { dbus.enable = true; gvfs.enable = true; upower.enable = true; power-profiles-daemon.enable = true; }; services.xserver.displayManager = { gdm.enable = true; startx.enable = true; }; systemd.tmpfiles.rules = [ "d '/var/cache/greeter' - greeter greeter - -" ]; }; }