Unverified Commit 7549efbb authored by K900's avatar K900 Committed by GitHub
Browse files

nixos/display-managers: move "generic" DM unit to its own option set (#480050)

parents 654d705e e49259f4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -611,6 +611,7 @@
  ./services/display-managers/default.nix
  ./services/display-managers/dms-greeter.nix
  ./services/display-managers/gdm.nix
  ./services/display-managers/generic.nix
  ./services/display-managers/greetd.nix
  ./services/display-managers/lemurs.nix
  ./services/display-managers/ly.nix
+1 −65
Original line number Diff line number Diff line
@@ -40,26 +40,7 @@ in
{
  options = {
    services.displayManager = {
      enable = lib.mkEnableOption "systemd's display-manager service";

      preStart = lib.mkOption {
        type = lib.types.lines;
        default = "";
        example = "rm -f /var/log/my-display-manager.log";
        description = "Script executed before the display manager is started.";
      };

      execCmd = lib.mkOption {
        type = lib.types.str;
        example = lib.literalExpression ''"''${pkgs.lightdm}/bin/lightdm"'';
        description = "Command to start the display manager.";
      };

      environment = lib.mkOption {
        type = with lib.types; attrsOf unspecified;
        default = { };
        description = "Additional environment variables needed by the display manager.";
      };
      enable = lib.mkEnableOption "shared display manager integration";

      hiddenUsers = lib.mkOption {
        type = with lib.types; listOf str;
@@ -250,50 +231,5 @@ in
        else
          null;
    };

    # so that the service won't be enabled when only startx is used
    systemd.services.display-manager.enable =
      let
        dmConf = config.services.xserver.displayManager;
        noDmUsed =
          !(
            cfg.gdm.enable
            || cfg.sddm.enable
            || dmConf.xpra.enable
            || dmConf.lightdm.enable
            || cfg.ly.enable
            || cfg.lemurs.enable
          );
      in
      lib.mkIf noDmUsed (lib.mkDefault false);

    systemd.services.display-manager = {
      description = "Display Manager";
      after = [
        "acpid.service"
        "systemd-logind.service"
        "systemd-user-sessions.service"
        "autovt@tty1.service"
      ];
      conflicts = [
        "autovt@tty1.service"
      ];
      restartIfChanged = false;

      environment = cfg.environment;

      preStart = cfg.preStart;
      script = lib.mkIf (config.systemd.services.display-manager.enable == true) cfg.execCmd;

      # Stop restarting if the display manager stops (crashes) 2 times
      # in one minute. Starting X typically takes 3-4s.
      startLimitIntervalSec = 30;
      startLimitBurst = 3;
      serviceConfig = {
        Restart = "always";
        RestartSec = "200ms";
        SyslogIdentifier = "display-manager";
      };
    };
  };
}
+23 −20
Original line number Diff line number Diff line
@@ -217,6 +217,8 @@ in
      # Enable desktop session data
      enable = true;

      generic = {
        enable = true;
        environment = {
          GDM_X_SERVER_EXTRA_ARGS = toString (lib.filter (arg: arg != "-terminate") xdmcfg.xserverArgs);
          XDG_DATA_DIRS = lib.makeSearchPath "share" [
@@ -239,6 +241,7 @@ in
          ${setSessionScript}/bin/set-session ${config.services.displayManager.sessionData.autologinSession}
        '';
      };
    };

    systemd.tmpfiles.rules = [
      "d /run/gdm/.config 0711 gdm gdm"
+83 −0
Original line number Diff line number Diff line
{ config, lib, ... }:
let
  cfg = config.services.displayManager.generic;
in
{
  imports = [
    (lib.mkRenamedOptionModule
      [ "services" "displayManager" "preStart" ]
      [ "services" "displayManager" "generic" "preStart" ]
    )
    (lib.mkRenamedOptionModule
      [ "services" "displayManager" "execCmd" ]
      [ "services" "displayManager" "generic" "execCmd" ]
    )
    (lib.mkRenamedOptionModule
      [ "services" "displayManager" "environment" ]
      [ "services" "displayManager" "generic" "environment" ]
    )
  ];

  options = {
    services.displayManager.generic = {
      enable = lib.mkEnableOption "generic display manager integration - deprecated";

      preStart = lib.mkOption {
        type = lib.types.lines;
        default = "";
        example = "rm -f /var/log/my-display-manager.log";
        description = "Script executed before the display manager is started.";
      };

      execCmd = lib.mkOption {
        type = lib.types.nullOr lib.types.str;
        default = null;
        example = lib.literalExpression ''"''${pkgs.lightdm}/bin/lightdm"'';
        description = "Command to start the display manager.";
      };

      environment = lib.mkOption {
        type = with lib.types; attrsOf unspecified;
        default = { };
        description = "Additional environment variables needed by the display manager.";
      };
    };
  };
  config = lib.mkIf (cfg.enable || cfg.execCmd != null) {
    warnings = [
      (lib.mkIf (!cfg.enable) ''
        Enabling display-manager.service implicitly due to `services.displayManager.generic.execCmd` being set; this will be removed eventually.
        Please set `services.displayManager.generic.enable` explicitly, or switch your display manager to use upstream systemd units (preferred).
      '')
    ];

    systemd.services.display-manager = {
      description = "Display Manager";
      after = [
        "acpid.service"
        "systemd-logind.service"
        "systemd-user-sessions.service"
        "autovt@tty1.service"
      ];
      conflicts = [
        "autovt@tty1.service"
      ];
      restartIfChanged = false;

      environment = cfg.environment;

      preStart = cfg.preStart;
      script = cfg.execCmd;

      # Stop restarting if the display manager stops (crashes) 2 times
      # in one minute. Starting X typically takes 3-4s.
      startLimitIntervalSec = 30;
      startLimitBurst = 3;
      serviceConfig = {
        Restart = "always";
        RestartSec = "200ms";
        SyslogIdentifier = "display-manager";
      };
    };
  };
}
+4 −1
Original line number Diff line number Diff line
@@ -75,8 +75,11 @@ in
        display = null;
      };
      displayManager = {
        enable = true;
        generic = {
          enable = true;
          execCmd = "exec ${lib.getExe cfg.package} --config ${settingsFormat.generate "config.toml" cfg.settings}";
        };
        # set default settings
        lemurs.settings =
          let
Loading