{ options , lib , config , pkgs , ... }: let cfg = config.services.bizbot; in { options.services.bizbot = { enable = lib.mkEnableOption "Enable the bizbot service"; package = lib.mkOption { type = lib.types.package; description = "bizbot package to use"; }; server = lib.mkOption { type = lib.types.str; description = "server address to connect to"; }; channel = lib.mkOption { type = lib.types.str; description = "channel to join"; }; dataDir = lib.mkOption { type = lib.types.str; description = "where bizbot will start it's ii tree"; }; }; config = lib.mkIf cfg.enable { systemd.services = { "bizbot-${cfg.server}-${cfg.channel}-ii" = { wantedBy = [ "multi-user.target" ]; path = [ pkgs.ii ]; script = '' ${pkgs.ii}/bin/ii ${cfg.dataDir}/irc -s ${cfg.server} -p 6667 -n bizbot ''; postStart = '' echo "/join ${cfg.channel}" > ${cfg.dataDir}/irc/${cfg.server}/in ''; description = '' bizbot ii tree for ${cfg.server}/${cfg.channel} ''; }; "bizbot-${cfg.server}-${cfg.channel}" = { path = [ cfg.package ]; wantedBy = [ "multi-user.target" ]; after = [ "bizbot-${cfg.server}-${cfg.channel}-ii.service" ]; script = '' tail -f ${cfg.dataDir}/irc/${cfg.server}/${cfg.channel}/out \ | ${cfg.package}/bin/bizbot \ | tee -a ${cfg.dataDir}/irc/${cfg.server}/${cfg.channel}/in ''; description = '' bizbot for ${cfg.server}/${cfg.channel} ''; serviceConfig = { KillSignal = "INT"; Type = "simple"; Restart = "on-abort"; RestartSec = "1"; }; }; }; }; }