Failed to autologin to dwm (xserver) when upgrade from 24.11 to 25.05

Situation:
I use dwm as window manager, and use gdm as display manager to login. I set autologin. I also used services.kmscon.enable and boot.plymouth.enable, all works together fine in 24.11.
When I upgrade to 25.05, a lot of the settings conflict with each other and prevent me from login.
Two of my machine (nvidia and amd GPU) also have this problem.

This is the current working workaround config (but not the way I want it to be, services.xserver.displayManager.gdm.autoLogin.delay was not there before, and kmscon have to be disabled):

{ pkgs, lib, ... }:
{
  services.xserver.enable = true;

  # Field: services.xserver.desktopManager
  services.xserver.desktopManager.gnome.enable = true;
  services.xserver.desktopManager.xfce.enable = true;
  services.xserver.desktopManager.wallpaper.mode = "scale";
  services.xserver.desktopManager.runXdgAutostartIfNone = false;

  # Field: services.xserver.displayManager
  services.xserver.displayManager.gdm.enable = true;
  services.xserver.displayManager.gdm.autoLogin.delay = 7; # delay 7 seconds as workaround
  services.xserver.displayManager.sessionCommands = ''
    export _JAVA_AWT_WM_NONREPARENTING=1
  '';
  services.xserver.displayManager.session = [
    { manage = "window"; name = "mydwm";
      start = ''
        dwm &
        waitPID=$!
      '';
    }
  ];
  services.displayManager.defaultSession = "none+mydwm";
  services.displayManager.autoLogin.enable = true;
  services.displayManager.autoLogin.user = "user";

  # Field: services.desktopManager
  services.desktopManager.plasma6.enable = true;

  # Programs
  programs.slock.enable = true;
  programs.xss-lock.enable = true;
  programs.xss-lock.lockerCommand = "/run/wrappers/bin/slock";
  programs.ssh.askPassword = lib.mkForce "${pkgs.seahorse}/libexec/seahorse/ssh-askpass";
  services.unclutter-xfixes.enable = true;
  services.unclutter-xfixes.timeout = 5;

  # KMS related
  # services.kmscon.enable = true; # disable this as workaround
  boot.plymouth.enable = true;
  boot.plymouth.theme = "breeze";
}

Then problems:

  1. services.kmscon.enable = true; prevent the gdm login screen appear, so I have to disable it for it to work in all of my testing.
  2. With plymouth and kmscon both disabled, autologin failed with blinking screen of tty, making the text in tty very hard to see.
  3. For above problem 2, it can be solved by:
    a) Disable autologin.
    b) services.xserver.displayManager.gdm.autoLogin.delay = 1; (delay for 1 second)
  4. With plymouth enabled, autologin set, and with no autoLogin.delay, or set autoLogin.delay to only 1 second, it successfully login to dwm, but about half a second / a second later, it shows total black screen. In this scenario, ctrl+alt+F1-7 have no response. journalctl shows some application log with something like X connection broken, I think the x server broken here with unknown reason, but I can’t find the error message of it.
  5. With plymouth enabled, the only workaround for autologin is set services.xserver.displayManager.gdm.autoLogin.delay = 7; (to delay something longer than 7 seconds), then the system can autologin into dwm fine.

It is far from ideal, just a workaround.
I really don’t know how to debug this. The journalctl did not shows anything special.