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}