{ config, lib, pkgs, namespace, options, ... }: let desktop-environment = config.${namespace}.desktop-environment; xfce = config.${namespace}.desktop-environment.xfce; gnome = config.${namespace}.desktop-environment.gnome; plasma = config.${namespace}.desktop-environment.plasma; in { options.${namespace}.desktop-environment = lib.mkOption { type = lib.types.attrsOf lib.types.any; description = "Configuration options for desktop environments."; default = { }; xfce = { enable = lib.mkEnableOption "Enable xfce desktop environment."; }; gnome = { enable = lib.mkEnableOption "Enable gnome desktop environment."; }; plasma = { enable = lib.mkEnableOption "Enable plasma desktop environment."; }; }; config = lib.mkIf xfce.enable { xserver = { enable = true; # Enable the deprecated X11 teletype terminal connection system. desktopManager = { xfce.enable = true; }; }; environment.systemPackages = with pkgs; [ xfce.xfce4-goodies xfce.xfce4-pulseaudio-plugin xfce.xfce4-clipman-plugin xfce.xfce4-screenshooter xfce.xfce4-whiskermenu-plugin thunar-archive-plugin thunar-volman gvfs gvfs-mtp gvfs-afc gvfs-goa gnome-keyring libgnome-keyring ]; } ++ lib.mkIf gnome.enable { desktopManager.gnome.enable = true; environment.systemPackages = with pkgs; [ gnome-tweaks gnome-software gnomeExtensions.pop-shell gnome-remote-desktop ]; } ++ lib.mkIf plasma.enable { desktopManager.plasma6.enable = true; environment.systemPackages = with pkgs kdePackages; [ 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 plasma.plasma-desktop plasma.plasma-nm plasma.plasma-pa gnome-keyring libgnome-keyring ]; }; }