diff --git a/modules/nixos/desktop-environment/default.nix b/modules/nixos/desktop-environment/default.nix index 08942bc..05cff7e 100644 --- a/modules/nixos/desktop-environment/default.nix +++ b/modules/nixos/desktop-environment/default.nix @@ -1,86 +1,89 @@ -{ config, lib, pkgs, namespace, options, ... }: +{ config, lib, pkgs, namespace, ... }: 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; + cfg = config.${namespace}.desktop-environment; in { - options.${namespace}.desktop-environment = lib.mkOption { - type = lib.types.attrsOf lib.types.any; - description = "Configuration options for desktop environments."; - default = { }; + options.${namespace}.desktop-environment = { xfce = { - enable = lib.mkEnableOption "Enable xfce desktop environment."; + enable = lib.mkEnableOption "XFCE desktop environment"; }; gnome = { - enable = lib.mkEnableOption "Enable gnome desktop environment."; + enable = lib.mkEnableOption "GNOME desktop environment"; }; - plasma = { - enable = lib.mkEnableOption "Enable plasma desktop environment."; + kde = { + enable = lib.mkEnableOption "KDE Plasma desktop environment"; }; + cosmic = { + enable = lib.mkEnableOption "Cosmic desktop environment"; + } }; - config = lib.mkIf xfce.enable { - xserver = { - enable = true; # Enable the deprecated X11 teletype terminal connection system. - desktopManager = { - xfce.enable = true; + + config = lib.mkMerge [ + (lib.mkIf cfg.xfce.enable { + services.xserver = { + enable = true; + 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 { + 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 + ]; + }) - desktopManager.gnome.enable = true; - environment.systemPackages = with pkgs; [ - gnome-tweaks - gnome-software - gnomeExtensions.pop-shell - gnome-remote-desktop - ]; + (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 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 - ]; - - }; + (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 + ]; + }) + ]; } \ No newline at end of file