diff --git a/nixos/modules/services/display-managers/gdm.nix b/nixos/modules/services/display-managers/gdm.nix index 38b9f919bab2..8013fbde9031 100644 --- a/nixos/modules/services/display-managers/gdm.nix +++ b/nixos/modules/services/display-managers/gdm.nix @@ -44,6 +44,20 @@ let defaultSessionName = config.services.displayManager.defaultSession; setSessionScript = pkgs.callPackage ../x11/display-managers/account-service-util.nix { }; + + greeterUsers = lib.genAttrs' [ null 1 2 3 4 ] ( + i: + let + # adding 1 to create `gdm-greeter{-2,-3,-4,-5}` + suffix = lib.optionalString (i != null) "-${toString (i + 1)}"; + in + lib.nameValuePair "gdm-greeter${suffix}" { + isSystemUser = true; + uid = 60578 + (if i == null then 0 else i); + group = "gdm"; + home = "/run/gdm/home/gdm-greeter${suffix}"; + } + ); in { @@ -196,24 +210,8 @@ in group = "gdm"; description = "GDM user"; }; - - gdm-greeter = { - isSystemUser = true; - uid = 60578; - group = "gdm"; - home = "/run/gdm"; - }; } - - (lib.genAttrs' [ 1 2 3 4 ] ( - i: - lib.nameValuePair "gdm-greeter-${toString i}" { - isSystemUser = true; - uid = 60578 + i; - group = "gdm"; - home = "/run/gdm-${toString i}"; - } - )) + greeterUsers ]; users.groups.gdm.gid = config.ids.gids.gdm; @@ -255,17 +253,20 @@ in }; }; - systemd.tmpfiles.rules = [ - "d /run/gdm/.config 0711 gdm gdm" - ] - ++ lib.optionals config.services.pulseaudio.enable [ - "d /run/gdm/.config/pulse 0711 gdm gdm" - "L+ /run/gdm/.config/pulse/${pulseConfig.name} - - - - ${pulseConfig}" - ] - ++ lib.optionals config.services.gnome.gnome-initial-setup.enable [ - # Create stamp file for gnome-initial-setup to prevent it starting in GDM. - "f /run/gdm/.config/gnome-initial-setup-done 0711 gdm gdm - yes" - ]; + systemd.tmpfiles.rules = + lib.optionals config.services.pulseaudio.enable ( + lib.concatLists ( + lib.mapAttrsToList (name: user: [ + "d ${user.home}/.config 0711 ${name} gdm" + "d ${user.home}/.config/pulse 0711 ${name} gdm" + "L+ ${user.home}/.config/pulse/${pulseConfig.name} - - - - ${pulseConfig}" + ]) greeterUsers + ) + ) + ++ lib.optionals config.services.gnome.gnome-initial-setup.enable [ + # Create stamp file for gnome-initial-setup to prevent it starting in GDM. + "f /run/gdm/gdm.ran-initial-setup 0711 gdm gdm - yes" + ]; # Otherwise GDM will not be able to start correctly and display Wayland sessions systemd.packages = [