| 
									
										
										
										
											2015-05-09 21:35:29 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   inherit (lib) mkEnableOption mkIf mkOption singleton types; | 
					
						
							|  |  |  |   inherit (pkgs) coreutils charybdis; | 
					
						
							|  |  |  |   cfg = config.services.charybdis; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   configFile = pkgs.writeText "charybdis.conf" ''
 | 
					
						
							|  |  |  |     ${cfg.config} | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.charybdis = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkEnableOption "Charybdis IRC daemon"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       config = mkOption { | 
					
						
							|  |  |  |         type = types.string; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Charybdis IRC daemon configuration file. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       statedir = mkOption { | 
					
						
							|  |  |  |         type = types.string; | 
					
						
							|  |  |  |         default = "/var/lib/charybdis"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Location of the state directory of charybdis. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       user = mkOption { | 
					
						
							|  |  |  |         type = types.string; | 
					
						
							|  |  |  |         default = "ircd"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Charybdis IRC daemon user. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       group = mkOption { | 
					
						
							|  |  |  |         type = types.string; | 
					
						
							|  |  |  |         default = "ircd"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Charybdis IRC daemon group. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |       motd = mkOption { | 
					
						
							|  |  |  |         type = types.nullOr types.lines; | 
					
						
							|  |  |  |         default = null; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Charybdis MOTD text. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Charybdis will read its MOTD from /etc/charybdis/ircd.motd . | 
					
						
							|  |  |  |           If set, the value of this option will be written to this path. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-09 21:35:29 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |   config = mkIf cfg.enable (lib.mkMerge [ | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |       users.users = singleton { | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |         name = cfg.user; | 
					
						
							|  |  |  |         description = "Charybdis IRC daemon user"; | 
					
						
							|  |  |  |         uid = config.ids.uids.ircd; | 
					
						
							|  |  |  |         group = cfg.group; | 
					
						
							| 
									
										
										
										
											2015-05-09 21:35:29 +02:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |       users.groups = singleton { | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |         name = cfg.group; | 
					
						
							|  |  |  |         gid = config.ids.gids.ircd; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2015-05-09 21:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |       systemd.services.charybdis = { | 
					
						
							|  |  |  |         description = "Charybdis IRC daemon"; | 
					
						
							|  |  |  |         wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |         environment = { | 
					
						
							|  |  |  |           BANDB_DBPATH = "${cfg.statedir}/ban.db"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							| 
									
										
										
										
											2018-10-07 13:10:50 +02:00
										 |  |  |           ExecStart   = "${charybdis}/bin/charybdis -foreground -logfile /dev/stdout -configfile ${configFile}"; | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |           Group = cfg.group; | 
					
						
							|  |  |  |           User = cfg.user; | 
					
						
							|  |  |  |           PermissionsStartOnly = true; # preStart needs to run with root permissions | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |         preStart = ''
 | 
					
						
							|  |  |  |           ${coreutils}/bin/mkdir -p ${cfg.statedir} | 
					
						
							|  |  |  |           ${coreutils}/bin/chown ${cfg.user}:${cfg.group} ${cfg.statedir} | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2015-05-09 21:35:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 22:28:50 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     (mkIf (cfg.motd != null) { | 
					
						
							|  |  |  |       environment.etc."charybdis/ircd.motd".text = cfg.motd; | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |   ]); | 
					
						
							| 
									
										
										
										
											2015-05-09 21:35:29 +02:00
										 |  |  | } |