{ config, lib, pkgs, namespace, ... }: let cfg = config.${namespace}.desktop-environment; in { options.${namespace}.desktop-environment = { xfce = { enable = lib.mkEnableOption "XFCE desktop environment"; }; gnome = { enable = lib.mkEnableOption "GNOME desktop environment"; }; kde = { enable = lib.mkEnableOption "KDE Plasma desktop environment"; }; cosmic = { enable = lib.mkEnableOption "Cosmic desktop environment"; }; hyprland = { enable = lib.mkEnableOption "hyprland Wayland shell" }; }; config = lib.mkMerge [ (lib.mkIf cfg.xfce.enable { services.xserver = { enable = true; desktopManager = { xfce.enable = true; }; }; environment.systemPackages = with pkgs; [ xfce.xfce4-pulseaudio-plugin xfce.xfce4-clipman-plugin xfce.xfce4-screenshooter xfce.xfce4-whiskermenu-plugin thunar-archive-plugin thunar-volman gvfs gnome-keyring libgnome-keyring ]; }) (lib.mkIf cfg.gnome.enable { services.xserver = { enable = true; desktopManager.gnome.enable = true; }; environment.systemPackages = with pkgs; [ gnome-tweaks gnome-software gnomeExtensions.pop-shell gnome-remote-desktop ]; }) (lib.mkIf cfg.kde.enable { services.xserver.enable = true; services.desktopManager.plasma6.enable = true; environment.systemPackages = with pkgs; [ kdePackages.qtwebsockets kdePackages.qtwebchannel kdePackages.korganizer kdePackages.akonadi kdePackages.akonadi-calendar kdePackages.akonadi-contacts kdePackages.kaddressbook kdePackages.kmail kdePackages.kdepim-runtime kdePackages.kontact kdePackages.kidentitymanagement kdePackages.libkdepim kdePackages.kwin kdePackages.plasma-workspace gnome-keyring libgnome-keyring ]; }) (lib.mkIf cfg.cosmic.enable { services.desktopManager.cosmic.enable = true; services.desktopManager.cosmic.xwayland.enable = true; environment.systemPackages = with pkgs; [ gnome-keyring libgnome-keyring ]; }) ]; }