python312Packages.aiohomeconnect: 0.10.0 -> 0.11.0 (#374011)
[NixPkgs.git] / nixos / modules / services / networking / solanum.nix
blobab77ae0d4c9aa9ce5ed002348c2d4417688a202c
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 let
9   inherit (lib)
10     mkEnableOption
11     mkIf
12     mkOption
13     types
14     ;
15   inherit (pkgs) solanum util-linux;
16   cfg = config.services.solanum;
18   configFile = pkgs.writeText "solanum.conf" cfg.config;
23   ###### interface
25   options = {
27     services.solanum = {
29       enable = mkEnableOption "Solanum IRC daemon";
31       config = mkOption {
32         type = types.str;
33         default = ''
34           serverinfo {
35             name = "irc.example.com";
36             sid = "1ix";
37             description = "irc!";
39             vhost = "0.0.0.0";
40             vhost6 = "::";
41           };
43           listen {
44             host = "0.0.0.0";
45             port = 6667;
46           };
48           auth {
49             user = "*@*";
50             class = "users";
51             flags = exceed_limit;
52           };
53           channel {
54             default_split_user_count = 0;
55           };
56         '';
57         description = ''
58           Solanum IRC daemon configuration file.
59           check <https://github.com/solanum-ircd/solanum/blob/main/doc/reference.conf> for all options.
60         '';
61       };
63       openFilesLimit = mkOption {
64         type = types.int;
65         default = 1024;
66         description = ''
67           Maximum number of open files. Limits the clients and server connections.
68         '';
69       };
71       motd = mkOption {
72         type = types.nullOr types.lines;
73         default = null;
74         description = ''
75           Solanum MOTD text.
77           Solanum will read its MOTD from `/etc/solanum/ircd.motd`.
78           If set, the value of this option will be written to this path.
79         '';
80       };
82     };
84   };
86   ###### implementation
88   config = mkIf cfg.enable (
89     lib.mkMerge [
90       {
92         environment.etc."solanum/ircd.conf".source = configFile;
94         systemd.services.solanum = {
95           description = "Solanum IRC daemon";
96           after = [ "network.target" ];
97           wantedBy = [ "multi-user.target" ];
98           reloadIfChanged = true;
99           restartTriggers = [
100             configFile
101           ];
102           serviceConfig = {
103             ExecStart = "${solanum}/bin/solanum -foreground -logfile /dev/stdout -configfile /etc/solanum/ircd.conf -pidfile /run/solanum/ircd.pid";
104             ExecReload = "${util-linux}/bin/kill -HUP $MAINPID";
105             DynamicUser = true;
106             User = "solanum";
107             StateDirectory = "solanum";
108             RuntimeDirectory = "solanum";
109             LimitNOFILE = "${toString cfg.openFilesLimit}";
110           };
111         };
113       }
115       (mkIf (cfg.motd != null) {
116         environment.etc."solanum/ircd.motd".text = cfg.motd;
117       })
118     ]
119   );