{
  config,
  lib,
  ...
}: let
  cfg = config.desktop.dm;
in {
  options.desktop.dm = with lib; {
    name = mkOption {
      type = types.nullOr (types.enum ["sddm" "gdm"]);
      default = null;
      description = "The display manager to use.";
    };
    autologin = mkOption {
      type = types.nullOr types.str;
      default = null;
      description = "The autologin username or null for no autologin.";
    };
    wayland = mkOption {
      type = types.bool;
      default = false;
      description = "Enable wayland";
    };
  };

  imports = [
    ./gdm.nix
    ./sddm.nix
  ];

  config = {
    services.xserver.enable = true;
    services.xserver = {
      xkb.layout = "de";
      xkb.variant = "";
      xkb.options = "caps:ctrl_modifier";
    };
    services.displayManager.autoLogin.enable = cfg.autologin != null;
    services.displayManager.autoLogin.user = cfg.autologin;
  };
}
