My nixos configuration!
{
  pkgs,
  lib,
  config,
  ...
}:
{

  options.cady = {
    desktop = lib.mkOption {
      type = lib.types.enum [
        "Gnome"
        "Plasma"
        "Hyprland"
      ];
      default = "Gnome";
      description = "Cady style preconfigured DE (Only Gnome or Plasma for now)";
    };
    remote.enable = lib.mkEnableOption "Enable XRDP";
  };

  config = lib.mkMerge [
    (lib.mkIf (config.cady.remote.enable) {
      # services.sunshine = {
      #   enable = true;
      #   openFirewall = true;
      #   capSysAdmin = true;
      # };
    })
    (lib.mkIf (config.cady.desktop == "Gnome") {
      # Enable the X11 windowing system and disable xterm.
      services.xserver = {
        enable = true;
        excludePackages = with pkgs; [ xterm ];
      };

      # Enable the GNOME Desktop Environment.
      services.xserver.displayManager.gdm.enable = true;
      services.xserver.desktopManager.gnome.enable = true;

      # Exclude GNOME default applications
      environment.gnome.excludePackages = with pkgs; [
        gnome-disk-utility
        gnome-backgrounds
        gnome-user-docs
        gnome-tour
        # gnome-text-editor
        gnome-calculator
        gnome-calendar
        gnome-contacts
        gnome-font-viewer
        gnome-maps
        gnome-music
        gnome-weather
        gnome-connections
        gnome-software
        orca
        simple-scan
        # snapshot
        # totem
        yelp
        epiphany
        geary
        evince
      ];

      # Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229
      systemd.services."getty@tty1".enable = false;
      systemd.services."autovt@tty1".enable = false;

      # Pop!_OS shell is really nice actually.
      environment.systemPackages =
        with pkgs;
        with pkgs.gnomeExtensions;
        [
          pop-shell
          blur-my-shell
          undecorate
          gsnap
          gparted
        ];
    })

    (lib.mkIf (config.cady.desktop == "Plasma") {

      # Enable the X11 windowing system and disable xterm.
      services.xserver = {
        enable = true;
        excludePackages = with pkgs; [ xterm ];
      };

      # Enable KDE Plasma
      # services.displayManager.sddm.enable = true;
      services.desktopManager.plasma6.enable = true;

      # Plasma Packages
      environment.systemPackages =
        with pkgs;
        with kdePackages;
        [
          plasma-browser-integration
        ];

      environment.plasma6.excludePackages = with pkgs.kdePackages; [
        elisa
        kate
      ];

    })
  ];
}