nixos/desktopManager: Only trace if the default session isn't found

The default session might be found in `extraSessionFilePackages`, but it's not
viable to detect at evaluation time, so emit a warning.

In LightDM instead of checking `defaultSessionName` against
`displayManager.session.names` we rely on the assertions in
`desktopManager` and `windowMananger` and just check that there's at least one
default set. The second assertion could never actually be triggered.

Changed files
+7 -15
nixos
modules
services
x11
desktop-managers
display-managers
+6 -6
nixos/modules/services/x11/desktop-managers/default.nix
···
else if any (w: w.name == defaultDM) cfg.session.list then
defaultDM
else
-
throw ''
-
Default desktop manager (${defaultDM}) not found.
-
Probably you want to change
-
services.xserver.desktopManager.default = "${defaultDM}";
-
to one of
+
builtins.trace ''
+
Default desktop manager (${defaultDM}) not found at evaluation time.
+
These are the known valid session names:
${concatMapStringsSep "\n " (w: "services.xserver.desktopManager.default = \"${w.name}\";") cfg.session.list}
-
'';
+
It's also possible the default can be found in one of these packages:
+
${concatMapStringsSep "\n " (p: p.name) config.services.xserver.displayManager.extraSessionFilePackages}
+
'' defaultDM;
};
};
+1 -9
nixos/modules/services/x11/display-managers/lightdm.nix
···
LightDM auto-login requires services.xserver.displayManager.lightdm.autoLogin.user to be set
'';
}
-
{ assertion = cfg.autoLogin.enable -> elem defaultSessionName dmcfg.session.names;
+
{ assertion = cfg.autoLogin.enable -> dmDefault != "none" || wmDefault != "none";
message = ''
LightDM auto-login requires that services.xserver.desktopManager.default and
services.xserver.windowMananger.default are set to valid values. The current
default session: ${defaultSessionName} is not valid.
-
'';
-
}
-
{ assertion = hasDefaultUserSession -> elem defaultSessionName dmcfg.session.names;
-
message = ''
-
services.xserver.desktopManager.default and
-
services.xserver.windowMananger.default are not set to valid
-
values. The current default session: ${defaultSessionName}
-
is not valid.
'';
}
{ assertion = !cfg.greeter.enable -> (cfg.autoLogin.enable && cfg.autoLogin.timeout == 0);