From 0a7ed9485dbce78ea0e9a4488a9b7880f9630da8 Mon Sep 17 00:00:00 2001 From: LuckShiba Date: Sun, 1 Mar 2026 21:22:49 -0300 Subject: [PATCH] dms-greeter: fix auto login --- .../services/display-managers/dms-greeter.nix | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/nixos/modules/services/display-managers/dms-greeter.nix b/nixos/modules/services/display-managers/dms-greeter.nix index d049daa9b24f..8ec9879323b9 100644 --- a/nixos/modules/services/display-managers/dms-greeter.nix +++ b/nixos/modules/services/display-managers/dms-greeter.nix @@ -22,6 +22,7 @@ let cfg = config.services.displayManager.dms-greeter; cfgDms = config.programs.dms-shell; cfgAutoLogin = config.services.displayManager.autoLogin; + sessionData = config.services.displayManager.sessionData; cacheDir = "/var/lib/dms-greeter"; @@ -52,6 +53,38 @@ let } ${optionalString cfg.logs.save "> ${cfg.logs.path} 2>&1"} ''; + autoLoginCommand = + pkgs.runCommand "dms-greeter-autologin-command" + { + nativeBuildInputs = [ + pkgs.gnugrep + pkgs.coreutils + ]; + } + '' + set -euo pipefail + + session="${sessionData.autologinSession}" + desktops="${sessionData.desktops}" + + for sessionFile in \ + "$desktops/share/wayland-sessions/$session.desktop" \ + "$desktops/share/xsessions/$session.desktop" + do + if [ -f "$sessionFile" ]; then + command="$(grep -m1 '^Exec=' "$sessionFile" | cut -d= -f2- || true)" + + if [ -n "$command" ]; then + printf '%s\n' "$command" > "$out" + exit 0 + fi + fi + done + + echo "dms-greeter autologin: could not resolve Exec for session '$session'" >&2 + exit 1 + ''; + jq = getExe pkgs.jq; configFilesFromHome = @@ -217,6 +250,13 @@ in programs.${cfg.compositor.name}.enable = true; ''; } + { + assertion = cfgAutoLogin.enable -> sessionData.autologinSession != null; + message = '' + dms-greeter auto-login requires services.displayManager.defaultSession to be set, + or at least one session in services.displayManager.sessionPackages. + ''; + } ]; services.greetd = { @@ -227,7 +267,8 @@ in command = getExe greeterScript; }; initial_session = mkIf (cfgAutoLogin.enable && (cfgAutoLogin.user != null)) { - inherit (cfgAutoLogin) user command; + inherit (cfgAutoLogin) user; + command = ''${getExe pkgs.bash} -lc "${pkgs.systemd}/bin/systemd-cat $(<${autoLoginCommand})"''; }; }; };