1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.rspamd;
8
9in
10
11{
12
13 ###### interface
14
15 options = {
16
17 services.rspamd = {
18
19 enable = mkOption {
20 default = false;
21 description = "Whether to run the rspamd daemon.";
22 };
23
24 debug = mkOption {
25 default = false;
26 description = "Whether to run the rspamd daemon in debug mode.";
27 };
28
29 user = mkOption {
30 type = types.string;
31 default = "rspamd";
32 description = ''
33 User to use when no root privileges are required.
34 '';
35 };
36
37 group = mkOption {
38 type = types.string;
39 default = "rspamd";
40 description = ''
41 Group to use when no root privileges are required.
42 '';
43 };
44 };
45
46 };
47
48
49 ###### implementation
50
51 config = mkIf cfg.enable {
52
53 # Allow users to run 'rspamc' and 'rspamadm'.
54 environment.systemPackages = [ pkgs.rspamd ];
55
56 users.extraUsers = singleton {
57 name = cfg.user;
58 description = "rspamd daemon";
59 uid = config.ids.uids.rspamd;
60 group = cfg.group;
61 };
62
63 users.extraGroups = singleton {
64 name = cfg.group;
65 gid = config.ids.gids.spamd;
66 };
67
68 systemd.services.rspamd = {
69 description = "Rspamd Service";
70
71 wantedBy = [ "multi-user.target" ];
72 after = [ "network.target" ];
73
74 serviceConfig = {
75 ExecStart = "${pkgs.rspamd}/bin/rspamd ${optionalString cfg.debug "-d"} --user=${cfg.user} --group=${cfg.group} --pid=/run/rspamd.pid -f";
76 RuntimeDirectory = "/var/lib/rspamd";
77 PermissionsStartOnly = true;
78 Restart = "always";
79 };
80
81 preStart = ''
82 ${pkgs.coreutils}/bin/mkdir -p /var/{lib,log}/rspamd
83 ${pkgs.coreutils}/bin/chown ${cfg.user}:${cfg.group} /var/lib/rspamd
84 '';
85
86 };
87
88 };
89
90}