summary refs log tree commit diff
path: root/nixos/modules/services/x11/display-managers/lightdm-greeters/tiny.nix
blob: a9ba8e6280d6c419aac7a7e75ab0a1b48d02aaa6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{ config, lib, pkgs, ... }:

with lib;

let

  dmcfg = config.services.xserver.displayManager;
  ldmcfg = dmcfg.lightdm;
  cfg = ldmcfg.greeters.tiny;

in
{
  options = {

    services.xserver.displayManager.lightdm.greeters.tiny = {

      enable = mkOption {
        type = types.bool;
        default = false;
        description = ''
          Whether to enable lightdm-tiny-greeter as the lightdm greeter.

          Note that this greeter starts only the default X session.
          You can configure the default X session using
          <xref linkend="opt-services.xserver.displayManager.defaultSession"/>.
        '';
      };

      label = {
        user = mkOption {
          type = types.str;
          default = "Username";
          description = ''
            The string to represent the user_text label.
          '';
        };

        pass = mkOption {
          type = types.str;
          default = "Password";
          description = ''
            The string to represent the pass_text label.
          '';
        };
      };


      extraConfig = mkOption {
        type = types.lines;
        default = "";
        description = ''
          Section to describe style and ui.
        '';
      };

    };

  };

  config = mkIf (ldmcfg.enable && cfg.enable) {

    services.xserver.displayManager.lightdm.greeters.gtk.enable = false;

    nixpkgs.config.lightdm-tiny-greeter.conf =
    let
      configHeader = ''
        #include <gtk/gtk.h>
        static const char *user_text = "${cfg.label.user}";
        static const char *pass_text = "${cfg.label.pass}";
        static const char *session = "${dmcfg.defaultSession}";
      '';
    in
      optionalString (cfg.extraConfig != "")
        (configHeader + cfg.extraConfig);

    services.xserver.displayManager.lightdm.greeter =
      mkDefault {
        package = pkgs.lightdm-tiny-greeter.xgreeters;
        name = "lightdm-tiny-greeter";
      };

    assertions = [
      {
        assertion = dmcfg.defaultSession != null;
        message = ''
          Please set: services.xserver.displayManager.defaultSession
        '';
      }
    ];

  };
}