nixpkgs/modules/services/x11/display-managers/slim.nix
Eelco Dolstra 490ce3a230 PAM: Rename ownDevices to startSession
Logind sessions are more generally useful than for device ownership.
For instances, ssh logins can be put in their own session (and thus
their own cgroup).
2012-08-17 13:48:22 -04:00

114 lines
2.8 KiB
Nix

{ config, pkgs, ... }:
with pkgs.lib;
let
dmcfg = config.services.xserver.displayManager;
cfg = dmcfg.slim;
slimConfig = pkgs.writeText "slim.cfg"
''
xauth_path ${dmcfg.xauthBin}
default_xserver ${dmcfg.xserverBin}
xserver_arguments ${dmcfg.xserverArgs}
sessions ${pkgs.lib.concatStringsSep "," (dmcfg.session.names ++ ["custom"])}
login_cmd exec ${pkgs.stdenv.shell} ${dmcfg.session.script} "%session"
halt_cmd ${config.system.build.systemd}/sbin/shutdown -h now
reboot_cmd ${config.system.build.systemd}/sbin/shutdown -r now
${optionalString (cfg.defaultUser != "") ("default_user " + cfg.defaultUser)}
${optionalString cfg.autoLogin "auto_login yes"}
'';
# Unpack the SLiM theme, or use the default.
slimThemesDir =
let
unpackedTheme = pkgs.stdenv.mkDerivation {
name = "slim-theme";
buildCommand = ''
ensureDir $out
cd $out
unpackFile ${cfg.theme}
ln -s * default
'';
};
in if cfg.theme == null then "${pkgs.slim}/share/slim/themes" else unpackedTheme;
in
{
###### interface
options = {
services.xserver.displayManager.slim = {
enable = mkOption {
default = true;
description = ''
Whether to enable SLiM as the display manager.
'';
};
theme = mkOption {
default = null;
example = pkgs.fetchurl {
url = http://download.berlios.de/slim/slim-wave.tar.gz;
sha256 = "0ndr419i5myzcylvxb89m9grl2xyq6fbnyc3lkd711mzlmnnfxdy";
};
description = ''
The theme for the SLiM login manager. If not specified, SLiM's
default theme is used. See <link
xlink:href='http://slim.berlios.de/themes01.php'/> for a
collection of themes.
'';
};
defaultUser = mkOption {
default = "";
example = "login";
description = ''
The default user to load. If you put a username here you
get it automatically loaded into the username field, and
the focus is placed on the password.
'';
};
autoLogin = mkOption {
default = false;
example = true;
description = ''
Automatically log in as the default user.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
services.xserver.displayManager.job =
{ preStart =
''
rm -f /var/log/slim.log
'';
environment =
{ SLIM_CFGFILE = slimConfig;
SLIM_THEMESDIR = slimThemesDir;
};
execCmd = "exec ${pkgs.slim}/bin/slim";
};
# Allow null passwords so that the user can login as root on the
# installation CD.
security.pam.services = [ { name = "slim"; allowNullPassword = true; startSession = true; } ];
};
}