{ config, pkgs, lib, ... }: with lib; let cfg = config.numbus-computer.packages.desktop; in { options.numbus-computer.packages.desktop = { gnome = { enable = mkEnableOption "Wether to enable the GNOME desktop environment."; extensions = mkOption { type = types.listOf types.str ; default = []; example = [ "dash-to-dock" "caffeine" "clipboard-history" "appindicator-support" ]; description = "Extensions to add to the Gnome desktop environment to improve your experience."; }; }; kde_plasma = { enable = mkEnableOption "Wether to enable the KDE Plasma desktop environment."; }; hyprland = { enable = mkEnableOption "Wether to enable the hyprland desktop environment."; }; }; config = mkMerge [ # GNOME (mkIf (cfg.gnome.enable == true) { services.xserver.enable = false; services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; services.gnome.core-apps.enable = false; services.gnome.core-developer-tools.enable = false; services.gnome.games.enable = false; environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-user-docs ]; }) # GNOME extensions (mkIf (cfg.gnome.enable == true && cfg.desktop.gnome.extensions != [ ]) { environment.systemPackages = map (ext: pkgs.gnomeExtensions.${ext}) cfg.desktop.gnome.extensions; }) # KDE Plasma (mkIf (cfg.kde_plasma.enable == true) { services = { desktopManager.plasma6.enable = true; displayManager.sddm.enable = true; displayManager.sddm.wayland.enable = true; }; environment.systemPackages = with pkgs; [ kdePackages.discover kdePackages.kcalc kdePackages.kcharselect kdePackages.kclock kdePackages.kcolorchooser kdePackages.kolourpaint kdePackages.sddm-kcm kdiff3 wayland-utils wl-clipboard ]; }) # Hyprland (mkIf (cfg.hyprland.enable == true) { programs.hyprland.enable = true; environment.systemPackages = [ pkgs.kitty ]; }) ]; }