at 23.11-pre 2.6 kB view raw
1{ config, lib, pkgs, ... }: 2 3let 4 inherit (lib) mkEnableOption mkIf mkOption singleton types; 5 inherit (pkgs) coreutils charybdis; 6 cfg = config.services.charybdis; 7 8 configFile = pkgs.writeText "charybdis.conf" '' 9 ${cfg.config} 10 ''; 11in 12 13{ 14 15 ###### interface 16 17 options = { 18 19 services.charybdis = { 20 21 enable = mkEnableOption (lib.mdDoc "Charybdis IRC daemon"); 22 23 config = mkOption { 24 type = types.str; 25 description = lib.mdDoc '' 26 Charybdis IRC daemon configuration file. 27 ''; 28 }; 29 30 statedir = mkOption { 31 type = types.path; 32 default = "/var/lib/charybdis"; 33 description = lib.mdDoc '' 34 Location of the state directory of charybdis. 35 ''; 36 }; 37 38 user = mkOption { 39 type = types.str; 40 default = "ircd"; 41 description = lib.mdDoc '' 42 Charybdis IRC daemon user. 43 ''; 44 }; 45 46 group = mkOption { 47 type = types.str; 48 default = "ircd"; 49 description = lib.mdDoc '' 50 Charybdis IRC daemon group. 51 ''; 52 }; 53 54 motd = mkOption { 55 type = types.nullOr types.lines; 56 default = null; 57 description = lib.mdDoc '' 58 Charybdis MOTD text. 59 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 }; 64 65 }; 66 67 }; 68 69 70 ###### implementation 71 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 }; 79 80 users.groups.${cfg.group} = { 81 gid = config.ids.gids.ircd; 82 }; 83 84 systemd.tmpfiles.rules = [ 85 "d ${cfg.statedir} - ${cfg.user} ${cfg.group} - -" 86 ]; 87 88 environment.etc."charybdis/ircd.conf".source = configFile; 89 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 }; 107 108 } 109 110 (mkIf (cfg.motd != null) { 111 environment.etc."charybdis/ircd.motd".text = cfg.motd; 112 }) 113 ]); 114}