grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / security / krb5 / default.nix
blob6714c41d8a07cce5c3218fbdfc4e267c339ad2e1
1 { config, lib, pkgs, ... }:
2 let
3   inherit (lib) mkIf mkOption mkPackageOption mkRemovedOptionModule;
4   inherit (lib.types) bool;
6   mkRemovedOptionModule' = name: reason: mkRemovedOptionModule ["krb5" name] reason;
7   mkRemovedOptionModuleCfg = name: mkRemovedOptionModule' name ''
8     The option `krb5.${name}' has been removed. Use
9     `security.krb5.settings.${name}' for structured configuration.
10   '';
12   cfg = config.security.krb5;
13   format = import ./krb5-conf-format.nix { inherit pkgs lib; } { };
14 in {
15   imports = [
16     (mkRemovedOptionModuleCfg "libdefaults")
17     (mkRemovedOptionModuleCfg "realms")
18     (mkRemovedOptionModuleCfg "domain_realm")
19     (mkRemovedOptionModuleCfg "capaths")
20     (mkRemovedOptionModuleCfg "appdefaults")
21     (mkRemovedOptionModuleCfg "plugins")
22     (mkRemovedOptionModuleCfg "config")
23     (mkRemovedOptionModuleCfg "extraConfig")
24     (mkRemovedOptionModule' "kerberos" ''
25       The option `krb5.kerberos' has been moved to `security.krb5.package'.
26     '')
27   ];
29   options = {
30     security.krb5 = {
31       enable = mkOption {
32         default = false;
33         description = "Enable and configure Kerberos utilities";
34         type = bool;
35       };
37       package = mkPackageOption pkgs "krb5" {
38         example = "heimdal";
39       };
41       settings = mkOption {
42         default = { };
43         type = format.type;
44         description = ''
45           Structured contents of the {file}`krb5.conf` file. See
46           {manpage}`krb5.conf(5)` for details about configuration.
47         '';
48         example = {
49           include = [ "/run/secrets/secret-krb5.conf" ];
50           includedir = [ "/run/secrets/secret-krb5.conf.d" ];
52           libdefaults = {
53             default_realm = "ATHENA.MIT.EDU";
54           };
56           realms = {
57             "ATHENA.MIT.EDU" = {
58               admin_server = "athena.mit.edu";
59               kdc = [
60                 "athena01.mit.edu"
61                 "athena02.mit.edu"
62               ];
63             };
64           };
66           domain_realm = {
67             "mit.edu" = "ATHENA.MIT.EDU";
68           };
70           logging = {
71             kdc = "SYSLOG:NOTICE";
72             admin_server = "SYSLOG:NOTICE";
73             default = "SYSLOG:NOTICE";
74           };
75         };
76       };
77     };
78   };
80   config = {
81     assertions = mkIf (cfg.enable || config.services.kerberos_server.enable) [(let
82       implementation = cfg.package.passthru.implementation or "<NOT SET>";
83     in {
84       assertion = lib.elem implementation [ "krb5" "heimdal" ];
85       message = ''
86         `security.krb5.package` must be one of:
88           - krb5
89           - heimdal
91         Currently chosen implementation: ${implementation}
92       '';
93     })];
95     environment = mkIf cfg.enable {
96       systemPackages = [ cfg.package ];
97       etc."krb5.conf".source = format.generate "krb5.conf" cfg.settings;
98     };
99   };
101   meta.maintainers = builtins.attrValues {
102     inherit (lib.maintainers) dblsaiko h7x4;
103   };