From 3cf6b93eb5c4f58dd7efb68ae47715f90dcfc299 Mon Sep 17 00:00:00 2001 From: NullBite Date: Mon, 22 Jul 2024 02:25:41 -0400 Subject: [PATCH] system: add mutually exclusive session option This option makes desktop-specific specialisations easier to configure --- hosts/nullbox/configuration.nix | 6 ++---- hosts/slab/configuration.nix | 6 ++---- system/sessions/default.nix | 27 ++++++++++++++++++++++++--- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/hosts/nullbox/configuration.nix b/hosts/nullbox/configuration.nix index 6ffabc6..46d8d3b 100644 --- a/hosts/nullbox/configuration.nix +++ b/hosts/nullbox/configuration.nix @@ -42,8 +42,7 @@ specialisation.plasma.configuration = { system.nixos.tags = [ "Plasma" ]; nixfiles = { - sessions.hyprland.enable = false; - sessions.plasma.enable = true; + session = "plasma"; }; }; @@ -65,8 +64,7 @@ }; programs.unbound.enable = true; common.remoteAccess.enable = true; - sessions.plasma.enable = lib.mkDefault true; - sessions.hyprland.enable = lib.mkDefault false; + session = lib.mkDefault "hyprland"; hardware.nvidia.modesetting.enable = true; packageSets.gaming.enable = true; }; diff --git a/hosts/slab/configuration.nix b/hosts/slab/configuration.nix index 0610bed..194cf85 100644 --- a/hosts/slab/configuration.nix +++ b/hosts/slab/configuration.nix @@ -36,8 +36,7 @@ specialisation.plasma.configuration = { system.nixos.tags = [ "Plasma" ]; nixfiles = { - sessions.hyprland.enable = false; - sessions.plasma.enable = true; + session = "plasma"; }; services.displayManager.sddm.enable = lib.mkForce true; services.xserver.displayManager.startx.enable = lib.mkForce false; @@ -56,8 +55,7 @@ gaming.enable = true; fun.enable = true; }; - sessions.hyprland.enable = lib.mkDefault true; - sessions.plasma.enable = lib.mkDefault false; + session = lib.mkDefault "hyprland"; programs = { adb.enable = true; unbound.enable = false; diff --git a/system/sessions/default.nix b/system/sessions/default.nix index d8474e3..217f300 100644 --- a/system/sessions/default.nix +++ b/system/sessions/default.nix @@ -1,5 +1,26 @@ -{...}: -{ imports = [ +{ config, lib, options, ... }: +let + inherit (lib) types; + cfg = config.nixfiles.session; +in +{ + imports = [ ./hyprland.nix ./plasma.nix -];} + ]; + + options.nixfiles.session = lib.mkOption { + description = '' + Desktop session to enable. This option serves as a convenient way to + enable sessions in a mutually exclusive manner, e.g., for use with + specialisations. + ''; + type = with types; nullOr (enum (builtins.attrNames options.nixfiles.sessions)); + default = null; + example = "hyprland"; + }; + + config = lib.mkIf (!(builtins.isNull cfg)) { + nixfiles.sessions.${cfg}.enable = true; + }; +}