at 25.11-pre 2.7 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7 8let 9 inherit (lib) 10 mkEnableOption 11 mkIf 12 mkOption 13 singleton 14 types 15 ; 16 inherit (pkgs) coreutils charybdis; 17 cfg = config.services.charybdis; 18 19 configFile = pkgs.writeText "charybdis.conf" '' 20 ${cfg.config} 21 ''; 22in 23 24{ 25 26 ###### interface 27 28 options = { 29 30 services.charybdis = { 31 32 enable = mkEnableOption "Charybdis IRC daemon"; 33 34 config = mkOption { 35 type = types.str; 36 description = '' 37 Charybdis IRC daemon configuration file. 38 ''; 39 }; 40 41 statedir = mkOption { 42 type = types.path; 43 default = "/var/lib/charybdis"; 44 description = '' 45 Location of the state directory of charybdis. 46 ''; 47 }; 48 49 user = mkOption { 50 type = types.str; 51 default = "ircd"; 52 description = '' 53 Charybdis IRC daemon user. 54 ''; 55 }; 56 57 group = mkOption { 58 type = types.str; 59 default = "ircd"; 60 description = '' 61 Charybdis IRC daemon group. 62 ''; 63 }; 64 65 motd = mkOption { 66 type = types.nullOr types.lines; 67 default = null; 68 description = '' 69 Charybdis MOTD text. 70 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 }; 75 76 }; 77 78 }; 79 80 ###### implementation 81 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 }; 90 91 users.groups.${cfg.group} = { 92 gid = config.ids.gids.ircd; 93 }; 94 95 systemd.tmpfiles.settings."10-charybdis".${cfg.statedir}.d = { 96 inherit (cfg) user group; 97 }; 98 99 environment.etc."charybdis/ircd.conf".source = configFile; 100 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 }; 118 119 } 120 121 (mkIf (cfg.motd != null) { 122 environment.etc."charybdis/ircd.motd".text = cfg.motd; 123 }) 124 ] 125 ); 126}