2014-04-14 15:26:48 +01:00
|
|
|
{ config, lib, pkgs, ... }:
|
2009-01-25 15:49:08 +00:00
|
|
|
|
2014-04-14 15:26:48 +01:00
|
|
|
with lib;
|
2009-04-13 11:47:15 +01:00
|
|
|
|
2009-01-25 15:49:08 +00:00
|
|
|
let
|
|
|
|
|
2009-08-16 15:49:14 +01:00
|
|
|
dmcfg = config.services.xserver.displayManager;
|
2014-02-05 12:44:59 +00:00
|
|
|
|
2009-08-16 15:49:14 +01:00
|
|
|
cfg = dmcfg.slim;
|
2009-01-25 15:49:08 +00:00
|
|
|
|
2009-08-16 15:49:14 +01:00
|
|
|
slimConfig = pkgs.writeText "slim.cfg"
|
|
|
|
''
|
|
|
|
xauth_path ${dmcfg.xauthBin}
|
|
|
|
default_xserver ${dmcfg.xserverBin}
|
2016-12-04 13:48:47 +00:00
|
|
|
xserver_arguments ${toString dmcfg.xserverArgs}
|
2018-05-02 01:31:18 +01:00
|
|
|
sessiondir ${dmcfg.session.desktops}/share/xsessions
|
2018-07-24 15:52:49 +01:00
|
|
|
login_cmd exec ${pkgs.runtimeShell} ${dmcfg.session.wrapper} "%session"
|
2013-01-16 12:17:57 +00:00
|
|
|
halt_cmd ${config.systemd.package}/sbin/shutdown -h now
|
|
|
|
reboot_cmd ${config.systemd.package}/sbin/shutdown -r now
|
2017-04-23 18:02:50 +01:00
|
|
|
logfile /dev/stderr
|
2013-10-30 16:37:45 +00:00
|
|
|
${optionalString (cfg.defaultUser != null) ("default_user " + cfg.defaultUser)}
|
2015-11-18 22:49:39 +00:00
|
|
|
${optionalString (cfg.defaultUser != null) ("focus_password yes")}
|
2012-04-13 15:52:25 +01:00
|
|
|
${optionalString cfg.autoLogin "auto_login yes"}
|
2015-07-04 23:45:36 +01:00
|
|
|
${optionalString (cfg.consoleCmd != null) "console_cmd ${cfg.consoleCmd}"}
|
2014-08-31 02:01:55 +01:00
|
|
|
${cfg.extraConfig}
|
2009-08-16 15:49:14 +01:00
|
|
|
'';
|
2009-01-25 15:49:08 +00:00
|
|
|
|
|
|
|
# Unpack the SLiM theme, or use the default.
|
|
|
|
slimThemesDir =
|
|
|
|
let
|
2018-11-08 10:59:03 +00:00
|
|
|
unpackedTheme = pkgs.runCommand "slim-theme" { preferLocalBuild = true; }
|
2016-09-27 14:26:37 +01:00
|
|
|
''
|
2014-06-30 13:56:10 +01:00
|
|
|
mkdir -p $out
|
2009-01-25 15:49:08 +00:00
|
|
|
cd $out
|
|
|
|
unpackFile ${cfg.theme}
|
|
|
|
ln -s * default
|
|
|
|
'';
|
2014-03-30 18:32:10 +01:00
|
|
|
in if cfg.theme == null then "${pkgs.slim}/share/slim/themes" else unpackedTheme;
|
2009-01-25 15:49:08 +00:00
|
|
|
|
|
|
|
in
|
|
|
|
|
2009-08-16 15:49:14 +01:00
|
|
|
{
|
|
|
|
|
|
|
|
###### interface
|
|
|
|
|
|
|
|
options = {
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2009-08-16 15:49:14 +01:00
|
|
|
services.xserver.displayManager.slim = {
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2009-08-16 15:49:14 +01:00
|
|
|
enable = mkOption {
|
2013-10-30 16:37:45 +00:00
|
|
|
type = types.bool;
|
2018-08-20 13:25:25 +01:00
|
|
|
default = false;
|
2009-08-16 15:49:14 +01:00
|
|
|
description = ''
|
|
|
|
Whether to enable SLiM as the display manager.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
theme = mkOption {
|
2013-10-30 16:37:45 +00:00
|
|
|
type = types.nullOr types.path;
|
2015-07-17 15:01:07 +01:00
|
|
|
default = pkgs.fetchurl {
|
2015-11-18 22:30:24 +00:00
|
|
|
url = "https://github.com/jagajaga/nixos-slim-theme/archive/2.0.tar.gz";
|
|
|
|
sha256 = "0lldizhigx7bjhxkipii87y432hlf5wdvamnfxrryf9z7zkfypc8";
|
2015-07-17 15:01:07 +01:00
|
|
|
};
|
2016-01-17 18:34:55 +00:00
|
|
|
defaultText = ''pkgs.fetchurl {
|
|
|
|
url = "https://github.com/jagajaga/nixos-slim-theme/archive/2.0.tar.gz";
|
|
|
|
sha256 = "0lldizhigx7bjhxkipii87y432hlf5wdvamnfxrryf9z7zkfypc8";
|
|
|
|
}'';
|
2013-10-30 16:37:45 +00:00
|
|
|
example = literalExample ''
|
|
|
|
pkgs.fetchurl {
|
2014-05-18 13:27:11 +01:00
|
|
|
url = "mirror://sourceforge/slim.berlios/slim-wave.tar.gz";
|
2013-10-30 16:37:45 +00:00
|
|
|
sha256 = "0ndr419i5myzcylvxb89m9grl2xyq6fbnyc3lkd711mzlmnnfxdy";
|
|
|
|
}
|
|
|
|
'';
|
2009-08-16 15:49:14 +01:00
|
|
|
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
|
2014-05-18 12:25:43 +01:00
|
|
|
collection of themes. TODO: berlios shut down.
|
2009-08-16 15:49:14 +01:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
defaultUser = mkOption {
|
2013-10-30 16:37:45 +00:00
|
|
|
type = types.nullOr types.str;
|
|
|
|
default = null;
|
2009-08-16 15:49:14 +01:00
|
|
|
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.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2012-04-13 15:52:25 +01:00
|
|
|
autoLogin = mkOption {
|
2013-10-30 16:37:45 +00:00
|
|
|
type = types.bool;
|
2012-04-13 15:52:25 +01:00
|
|
|
default = false;
|
|
|
|
description = ''
|
|
|
|
Automatically log in as the default user.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2014-08-31 02:01:55 +01:00
|
|
|
extraConfig = mkOption {
|
|
|
|
type = types.lines;
|
|
|
|
default = "";
|
|
|
|
description = ''
|
|
|
|
Extra configuration options for SLiM login manager. Do not
|
|
|
|
add options that can be configured directly.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2015-07-04 23:45:36 +01:00
|
|
|
consoleCmd = mkOption {
|
|
|
|
type = types.nullOr types.str;
|
|
|
|
default = ''
|
|
|
|
${pkgs.xterm}/bin/xterm -C -fg white -bg black +sb -T "Console login" -e ${pkgs.shadow}/bin/login
|
|
|
|
'';
|
|
|
|
defaultText = ''
|
|
|
|
''${pkgs.xterm}/bin/xterm -C -fg white -bg black +sb -T "Console login" -e ''${pkgs.shadow}/bin/login
|
|
|
|
'';
|
|
|
|
description = ''
|
|
|
|
The command to run when "console" is given as the username.
|
|
|
|
'';
|
|
|
|
};
|
2009-08-16 15:49:14 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
###### implementation
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
|
|
|
|
services.xserver.displayManager.job =
|
2017-04-23 18:02:50 +01:00
|
|
|
{ environment =
|
2009-09-10 13:37:33 +01:00
|
|
|
{ SLIM_CFGFILE = slimConfig;
|
|
|
|
SLIM_THEMESDIR = slimThemesDir;
|
|
|
|
};
|
2014-03-30 18:32:10 +01:00
|
|
|
execCmd = "exec ${pkgs.slim}/bin/slim";
|
2009-01-25 15:49:08 +00:00
|
|
|
};
|
|
|
|
|
2014-03-30 18:32:10 +01:00
|
|
|
services.xserver.displayManager.sessionCommands =
|
|
|
|
''
|
|
|
|
# Export the config/themes for slimlock.
|
|
|
|
export SLIM_THEMESDIR=${slimThemesDir}
|
|
|
|
'';
|
|
|
|
|
2013-10-15 13:47:51 +01:00
|
|
|
# Allow null passwords so that the user can login as root on the
|
|
|
|
# installation CD.
|
|
|
|
security.pam.services.slim = { allowNullPassword = true; startSession = true; };
|
|
|
|
|
|
|
|
# Allow slimlock to work.
|
|
|
|
security.pam.services.slimlock = {};
|
2013-10-15 12:21:58 +01:00
|
|
|
|
2014-03-30 18:32:10 +01:00
|
|
|
environment.systemPackages = [ pkgs.slim ];
|
2009-08-16 15:49:14 +01:00
|
|
|
|
2009-01-25 15:49:08 +00:00
|
|
|
};
|
2009-08-16 15:49:14 +01:00
|
|
|
|
2009-01-25 15:49:08 +00:00
|
|
|
}
|