From f8b6dd5e7c65f80e0a3b767c436098a3d9ecf54c Mon Sep 17 00:00:00 2001 From: osbm Date: Sun, 23 Nov 2025 11:49:34 +0300 Subject: [PATCH] turn string option into the many sub options This enables me to enable multiple desktop environments at the same time. --- .../darwinHosts/prometheus/configuration.nix | 1 - hosts/nixos/apollo/configuration.nix | 1 - hosts/nixos/artemis/configuration.nix | 2 +- hosts/nixos/harmonica-sd/configuration.nix | 1 - hosts/nixos/harmonica/configuration.nix | 1 - hosts/nixos/pochita/configuration.nix | 1 - hosts/nixos/tartarus/configuration.nix | 2 +- hosts/nixos/wallfacer/configuration.nix | 1 - hosts/nixos/ymir/configuration.nix | 2 +- modules/home-manager/programs/alacritty.nix | 2 +- modules/home-manager/programs/firefox.nix | 2 +- modules/home-manager/programs/ghostty.nix | 2 +- modules/home-manager/programs/mpv.nix | 2 +- modules/home-manager/programs/wezterm.nix | 2 +- modules/nixos/options.nix | 29 ++++++++++++------- modules/nixos/system/desktop-environment.nix | 6 ++-- modules/nixos/system/i18n.nix | 2 +- 17 files changed, 30 insertions(+), 29 deletions(-) diff --git a/hosts/darwinHosts/prometheus/configuration.nix b/hosts/darwinHosts/prometheus/configuration.nix index 9b183a9..680e5b1 100644 --- a/hosts/darwinHosts/prometheus/configuration.nix +++ b/hosts/darwinHosts/prometheus/configuration.nix @@ -13,7 +13,6 @@ ]; osbmModules = { - desktopEnvironment = "none"; # fuckass darwin defaults machineType = "laptop"; programs.neovim.enable = true; }; diff --git a/hosts/nixos/apollo/configuration.nix b/hosts/nixos/apollo/configuration.nix index 09c9b1b..6977a0b 100644 --- a/hosts/nixos/apollo/configuration.nix +++ b/hosts/nixos/apollo/configuration.nix @@ -5,7 +5,6 @@ ]; osbmModules = { - desktopEnvironment = "none"; machineType = "server"; users = [ "osbm" ]; services = { diff --git a/hosts/nixos/artemis/configuration.nix b/hosts/nixos/artemis/configuration.nix index 8261289..be03b9e 100644 --- a/hosts/nixos/artemis/configuration.nix +++ b/hosts/nixos/artemis/configuration.nix @@ -11,7 +11,7 @@ ]; osbmModules = { - desktopEnvironment = "gnome"; + desktopEnvironment.gnome.enable = true; machineType = "mobile"; hardware.systemd-boot.enable = false; # Mobile devices use different bootloader programs.graphical.enable = false; diff --git a/hosts/nixos/harmonica-sd/configuration.nix b/hosts/nixos/harmonica-sd/configuration.nix index e3a84f7..db65a33 100644 --- a/hosts/nixos/harmonica-sd/configuration.nix +++ b/hosts/nixos/harmonica-sd/configuration.nix @@ -11,7 +11,6 @@ ]; osbmModules = { - desktopEnvironment = "none"; fonts.enable = false; services.tailscale.enable = true; hardware.systemd-boot.enable = false; # SD card uses extlinux diff --git a/hosts/nixos/harmonica/configuration.nix b/hosts/nixos/harmonica/configuration.nix index 4bb24af..c4d855d 100644 --- a/hosts/nixos/harmonica/configuration.nix +++ b/hosts/nixos/harmonica/configuration.nix @@ -5,7 +5,6 @@ ]; osbmModules = { - desktopEnvironment = "none"; machineType = "server"; hardware.systemd-boot.enable = false; # Uses extlinux bootloader }; diff --git a/hosts/nixos/pochita/configuration.nix b/hosts/nixos/pochita/configuration.nix index 000c804..25ac796 100644 --- a/hosts/nixos/pochita/configuration.nix +++ b/hosts/nixos/pochita/configuration.nix @@ -12,7 +12,6 @@ ]; osbmModules = { - desktopEnvironment = "none"; machineType = "server"; hardware.systemd-boot.enable = false; # Raspberry Pi uses init-script bootloader services = { diff --git a/hosts/nixos/tartarus/configuration.nix b/hosts/nixos/tartarus/configuration.nix index c1f654d..f0eba85 100644 --- a/hosts/nixos/tartarus/configuration.nix +++ b/hosts/nixos/tartarus/configuration.nix @@ -5,7 +5,7 @@ ]; osbmModules = { - desktopEnvironment = "plasma"; + desktopEnvironment.plasma.enable = true; machineType = "laptop"; emulation.aarch64.enable = true; hardware.sound.enable = true; diff --git a/hosts/nixos/wallfacer/configuration.nix b/hosts/nixos/wallfacer/configuration.nix index f7a4912..f9c1487 100644 --- a/hosts/nixos/wallfacer/configuration.nix +++ b/hosts/nixos/wallfacer/configuration.nix @@ -4,7 +4,6 @@ ../../../modules/nixos ]; osbmModules = { - desktopEnvironment = "none"; machineType = "server"; services = { hydra.enable = true; diff --git a/hosts/nixos/ymir/configuration.nix b/hosts/nixos/ymir/configuration.nix index c261256..539f10c 100644 --- a/hosts/nixos/ymir/configuration.nix +++ b/hosts/nixos/ymir/configuration.nix @@ -5,7 +5,7 @@ ]; osbmModules = { - desktopEnvironment = "plasma"; + desktopEnvironment.plasma.enable = true; machineType = "desktop"; programs = { adbFastboot.enable = true; diff --git a/modules/home-manager/programs/alacritty.nix b/modules/home-manager/programs/alacritty.nix index 4a98495..6b72830 100644 --- a/modules/home-manager/programs/alacritty.nix +++ b/modules/home-manager/programs/alacritty.nix @@ -6,7 +6,7 @@ }: { config = lib.mkMerge [ - (lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") { + (lib.mkIf (nixosConfig != null && !nixosConfig.osbmModules.desktopEnvironment.none) { # Set enableAlacritty to true by default when there's a desktop environment programs.alacritty.enable = lib.mkDefault true; }) diff --git a/modules/home-manager/programs/firefox.nix b/modules/home-manager/programs/firefox.nix index 76f315c..2024842 100644 --- a/modules/home-manager/programs/firefox.nix +++ b/modules/home-manager/programs/firefox.nix @@ -7,7 +7,7 @@ { config = lib.mkMerge [ # Auto-enable Firefox if system has a desktop environment - (lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") { + (lib.mkIf (nixosConfig != null && !nixosConfig.osbmModules.desktopEnvironment.none) { # Set enableFirefox to true by default when there's a desktop environment programs.firefox.enable = lib.mkDefault true; }) diff --git a/modules/home-manager/programs/ghostty.nix b/modules/home-manager/programs/ghostty.nix index 6c50f2e..f40fbf9 100644 --- a/modules/home-manager/programs/ghostty.nix +++ b/modules/home-manager/programs/ghostty.nix @@ -1,7 +1,7 @@ { lib, nixosConfig, ... }: { config = lib.mkMerge [ - (lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") { + (lib.mkIf (nixosConfig != null && !nixosConfig.osbmModules.desktopEnvironment.none) { # Set enableGhostty to true by default when there's a desktop environment programs.ghostty.enable = lib.mkDefault true; }) diff --git a/modules/home-manager/programs/mpv.nix b/modules/home-manager/programs/mpv.nix index 0353ae2..e19abe5 100644 --- a/modules/home-manager/programs/mpv.nix +++ b/modules/home-manager/programs/mpv.nix @@ -1,7 +1,7 @@ { lib, nixosConfig, ... }: { config = lib.mkMerge [ - (lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") { + (lib.mkIf (nixosConfig != null && !nixosConfig.osbmModules.desktopEnvironment.none) { programs.mpv.enable = lib.mkDefault true; }) diff --git a/modules/home-manager/programs/wezterm.nix b/modules/home-manager/programs/wezterm.nix index 2282220..479613d 100644 --- a/modules/home-manager/programs/wezterm.nix +++ b/modules/home-manager/programs/wezterm.nix @@ -6,7 +6,7 @@ }: { config = lib.mkMerge [ - (lib.mkIf (nixosConfig != null && nixosConfig.osbmModules.desktopEnvironment != "none") { + (lib.mkIf (nixosConfig != null && !nixosConfig.osbmModules.desktopEnvironment.none) { programs.wezterm.enable = lib.mkDefault true; }) diff --git a/modules/nixos/options.nix b/modules/nixos/options.nix index 8f35738..5a8d68c 100644 --- a/modules/nixos/options.nix +++ b/modules/nixos/options.nix @@ -2,14 +2,21 @@ { options.osbmModules = { # Desktop Environment - desktopEnvironment = lib.mkOption { - type = lib.types.enum [ - "plasma" - "gnome" - "none" - ]; - default = "none"; - description = "Which desktop environment to use"; + desktopEnvironment = { + plasma.enable = lib.mkEnableOption "plasma"; + gnome.enable = lib.mkEnableOption "gnome"; + niri.enable = lib.mkEnableOption "niri"; + # none is true if all above are false, just for easier checks + none = lib.mkOption { + type = lib.types.bool; + default = + !( + config.osbmModules.desktopEnvironment.plasma.enable + || config.osbmModules.desktopEnvironment.gnome.enable + || config.osbmModules.desktopEnvironment.niri.enable + ); + description = "True if no desktop environment is enabled"; + }; }; # Machine Type @@ -83,7 +90,7 @@ graphical = { enable = lib.mkOption { type = lib.types.bool; - default = config.osbmModules.desktopEnvironment != "none"; + default = !config.osbmModules.desktopEnvironment.none; description = "Enable graphical applications"; }; }; @@ -165,7 +172,7 @@ bluetooth = { enable = lib.mkOption { type = lib.types.bool; - default = config.osbmModules.desktopEnvironment != "none"; + default = !config.osbmModules.desktopEnvironment.none; description = "Enable Bluetooth support"; }; }; @@ -393,7 +400,7 @@ fonts = { enable = lib.mkOption { type = lib.types.bool; - default = config.osbmModules.desktopEnvironment != "none"; + default = !config.osbmModules.desktopEnvironment.none; description = "Enable custom fonts"; }; }; diff --git a/modules/nixos/system/desktop-environment.nix b/modules/nixos/system/desktop-environment.nix index 9a5cd6d..885f011 100644 --- a/modules/nixos/system/desktop-environment.nix +++ b/modules/nixos/system/desktop-environment.nix @@ -10,7 +10,7 @@ in { config = lib.mkMerge [ # Plasma Desktop Environment - (lib.mkIf (cfg.desktopEnvironment == "plasma") { + (lib.mkIf cfg.desktopEnvironment.plasma.enable { services = { xserver.enable = true; displayManager.sddm.enable = true; @@ -40,7 +40,7 @@ in }) # GNOME Desktop Environment - (lib.mkIf (cfg.desktopEnvironment == "gnome") { + (lib.mkIf cfg.desktopEnvironment.gnome.enable { # Enable GNOME Desktop Environment services = { @@ -85,7 +85,7 @@ in }) # Common settings for any desktop environment - (lib.mkIf (cfg.desktopEnvironment != "none") { + (lib.mkIf (!cfg.desktopEnvironment.none) { # Enable X11 keymap services.xserver.xkb = { layout = lib.mkDefault "us"; diff --git a/modules/nixos/system/i18n.nix b/modules/nixos/system/i18n.nix index b053b2a..ce15f72 100644 --- a/modules/nixos/system/i18n.nix +++ b/modules/nixos/system/i18n.nix @@ -27,7 +27,7 @@ inputMethod = { type = "fcitx5"; - enable = config.osbmModules.desktopEnvironment != "none"; + enable = !config.osbmModules.desktopEnvironment.none; fcitx5.addons = with pkgs; [ fcitx5-mozc fcitx5-gtk