turn string option into the many sub options

This enables me to enable multiple desktop environments at the same
time.
This commit is contained in:
Osman Faruk Bayram 2025-11-23 11:49:34 +03:00
parent 17e0ff33a0
commit f8b6dd5e7c
17 changed files with 30 additions and 29 deletions

View file

@ -13,7 +13,6 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "none"; # fuckass darwin defaults
machineType = "laptop"; machineType = "laptop";
programs.neovim.enable = true; programs.neovim.enable = true;
}; };

View file

@ -5,7 +5,6 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "none";
machineType = "server"; machineType = "server";
users = [ "osbm" ]; users = [ "osbm" ];
services = { services = {

View file

@ -11,7 +11,7 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "gnome"; desktopEnvironment.gnome.enable = true;
machineType = "mobile"; machineType = "mobile";
hardware.systemd-boot.enable = false; # Mobile devices use different bootloader hardware.systemd-boot.enable = false; # Mobile devices use different bootloader
programs.graphical.enable = false; programs.graphical.enable = false;

View file

@ -11,7 +11,6 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "none";
fonts.enable = false; fonts.enable = false;
services.tailscale.enable = true; services.tailscale.enable = true;
hardware.systemd-boot.enable = false; # SD card uses extlinux hardware.systemd-boot.enable = false; # SD card uses extlinux

View file

@ -5,7 +5,6 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "none";
machineType = "server"; machineType = "server";
hardware.systemd-boot.enable = false; # Uses extlinux bootloader hardware.systemd-boot.enable = false; # Uses extlinux bootloader
}; };

View file

@ -12,7 +12,6 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "none";
machineType = "server"; machineType = "server";
hardware.systemd-boot.enable = false; # Raspberry Pi uses init-script bootloader hardware.systemd-boot.enable = false; # Raspberry Pi uses init-script bootloader
services = { services = {

View file

@ -5,7 +5,7 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "plasma"; desktopEnvironment.plasma.enable = true;
machineType = "laptop"; machineType = "laptop";
emulation.aarch64.enable = true; emulation.aarch64.enable = true;
hardware.sound.enable = true; hardware.sound.enable = true;

View file

@ -4,7 +4,6 @@
../../../modules/nixos ../../../modules/nixos
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "none";
machineType = "server"; machineType = "server";
services = { services = {
hydra.enable = true; hydra.enable = true;

View file

@ -5,7 +5,7 @@
]; ];
osbmModules = { osbmModules = {
desktopEnvironment = "plasma"; desktopEnvironment.plasma.enable = true;
machineType = "desktop"; machineType = "desktop";
programs = { programs = {
adbFastboot.enable = true; adbFastboot.enable = true;

View file

@ -6,7 +6,7 @@
}: }:
{ {
config = lib.mkMerge [ 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 # Set enableAlacritty to true by default when there's a desktop environment
programs.alacritty.enable = lib.mkDefault true; programs.alacritty.enable = lib.mkDefault true;
}) })

View file

@ -7,7 +7,7 @@
{ {
config = lib.mkMerge [ config = lib.mkMerge [
# Auto-enable Firefox if system has a desktop environment # 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 # Set enableFirefox to true by default when there's a desktop environment
programs.firefox.enable = lib.mkDefault true; programs.firefox.enable = lib.mkDefault true;
}) })

View file

@ -1,7 +1,7 @@
{ lib, nixosConfig, ... }: { lib, nixosConfig, ... }:
{ {
config = lib.mkMerge [ 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 # Set enableGhostty to true by default when there's a desktop environment
programs.ghostty.enable = lib.mkDefault true; programs.ghostty.enable = lib.mkDefault true;
}) })

View file

@ -1,7 +1,7 @@
{ lib, nixosConfig, ... }: { lib, nixosConfig, ... }:
{ {
config = lib.mkMerge [ 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; programs.mpv.enable = lib.mkDefault true;
}) })

View file

@ -6,7 +6,7 @@
}: }:
{ {
config = lib.mkMerge [ 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; programs.wezterm.enable = lib.mkDefault true;
}) })

View file

@ -2,14 +2,21 @@
{ {
options.osbmModules = { options.osbmModules = {
# Desktop Environment # Desktop Environment
desktopEnvironment = lib.mkOption { desktopEnvironment = {
type = lib.types.enum [ plasma.enable = lib.mkEnableOption "plasma";
"plasma" gnome.enable = lib.mkEnableOption "gnome";
"gnome" niri.enable = lib.mkEnableOption "niri";
"none" # none is true if all above are false, just for easier checks
]; none = lib.mkOption {
default = "none"; type = lib.types.bool;
description = "Which desktop environment to use"; 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 # Machine Type
@ -83,7 +90,7 @@
graphical = { graphical = {
enable = lib.mkOption { enable = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = config.osbmModules.desktopEnvironment != "none"; default = !config.osbmModules.desktopEnvironment.none;
description = "Enable graphical applications"; description = "Enable graphical applications";
}; };
}; };
@ -165,7 +172,7 @@
bluetooth = { bluetooth = {
enable = lib.mkOption { enable = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = config.osbmModules.desktopEnvironment != "none"; default = !config.osbmModules.desktopEnvironment.none;
description = "Enable Bluetooth support"; description = "Enable Bluetooth support";
}; };
}; };
@ -393,7 +400,7 @@
fonts = { fonts = {
enable = lib.mkOption { enable = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = config.osbmModules.desktopEnvironment != "none"; default = !config.osbmModules.desktopEnvironment.none;
description = "Enable custom fonts"; description = "Enable custom fonts";
}; };
}; };

View file

@ -10,7 +10,7 @@ in
{ {
config = lib.mkMerge [ config = lib.mkMerge [
# Plasma Desktop Environment # Plasma Desktop Environment
(lib.mkIf (cfg.desktopEnvironment == "plasma") { (lib.mkIf cfg.desktopEnvironment.plasma.enable {
services = { services = {
xserver.enable = true; xserver.enable = true;
displayManager.sddm.enable = true; displayManager.sddm.enable = true;
@ -40,7 +40,7 @@ in
}) })
# GNOME Desktop Environment # GNOME Desktop Environment
(lib.mkIf (cfg.desktopEnvironment == "gnome") { (lib.mkIf cfg.desktopEnvironment.gnome.enable {
# Enable GNOME Desktop Environment # Enable GNOME Desktop Environment
services = { services = {
@ -85,7 +85,7 @@ in
}) })
# Common settings for any desktop environment # Common settings for any desktop environment
(lib.mkIf (cfg.desktopEnvironment != "none") { (lib.mkIf (!cfg.desktopEnvironment.none) {
# Enable X11 keymap # Enable X11 keymap
services.xserver.xkb = { services.xserver.xkb = {
layout = lib.mkDefault "us"; layout = lib.mkDefault "us";

View file

@ -27,7 +27,7 @@
inputMethod = { inputMethod = {
type = "fcitx5"; type = "fcitx5";
enable = config.osbmModules.desktopEnvironment != "none"; enable = !config.osbmModules.desktopEnvironment.none;
fcitx5.addons = with pkgs; [ fcitx5.addons = with pkgs; [
fcitx5-mozc fcitx5-mozc
fcitx5-gtk fcitx5-gtk