wip/yesman
parent
447691836a
commit
2e088aa277
@ -0,0 +1,115 @@ |
||||
{ config, pkgs, ... }: |
||||
|
||||
with pkgs.lib; |
||||
|
||||
let |
||||
|
||||
dmcfg = config.services.xserver.displayManager; |
||||
cfg = dmcfg.lightdm; |
||||
|
||||
inherit (pkgs) stdenv lightdm writeScript writeText; |
||||
|
||||
# lightdm runs with clearenv(), but we need a few things in the enviornment for X to startup |
||||
xserverWrapper = writeScript "xserver-wrapper" |
||||
'' |
||||
#! /bin/sh |
||||
export XORG_DRI_DRIVER_PATH="${pkgs.mesa}/lib/dri" |
||||
export XKB_BINDIR="${pkgs.xorg.xkbcomp}/bin" |
||||
exec ${dmcfg.xserverBin} ${dmcfg.xserverArgs} |
||||
''; |
||||
|
||||
# The default greeter provided with this expression is the GTK greeter. |
||||
# Again, we need a few things in the environment for the greeter to run with |
||||
# fonts/icons. |
||||
wrappedGtkGreeter = stdenv.mkDerivation { |
||||
name = "lightdm-gtk-greeter"; |
||||
buildInputs = [ pkgs.makeWrapper ]; |
||||
|
||||
buildCommand = '' |
||||
ensureDir $out/gtk-3.0/ |
||||
|
||||
# This wrapper ensures that we actually get fonts |
||||
makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \ |
||||
$out/greeter \ |
||||
--set XDG_DATA_DIRS ${pkgs.gnome2.gnome_icon_theme}/share \ |
||||
--set FONTCONFIG_FILE /etc/fonts/fonts.conf \ |
||||
--set XDG_CONFIG_HOME $out/ |
||||
|
||||
# We need this to ensure that it actually tries to find icons from gnome-icon-theme |
||||
cat - > $out/gtk-3.0/settings.ini << EOF |
||||
[Settings] |
||||
gtk-icon-theme-name=gnome |
||||
EOF |
||||
|
||||
cat - > $out/lightdm-gtk-greeter.desktop << EOF |
||||
[Desktop Entry] |
||||
Name=LightDM Greeter |
||||
Comment=This runs the LightDM Greeter |
||||
Exec=$out/greeter |
||||
Type=Application |
||||
EOF |
||||
''; |
||||
}; |
||||
|
||||
lightdmConf = writeText "lightdm.conf" |
||||
'' |
||||
[LightDM] |
||||
greeter-user = ${config.users.extraUsers.lightdm.name} |
||||
xgreeters-directory = ${cfg.greeter.package} |
||||
xsessions-directory = ${dmcfg.session.desktops} |
||||
|
||||
[SeatDefaults] |
||||
xserver-command = ${xserverWrapper} |
||||
session-wrapper = ${dmcfg.session.script} |
||||
greeter-session = ${cfg.greeter.name} |
||||
''; |
||||
|
||||
in |
||||
{ |
||||
options = { |
||||
services.xserver.displayManager.lightdm = { |
||||
enable = mkOption { |
||||
default = false; |
||||
description = '' |
||||
Whether to enable lightdm as the display manager. |
||||
''; |
||||
}; |
||||
|
||||
greeter = mkOption { |
||||
description = '' |
||||
The LightDM greeter to login via. The package should be a directory |
||||
containing a .desktop file matching the name in the 'name' option. |
||||
''; |
||||
default = { |
||||
name = "lightdm-gtk-greeter"; |
||||
package = wrappedGtkGreeter; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
services.xserver.displayManager.job = { |
||||
logsXsession = true; |
||||
|
||||
# lightdm relaunches itself via just `lightdm`, so needs to be on the PATH |
||||
execCmd = '' |
||||
export PATH=${lightdm}/sbin:$PATH |
||||
${lightdm}/sbin/lightdm --log-dir=/var/log --run-dir=/run --config=${lightdmConf} |
||||
''; |
||||
}; |
||||
|
||||
services.dbus.enable = true; |
||||
services.dbus.packages = [ lightdm ]; |
||||
|
||||
security.pam.services = [ |
||||
{ name = "lightdm"; allowNullPassword = true; startSession = true; } |
||||
{ name = "lightdm-greeter"; allowNullPassword = true; startSession = true; } |
||||
]; |
||||
|
||||
users.extraUsers.lightdm = { |
||||
createHome = true; |
||||
home = "/var/lib/lightdm"; |
||||
}; |
||||
}; |
||||
} |
Loading…
Reference in new issue