vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / charybdis.nix
blob6aaad823702cac16556cd545fe3095f606095ed5
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib) mkEnableOption mkIf mkOption singleton types;
5   inherit (pkgs) coreutils charybdis;
6   cfg = config.services.charybdis;
8   configFile = pkgs.writeText "charybdis.conf" ''
9     ${cfg.config}
10   '';
15   ###### interface
17   options = {
19     services.charybdis = {
21       enable = mkEnableOption "Charybdis IRC daemon";
23       config = mkOption {
24         type = types.str;
25         description = ''
26           Charybdis IRC daemon configuration file.
27         '';
28       };
30       statedir = mkOption {
31         type = types.path;
32         default = "/var/lib/charybdis";
33         description = ''
34           Location of the state directory of charybdis.
35         '';
36       };
38       user = mkOption {
39         type = types.str;
40         default = "ircd";
41         description = ''
42           Charybdis IRC daemon user.
43         '';
44       };
46       group = mkOption {
47         type = types.str;
48         default = "ircd";
49         description = ''
50           Charybdis IRC daemon group.
51         '';
52       };
54       motd = mkOption {
55         type = types.nullOr types.lines;
56         default = null;
57         description = ''
58           Charybdis MOTD text.
60           Charybdis will read its MOTD from /etc/charybdis/ircd.motd .
61           If set, the value of this option will be written to this path.
62         '';
63       };
65     };
67   };
70   ###### implementation
72   config = mkIf cfg.enable (lib.mkMerge [
73     {
74       users.users.${cfg.user} = {
75         description = "Charybdis IRC daemon user";
76         uid = config.ids.uids.ircd;
77         group = cfg.group;
78       };
80       users.groups.${cfg.group} = {
81         gid = config.ids.gids.ircd;
82       };
84       systemd.tmpfiles.settings."10-charybdis".${cfg.statedir}.d = {
85         inherit (cfg) user group;
86       };
88       environment.etc."charybdis/ircd.conf".source = configFile;
90       systemd.services.charybdis = {
91         description = "Charybdis IRC daemon";
92         wantedBy = [ "multi-user.target" ];
93         reloadIfChanged = true;
94         restartTriggers = [
95           configFile
96         ];
97         environment = {
98           BANDB_DBPATH = "${cfg.statedir}/ban.db";
99         };
100         serviceConfig = {
101           ExecStart   = "${charybdis}/bin/charybdis -foreground -logfile /dev/stdout -configfile /etc/charybdis/ircd.conf";
102           ExecReload = "${coreutils}/bin/kill -HUP $MAINPID";
103           Group = cfg.group;
104           User = cfg.user;
105         };
106       };
108     }
110     (mkIf (cfg.motd != null) {
111       environment.etc."charybdis/ircd.motd".text = cfg.motd;
112     })
113   ]);