From a387a4cd077a00da41e4ad3061f1d4d9f8b9275c Mon Sep 17 00:00:00 2001 From: "Wyatt J. Miller" Date: Sat, 29 Aug 2026 10:38:22 -0400 Subject: [PATCH] wip: added assortment of desktops ai generated, needs some work/cleanup --- modules/desktop/default.nix | 171 ++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 modules/desktop/default.nix diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix new file mode 100644 index 0000000..fc3201d --- /dev/null +++ b/modules/desktop/default.nix @@ -0,0 +1,171 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.desktop; + + defaultWaylandPackages = with pkgs; [ + brightnessctl + cliphist + foot + grim + libnotify + mako + networkmanagerapplet + playerctl + polkit_gnome + pavucontrol + rofi + slurp + waybar + wl-clipboard + xdg-utils + ]; + + defaultSwayPackages = + defaultWaylandPackages + ++ (with pkgs; [ + pulseaudio + swayidle + swaylock + wmenu + ]); + + resolvedDisplayManager = + if cfg.displayManager != "auto" + then cfg.displayManager + else if cfg.gnome.enable + then "gdm" + else if cfg.xfce.enable + then "lightdm" + else "none"; +in { + options.desktop = { + displayManager = lib.mkOption { + type = lib.types.enum ["auto" "none" "gdm" "lightdm" "ly"]; + default = "auto"; + description = '' + Display manager to enable. In auto mode, GDM is used when GNOME is + enabled, LightDM is used when XFCE is enabled, and no display manager + is enabled for compositor-only configurations. + ''; + }; + + gnome.enable = lib.mkEnableOption "the vanilla GNOME desktop environment"; + + xfce.enable = lib.mkEnableOption "the vanilla XFCE desktop environment"; + + sway = { + enable = lib.mkEnableOption "the Sway Wayland compositor"; + + extraPackages = lib.mkOption { + type = with lib.types; listOf package; + default = defaultSwayPackages; + defaultText = lib.literalExpression '' + with pkgs; [ + brightnessctl + cliphist + foot + grim + libnotify + mako + networkmanagerapplet + playerctl + polkit_gnome + pulseaudio + pavucontrol + rofi + slurp + swayidle + swaylock + waybar + wl-clipboard + wmenu + xdg-utils + ] + ''; + description = "Packages installed alongside Sway."; + }; + }; + + hyprland = { + enable = lib.mkEnableOption "the Hyprland Wayland compositor"; + + extraPackages = lib.mkOption { + type = with lib.types; listOf package; + default = defaultWaylandPackages; + defaultText = lib.literalExpression '' + with pkgs; [ + brightnessctl + cliphist + foot + grim + libnotify + mako + networkmanagerapplet + playerctl + polkit_gnome + pavucontrol + rofi + slurp + waybar + wl-clipboard + xdg-utils + ] + ''; + description = '' + Packages installed alongside Hyprland. Hyprlock and Hypridle are + enabled separately so their NixOS integration, including PAM, is + configured as well. + ''; + }; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf cfg.gnome.enable { + services.desktopManager.gnome.enable = true; + }) + + (lib.mkIf cfg.xfce.enable { + services.xserver = { + enable = true; + desktopManager.xfce.enable = true; + }; + }) + + (lib.mkIf cfg.sway.enable { + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + extraPackages = cfg.sway.extraPackages; + }; + }) + + (lib.mkIf cfg.hyprland.enable { + programs = { + hyprland.enable = true; + hyprlock.enable = lib.mkDefault true; + }; + + environment.systemPackages = cfg.hyprland.extraPackages; + }) + + (lib.mkIf (resolvedDisplayManager == "gdm") { + services.displayManager.gdm.enable = true; + }) + + (lib.mkIf (resolvedDisplayManager == "lightdm") { + services.xserver = { + enable = true; + displayManager.lightdm.enable = true; + }; + }) + + (lib.mkIf (resolvedDisplayManager == "ly") { + services.displayManager.ly.enable = true; + }) + ]; +}