summary refs log tree commit diff
path: root/nixos/modules/services/x11/display-managers/default.nix
diff options
context:
space:
mode:
authorTor Hedin Brønner <torhedinbronner@gmail.com>2019-01-12 10:31:37 +0100
committerJan Tojnar <jtojnar@gmail.com>2019-12-15 04:16:20 +0100
commitd25365c3c13f2fcc4e5574f01106c061c493e63e (patch)
treedda982f84e63f48a3f46b71eb17747d77e6809a4 /nixos/modules/services/x11/display-managers/default.nix
parent58e5290fcee60178973f4cc21011fbbf03497410 (diff)
downloadnixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.tar
nixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.tar.gz
nixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.tar.bz2
nixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.tar.lz
nixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.tar.xz
nixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.tar.zst
nixpkgs-d25365c3c13f2fcc4e5574f01106c061c493e63e.zip
nixos/displayManager: introduce defaultSession
There's two ways of providing graphical sessions now:
- `displayManager.session` via. `desktopManager.session` and
  `windowManager.session`
- `displayManager.sessionPackages`

`sessionPackages` doesn't make a distinction between desktop and window
managers. This makes selecting a session provided by a package using
`desktopManager.default` nonsensical.

We therefor introduce `displayManager.defaultSession` which can select a session
from either `displayManager.session` or `displayManager.sessionPackages`.

It will default to `desktopManager.default + windowManager.default` as before.
If the dm default is "none" it will select the first provided session from
`sessionPackages`.
Diffstat (limited to 'nixos/modules/services/x11/display-managers/default.nix')
-rw-r--r--nixos/modules/services/x11/display-managers/default.nix31
1 files changed, 31 insertions, 0 deletions
diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix
index f55bfbfd0c1..1a46e7c02e5 100644
--- a/nixos/modules/services/x11/display-managers/default.nix
+++ b/nixos/modules/services/x11/display-managers/default.nix
@@ -327,6 +327,37 @@ in
         };
       };
 
+      defaultSession = mkOption {
+        type = with types; str // {
+          description = "session name";
+          check = d: let
+            sessionNames = cfg.displayManager.session.names ++
+              (concatMap (p: p.providedSessions) cfg.displayManager.sessionPackages);
+          in
+            assertMsg (str.check d && (d == "none" || (elem d sessionNames))) ''
+                Default graphical session, '${d}', not found.
+                Valid names for 'services.xserver.displayManager.defaultSession' are:
+                  ${concatStringsSep "\n  " sessionNames}
+              '';
+        };
+        default = let
+            dmDefault = cfg.desktopManager.default;
+            wmDefault = cfg.windowManager.default;
+            defaultPackage =
+              if cfg.displayManager.sessionPackages != [] then
+                (head (head cfg.displayManager.sessionPackages).providedSessions)
+              else
+                null;
+            defaultDmWm = dmDefault + optionalString (wmDefault != "none") ("+" + wmDefault);
+          in
+            if defaultDmWm == "none" && isString defaultPackage then
+              defaultPackage
+            else
+              defaultDmWm;
+        example = "gnome";
+        description = "Default graphical session (only effective for LightDM and SDDM).";
+      };
+
       job = {
 
         preStart = mkOption {