summary refs log tree commit diff
path: root/nixos/modules/services/x11/display-managers/lightdm.nix
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2019-12-10 15:10:30 +0100
committerJan Tojnar <jtojnar@gmail.com>2019-12-15 04:16:20 +0100
commit8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c (patch)
treeefe04b82b4f7fbc455b63b002b4b4721b50a2b05 /nixos/modules/services/x11/display-managers/lightdm.nix
parent53ef29c1380424e4e697725c4f3df30f9acacebc (diff)
downloadnixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.tar
nixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.tar.gz
nixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.tar.bz2
nixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.tar.lz
nixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.tar.xz
nixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.tar.zst
nixpkgs-8dc5ff7dcfd1c58c32004ffae25e6d31ed83d86c.zip
nixos/displayManager: deprecate separate options for default wm/dm
The upstream session files display managers use have no concept of sessions being composed from
desktop manager and window manager. To be able to set upstream session files as default
session, we need a single option. Having two different ways to set default session would be confusing,
though, so we decided to deprecate the old method.

We also created separate script for each session, just like we already had a separate desktop
file for each one, and started using displayManager.sessionPackages mechanism to make the
session handling more uniform.
Diffstat (limited to 'nixos/modules/services/x11/display-managers/lightdm.nix')
-rw-r--r--nixos/modules/services/x11/display-managers/lightdm.nix33
1 files changed, 21 insertions, 12 deletions
diff --git a/nixos/modules/services/x11/display-managers/lightdm.nix b/nixos/modules/services/x11/display-managers/lightdm.nix
index a8642fec271..f7face0adb7 100644
--- a/nixos/modules/services/x11/display-managers/lightdm.nix
+++ b/nixos/modules/services/x11/display-managers/lightdm.nix
@@ -8,9 +8,9 @@ let
   dmcfg = xcfg.displayManager;
   xEnv = config.systemd.services.display-manager.environment;
   cfg = dmcfg.lightdm;
+  sessionData = dmcfg.sessionData;
 
-  defaultSessionName = dmcfg.defaultSession;
-  hasDefaultUserSession = defaultSessionName != "none";
+  setSessionScript = pkgs.callPackage ./account-service-util.nix { };
 
   inherit (pkgs) lightdm writeScript writeText;
 
@@ -44,22 +44,19 @@ let
         greeter-user = ${config.users.users.lightdm.name}
         greeters-directory = ${cfg.greeter.package}
       ''}
-      sessions-directory = ${dmcfg.session.desktops}/share/xsessions:${dmcfg.session.desktops}/share/wayland-sessions
+      sessions-directory = ${dmcfg.sessionData.desktops}/share/xsessions:${dmcfg.sessionData.desktops}/share/wayland-sessions
       ${cfg.extraConfig}
 
       [Seat:*]
       xserver-command = ${xserverWrapper}
-      session-wrapper = ${dmcfg.session.wrapper}
+      session-wrapper = ${dmcfg.sessionData.wrapper}
       ${optionalString cfg.greeter.enable ''
         greeter-session = ${cfg.greeter.name}
       ''}
       ${optionalString cfg.autoLogin.enable ''
         autologin-user = ${cfg.autoLogin.user}
         autologin-user-timeout = ${toString cfg.autoLogin.timeout}
-        autologin-session = ${defaultSessionName}
-      ''}
-      ${optionalString hasDefaultUserSession ''
-        user-session=${defaultSessionName}
+        autologin-session = ${sessionData.autologinSession}
       ''}
       ${optionalString (dmcfg.setupCommands != "") ''
         display-setup-script=${pkgs.writeScript "lightdm-display-setup" ''
@@ -197,11 +194,9 @@ in
           LightDM auto-login requires services.xserver.displayManager.lightdm.autoLogin.user to be set
         '';
       }
-      { assertion = cfg.autoLogin.enable -> hasDefaultUserSession;
+      { assertion = cfg.autoLogin.enable -> sessionData.autologinSession != null;
         message = ''
-          LightDM auto-login requires that services.xserver.desktopManager.default and
-          services.xserver.windowManager.default are set to valid values. The current
-          default session: ${defaultSessionName} is not valid.
+          LightDM auto-login requires that services.xserver.displayManager.defaultSession is set.
         '';
       }
       { assertion = !cfg.greeter.enable -> (cfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
@@ -212,6 +207,20 @@ in
       }
     ];
 
+    # Set default session in session chooser to a specified values – basically ignore session history.
+    # Auto-login is already covered by a config value.
+    services.xserver.displayManager.job.preStart = optionalString (!cfg.autoLogin.enable && dmcfg.defaultSession != null) ''
+      ${setSessionScript}/bin/set-session ${dmcfg.defaultSession}
+    '';
+
+    # setSessionScript needs session-files in XDG_DATA_DIRS
+    services.xserver.displayManager.job.environment.XDG_DATA_DIRS = "${dmcfg.sessionData.desktops}/share/";
+
+    # setSessionScript wants AccountsService
+    systemd.services.display-manager.wants = [
+      "accounts-daemon.service"
+    ];
+
     # lightdm relaunches itself via just `lightdm`, so needs to be on the PATH
     services.xserver.displayManager.job.execCmd = ''
       export PATH=${lightdm}/sbin:$PATH