at 15.09-beta 2.0 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 "Charybdis IRC daemon"; 22 23 config = mkOption { 24 type = types.string; 25 description = '' 26 Charybdis IRC daemon configuration file. 27 ''; 28 }; 29 30 statedir = mkOption { 31 type = types.string; 32 default = "/var/lib/charybdis"; 33 description = '' 34 Location of the state directory of charybdis. 35 ''; 36 }; 37 38 user = mkOption { 39 type = types.string; 40 default = "ircd"; 41 description = '' 42 Charybdis IRC daemon user. 43 ''; 44 }; 45 46 group = mkOption { 47 type = types.string; 48 default = "ircd"; 49 description = '' 50 Charybdis IRC daemon group. 51 ''; 52 }; 53 54 }; 55 56 }; 57 58 59 ###### implementation 60 61 config = mkIf cfg.enable { 62 63 users.extraUsers = singleton { 64 name = cfg.user; 65 description = "Charybdis IRC daemon user"; 66 uid = config.ids.uids.ircd; 67 group = cfg.group; 68 }; 69 70 users.extraGroups = singleton { 71 name = cfg.group; 72 gid = config.ids.gids.ircd; 73 }; 74 75 systemd.services.charybdis = { 76 description = "Charybdis IRC daemon"; 77 wantedBy = [ "multi-user.target" ]; 78 environment = { 79 BANDB_DBPATH = "${cfg.statedir}/ban.db"; 80 }; 81 serviceConfig = { 82 ExecStart = "${charybdis}/bin/charybdis-ircd -foreground -logfile /dev/stdout -configfile ${configFile}"; 83 Group = cfg.group; 84 User = cfg.user; 85 PermissionsStartOnly = true; # preStart needs to run with root permissions 86 }; 87 preStart = '' 88 ${coreutils}/bin/mkdir -p ${cfg.statedir} 89 ${coreutils}/bin/chown ${cfg.user}:${cfg.group} ${cfg.statedir} 90 ''; 91 92 }; 93 94 }; 95 96}