1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 dmcfg = config.services.xserver.displayManager;
8 ldmcfg = dmcfg.lightdm;
9 cfg = ldmcfg.greeters.gtk;
10
11 inherit (pkgs) stdenv lightdm writeScript writeText;
12
13 theme = cfg.theme.package;
14 icons = cfg.iconTheme.package;
15
16 # The default greeter provided with this expression is the GTK greeter.
17 # Again, we need a few things in the environment for the greeter to run with
18 # fonts/icons.
19 wrappedGtkGreeter = stdenv.mkDerivation {
20 name = "lightdm-gtk-greeter";
21 buildInputs = [ pkgs.makeWrapper ];
22
23 buildCommand = ''
24 # This wrapper ensures that we actually get themes
25 makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \
26 $out/greeter \
27 --prefix PATH : "${pkgs.glibc.bin}/bin" \
28 --set GDK_PIXBUF_MODULE_FILE "${pkgs.gdk_pixbuf.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
29 --set GTK_PATH "${theme}:${pkgs.gtk3.out}" \
30 --set GTK_EXE_PREFIX "${theme}" \
31 --set GTK_DATA_PREFIX "${theme}" \
32 --set XDG_DATA_DIRS "${theme}/share:${icons}/share" \
33 --set XDG_CONFIG_HOME "${theme}/share"
34
35 cat - > $out/lightdm-gtk-greeter.desktop << EOF
36 [Desktop Entry]
37 Name=LightDM Greeter
38 Comment=This runs the LightDM Greeter
39 Exec=$out/greeter
40 Type=Application
41 EOF
42 '';
43 };
44
45 gtkGreeterConf = writeText "lightdm-gtk-greeter.conf"
46 ''
47 [greeter]
48 theme-name = ${cfg.theme.name}
49 icon-theme-name = ${cfg.iconTheme.name}
50 background = ${ldmcfg.background}
51 '';
52
53in
54{
55 options = {
56
57 services.xserver.displayManager.lightdm.greeters.gtk = {
58
59 enable = mkOption {
60 type = types.bool;
61 default = true;
62 description = ''
63 Whether to enable lightdm-gtk-greeter as the lightdm greeter.
64 '';
65 };
66
67 theme = {
68
69 package = mkOption {
70 type = types.package;
71 default = pkgs.gnome3.gnome_themes_standard;
72 defaultText = "pkgs.gnome3.gnome_themes_standard";
73 description = ''
74 The package path that contains the theme given in the name option.
75 '';
76 };
77
78 name = mkOption {
79 type = types.str;
80 default = "Adwaita";
81 description = ''
82 Name of the theme to use for the lightdm-gtk-greeter.
83 '';
84 };
85
86 };
87
88 iconTheme = {
89
90 package = mkOption {
91 type = types.package;
92 default = pkgs.gnome3.defaultIconTheme;
93 defaultText = "pkgs.gnome3.defaultIconTheme";
94 description = ''
95 The package path that contains the icon theme given in the name option.
96 '';
97 };
98
99 name = mkOption {
100 type = types.str;
101 default = "Adwaita";
102 description = ''
103 Name of the icon theme to use for the lightdm-gtk-greeter.
104 '';
105 };
106
107 };
108
109 };
110
111 };
112
113 config = mkIf (ldmcfg.enable && cfg.enable) {
114
115 services.xserver.displayManager.lightdm.greeter = mkDefault {
116 package = wrappedGtkGreeter;
117 name = "lightdm-gtk-greeter";
118 };
119
120 environment.etc."lightdm/lightdm-gtk-greeter.conf".source = gtkGreeterConf;
121
122 };
123}