{ 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 = []; }; additionalConfig = lib.mkOption { type = lib.types.attrs; description = "Additional options for Hyprland config"; default = []; }; plugins = lib.mkOption { type = lib.types.listOf lib.types.package; description = "Additional plugins for Hyprland"; default = []; }; sourceFiles = lib.mkOption { type = lib.types.listOf lib.types.str; description = "Config files to source"; default = []; }; }; config = lib.mkIf config.modules.hyprland.enable { home.packages = with pkgs; [ hyprlock hypridle wl-clipboard cliphist swww ] ++ config.modules.hyprland.additionalPackages; wayland.windowManager.hyprland = { enable = true; xwayland.enable = true; plugins = config.modules.hyprland.plugins; settings = config.modules.hyprland.additionalConfig // { source = config.modules.hyprland.sourceFiles; }; }; xdg.portal = { enable = true; config.common.default = "*"; extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; }; systemd.user.services.authentication-agent = { Unit = { Description = "GNOME Authentication Agent"; After = [ "graphical-session.target" ]; Wants = [ "graphical-session.target" ]; }; Install = { WantedBy = [ "graphical-session.target" ]; }; Service = { Type = "simple"; ExecStart = "${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent"; Restart = "on-failure"; RestartSec = 1; TimeoutStopSec = 10; }; }; }; }