<commit_before>{pkgs, config, ...}:

with pkgs.lib;

let

  dmcfg = config.services.xserver.displayManager;
  cfg = dmcfg.kdm;

  inherit (pkgs.kde4) kdebase_workspace;

  defaultConfig =
    ''
      [Shutdown]
      HaltCmd=${config.system.build.upstart}/sbin/halt
      RebootCmd=${config.system.build.upstart}/sbin/reboot
      ${optionalString (config.system.boot.loader.id == "grub") ''
        BootManager=Grub
      ''}

      [X-*-Core]
      Xrdb=${pkgs.xlibs.xrdb}/bin/xrdb
      SessionsDirs=${dmcfg.session.desktops}
      Session=${dmcfg.session.script}
      FailsafeClient=${pkgs.xterm}/bin/xterm

      [X-:*-Core]
      ServerCmd=${dmcfg.xserverBin} ${dmcfg.xserverArgs}
      # KDM calls `rm' somewhere to clean up some temporary directory.
      SystemPath=${pkgs.coreutils}/bin
      # The default timeout (15) is too short in a heavily loaded boot process.
      ServerTimeout=60
      # Needed to prevent the X server from dying on logout and not coming back:
      TerminateServer=true

      [X-*-Greeter]
      HiddenUsers=root,nixbld1,nixbld2,nixbld3,nixbld4,nixbld5,nixbld6,nixbld7,nixbld8,nixbld9,nixbld10
      PluginsLogin=${kdebase_workspace}/lib/kde4/kgreet_classic.so
      
      ${optionalString (cfg.enableXDMCP)
      ''
        [Xdmcp]
        Enable=true    
      ''}
    '';

  kdmrc = pkgs.stdenv.mkDerivation {
    name = "kdmrc";
    config = defaultConfig + cfg.extraConfig;
    buildCommand =
      ''
        echo "$config" > $out
        cat ${kdebase_workspace}/share/config/kdm/kdmrc >> $out
      '';
  };

in

{

  ###### interface
  
  options = {

    services.xserver.displayManager.kdm = {
    
      enable = mkOption {
        default = false;
        description = ''
          Whether to enable the KDE display manager.
        '';
      };

      enableXDMCP = mkOption {
        default = false;
        description = ''
          Whether to enable XDMCP, which allows remote logins.
        '';
      };

      extraConfig = mkOption {
        default = "";
        description = ''
          Options appended to <filename>kdmrc</filename>, the
          configuration file of KDM.
        '';
      };
      
    };

  };
  
  
  ###### implementation
  
  config = mkIf cfg.enable {

    services.xserver.displayManager.slim.enable = false;
  
    services.xserver.displayManager.job =
      { execCmd =
          (optionalString (config.system.boot.loader.id == "grub") "PATH=${config.system.build.grub}/sbin:$PATH ") +
          "exec ${kdebase_workspace}/bin/kdm -config ${kdmrc} -nodaemon";
        logsXsession = true;
      };

    security.pam.services = [ { name = "kde"; } ];
      
  };
  
}<commit_msg>* Set KDEDIRS in kdm, otherwise it can't find the wallpaper.<commit_after>{pkgs, config, ...}:

with pkgs.lib;

let

  dmcfg = config.services.xserver.displayManager;
  cfg = dmcfg.kdm;

  inherit (pkgs.kde4) kdebase_workspace;

  defaultConfig =
    ''
      [Shutdown]
      HaltCmd=${config.system.build.upstart}/sbin/halt
      RebootCmd=${config.system.build.upstart}/sbin/reboot
      ${optionalString (config.system.boot.loader.id == "grub") ''
        BootManager=Grub
      ''}

      [X-*-Core]
      Xrdb=${pkgs.xlibs.xrdb}/bin/xrdb
      SessionsDirs=${dmcfg.session.desktops}
      Session=${dmcfg.session.script}
      FailsafeClient=${pkgs.xterm}/bin/xterm

      [X-:*-Core]
      ServerCmd=${dmcfg.xserverBin} ${dmcfg.xserverArgs}
      # KDM calls `rm' somewhere to clean up some temporary directory.
      SystemPath=${pkgs.coreutils}/bin
      # The default timeout (15) is too short in a heavily loaded boot process.
      ServerTimeout=60
      # Needed to prevent the X server from dying on logout and not coming back:
      TerminateServer=true

      [X-*-Greeter]
      HiddenUsers=root,nixbld1,nixbld2,nixbld3,nixbld4,nixbld5,nixbld6,nixbld7,nixbld8,nixbld9,nixbld10
      PluginsLogin=${kdebase_workspace}/lib/kde4/kgreet_classic.so
      
      ${optionalString (cfg.enableXDMCP)
      ''
        [Xdmcp]
        Enable=true    
      ''}
    '';

  kdmrc = pkgs.stdenv.mkDerivation {
    name = "kdmrc";
    config = defaultConfig + cfg.extraConfig;
    buildCommand =
      ''
        echo "$config" > $out
        cat ${kdebase_workspace}/share/config/kdm/kdmrc >> $out
      '';
  };

in

{

  ###### interface
  
  options = {

    services.xserver.displayManager.kdm = {
    
      enable = mkOption {
        default = false;
        description = ''
          Whether to enable the KDE display manager.
        '';
      };

      enableXDMCP = mkOption {
        default = false;
        description = ''
          Whether to enable XDMCP, which allows remote logins.
        '';
      };

      extraConfig = mkOption {
        default = "";
        description = ''
          Options appended to <filename>kdmrc</filename>, the
          configuration file of KDM.
        '';
      };
      
    };

  };
  
  
  ###### implementation
  
  config = mkIf cfg.enable {

    services.xserver.displayManager.slim.enable = false;
  
    services.xserver.displayManager.job =
      { execCmd =
          (optionalString (config.system.boot.loader.id == "grub") "PATH=${config.system.build.grub}/sbin:$PATH ") +
          "KDEDIRS=${kdebase_workspace} exec ${kdebase_workspace}/bin/kdm -config ${kdmrc} -nodaemon";
        logsXsession = true;
      };

    security.pam.services = [ { name = "kde"; } ];
      
  };
  
}
{'fraction_non_alphanumeric': 0.13029076186970923, 'fraction_numerical': 0.006256900993743099, 'mean_word_length': 2.256440982624326, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6029374', 'n_tokens_mistral': 1863, 'n_tokens_neox': 1788, 'n_words': 317}