1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 inherit (pkgs) prayer;
8
9 cfg = config.services.prayer;
10
11 stateDir = "/var/lib/prayer";
12
13 prayerUser = "prayer";
14 prayerGroup = "prayer";
15
16 prayerExtraCfg = pkgs.writeText "extraprayer.cf" ''
17 prefix = "${prayer}"
18 var_prefix = "${stateDir}"
19 prayer_user = "${prayerUser}"
20 prayer_group = "${prayerGroup}"
21 sendmail_path = "/var/setuid-wrappers/sendmail"
22
23 use_http_port ${cfg.port}
24
25 ${cfg.extraConfig}
26 '';
27
28 prayerCfg = pkgs.runCommand "prayer.cf" { } ''
29 # We have to remove the http_port 80, or it will start a server there
30 cat ${prayer}/etc/prayer.cf | grep -v http_port > $out
31 cat ${prayerExtraCfg} >> $out
32 '';
33
34in
35
36{
37
38 ###### interface
39
40 options = {
41
42 services.prayer = {
43
44 enable = mkOption {
45 default = false;
46 description = ''
47 Whether to run the prayer webmail http server.
48 '';
49 };
50
51 port = mkOption {
52 default = "2080";
53 description = ''
54 Port the prayer http server is listening to.
55 '';
56 };
57
58 extraConfig = mkOption {
59 default = "" ;
60 description = ''
61 Extra configuration. Contents will be added verbatim to the configuration file.
62 '';
63 };
64 };
65
66 };
67
68
69 ###### implementation
70
71 config = mkIf config.services.prayer.enable {
72 environment.systemPackages = [ prayer ];
73
74 users.extraUsers = singleton
75 { name = prayerUser;
76 uid = config.ids.uids.prayer;
77 description = "Prayer daemon user";
78 home = stateDir;
79 };
80
81 users.extraGroups = singleton
82 { name = prayerGroup;
83 gid = config.ids.gids.prayer;
84 };
85
86 jobs.prayer =
87 { name = "prayer";
88
89 startOn = "startup";
90
91 preStart =
92 ''
93 mkdir -m 0755 -p ${stateDir}
94 chown ${prayerUser}.${prayerGroup} ${stateDir}
95 '';
96
97 daemonType = "daemon";
98
99 exec = "${prayer}/sbin/prayer --config-file=${prayerCfg}";
100 };
101 };
102
103}