1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.munge;
8
9in
10
11{
12
13 ###### interface
14
15 options = {
16
17 services.munge = {
18 enable = mkEnableOption "munge service";
19
20 password = mkOption {
21 default = "/etc/munge/munge.key";
22 type = types.path;
23 description = ''
24 The path to a daemon's secret key.
25 '';
26 };
27
28 };
29
30 };
31
32 ###### implementation
33
34 config = mkIf cfg.enable {
35
36 environment.systemPackages = [ pkgs.munge ];
37
38 users.users.munge = {
39 description = "Munge daemon user";
40 isSystemUser = true;
41 group = "munge";
42 };
43
44 users.groups.munge = {};
45
46 systemd.services.munged = {
47 wantedBy = [ "multi-user.target" ];
48 wants = [
49 "network-online.target"
50 "time-sync.target"
51 ];
52 after = [
53 "network-online.target"
54 "time-sync.target"
55 ];
56
57 path = [ pkgs.munge pkgs.coreutils ];
58
59 serviceConfig = {
60 ExecStartPre = "+${pkgs.coreutils}/bin/chmod 0400 ${cfg.password}";
61 ExecStart = "${pkgs.munge}/bin/munged --foreground --key-file ${cfg.password}";
62 User = "munge";
63 Group = "munge";
64 StateDirectory = "munge";
65 StateDirectoryMode = "0711";
66 Restart = "on-failure";
67 RuntimeDirectory = "munge";
68 };
69
70 };
71
72 };
73
74}