Merge #361424: refactor lib.packagesFromDirectoryRecursive (v2)
[NixPkgs.git] / nixos / modules / services / networking / charybdis.nix
blob9f07abfdeadb942ffc10ccc18cd2ad9b3f28c647
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 let
9   inherit (lib)
10     mkEnableOption
11     mkIf
12     mkOption
13     singleton
14     types
15     ;
16   inherit (pkgs) coreutils charybdis;
17   cfg = config.services.charybdis;
19   configFile = pkgs.writeText "charybdis.conf" ''
20     ${cfg.config}
21   '';
26   ###### interface
28   options = {
30     services.charybdis = {
32       enable = mkEnableOption "Charybdis IRC daemon";
34       config = mkOption {
35         type = types.str;
36         description = ''
37           Charybdis IRC daemon configuration file.
38         '';
39       };
41       statedir = mkOption {
42         type = types.path;
43         default = "/var/lib/charybdis";
44         description = ''
45           Location of the state directory of charybdis.
46         '';
47       };
49       user = mkOption {
50         type = types.str;
51         default = "ircd";
52         description = ''
53           Charybdis IRC daemon user.
54         '';
55       };
57       group = mkOption {
58         type = types.str;
59         default = "ircd";
60         description = ''
61           Charybdis IRC daemon group.
62         '';
63       };
65       motd = mkOption {
66         type = types.nullOr types.lines;
67         default = null;
68         description = ''
69           Charybdis MOTD text.
71           Charybdis will read its MOTD from /etc/charybdis/ircd.motd .
72           If set, the value of this option will be written to this path.
73         '';
74       };
76     };
78   };
80   ###### implementation
82   config = mkIf cfg.enable (
83     lib.mkMerge [
84       {
85         users.users.${cfg.user} = {
86           description = "Charybdis IRC daemon user";
87           uid = config.ids.uids.ircd;
88           group = cfg.group;
89         };
91         users.groups.${cfg.group} = {
92           gid = config.ids.gids.ircd;
93         };
95         systemd.tmpfiles.settings."10-charybdis".${cfg.statedir}.d = {
96           inherit (cfg) user group;
97         };
99         environment.etc."charybdis/ircd.conf".source = configFile;
101         systemd.services.charybdis = {
102           description = "Charybdis IRC daemon";
103           wantedBy = [ "multi-user.target" ];
104           reloadIfChanged = true;
105           restartTriggers = [
106             configFile
107           ];
108           environment = {
109             BANDB_DBPATH = "${cfg.statedir}/ban.db";
110           };
111           serviceConfig = {
112             ExecStart = "${charybdis}/bin/charybdis -foreground -logfile /dev/stdout -configfile /etc/charybdis/ircd.conf";
113             ExecReload = "${coreutils}/bin/kill -HUP $MAINPID";
114             Group = cfg.group;
115             User = cfg.user;
116           };
117         };
119       }
121       (mkIf (cfg.motd != null) {
122         environment.etc."charybdis/ircd.motd".text = cfg.motd;
123       })
124     ]
125   );