vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / programs / nncp.nix
blob6ac0363e50a0c2e4dc63f0e6b20286711713494b
1 { config, lib, pkgs, ... }:
3 let
4   nncpCfgFile = "/run/nncp.hjson";
5   programCfg = config.programs.nncp;
6   settingsFormat = pkgs.formats.json { };
7   jsonCfgFile = settingsFormat.generate "nncp.json" programCfg.settings;
8   pkg = programCfg.package;
9 in {
10   options.programs.nncp = {
12     enable =
13       lib.mkEnableOption "NNCP (Node to Node copy) utilities and configuration";
15     group = lib.mkOption {
16       type = lib.types.str;
17       default = "uucp";
18       description = ''
19         The group under which NNCP files shall be owned.
20         Any member of this group may access the secret keys
21         of this NNCP node.
22       '';
23     };
25     package = lib.mkPackageOption pkgs "nncp" { };
27     secrets = lib.mkOption {
28       type = with lib.types; listOf str;
29       example = [ "/run/keys/nncp.hjson" ];
30       description = ''
31         A list of paths to NNCP configuration files that should not be
32         in the Nix store. These files are layered on top of the values at
33         [](#opt-programs.nncp.settings).
34       '';
35     };
37     settings = lib.mkOption {
38       type = settingsFormat.type;
39       description = ''
40         NNCP configuration, see
41         <http://www.nncpgo.org/Configuration.html>.
42         At runtime these settings will be overlayed by the contents of
43         [](#opt-programs.nncp.secrets) into the file
44         `${nncpCfgFile}`. Node keypairs go in
45         `secrets`, do not specify them in
46         `settings` as they will be leaked into
47         `/nix/store`!
48       '';
49       default = { };
50     };
52   };
54   config = lib.mkIf programCfg.enable {
56     environment = {
57       systemPackages = [ pkg ];
58       etc."nncp.hjson".source = nncpCfgFile;
59     };
61     programs.nncp.settings = {
62       spool = lib.mkDefault "/var/spool/nncp";
63       log = lib.mkDefault "/var/spool/nncp/log";
64     };
66     systemd.tmpfiles.rules = [
67       "d ${programCfg.settings.spool} 0770 root ${programCfg.group}"
68       "f ${programCfg.settings.log} 0770 root ${programCfg.group}"
69     ];
71     systemd.services.nncp-config = {
72       path = [ pkg ];
73       description = "Generate NNCP configuration";
74       wantedBy = [ "basic.target" ];
75       serviceConfig.Type = "oneshot";
76       script = ''
77         umask 127
78         rm -f ${nncpCfgFile}
79         for f in ${jsonCfgFile} ${builtins.toString config.programs.nncp.secrets}
80         do
81           ${lib.getExe pkgs.hjson-go} -c <"$f"
82         done |${lib.getExe pkgs.jq} --slurp add >${nncpCfgFile}
83         chgrp ${programCfg.group} ${nncpCfgFile}
84       '';
85     };
86   };
88   meta.maintainers = with lib.maintainers; [ ehmry ];