{ config, lib, ... }: with lib; let cfg = config.modules.services.soju; in { disabledModules = [ "services/networking/soju.nix" ]; imports = [ ./_soju-module.nix ]; options.modules.services.soju = { enable = mkEnableOption "soju bouncer"; hostName = mkOption { type = types.str; default = config.networking.hostName; }; port = mkOption { type = types.port; default = 6697; }; tls = { enable = mkEnableOption "enable TLS encryption"; acmeHost = mkOption { type = types.str; }; }; }; config = mkIf cfg.enable { services.soju = { enable = true; extraGroups = [ "acme" ]; hostName = cfg.hostName; listen = [ ":${toString cfg.port}" ]; } // optionalAttrs cfg.tls.enable { tlsCertificate = "${config.security.acme.certs.${cfg.tls.acmeHost}.directory}/cert.pem"; tlsCertificateKey = "${config.security.acme.certs.${cfg.tls.acmeHost}.directory}/key.pem"; }; systemd.services.soju = { after = [ "acme-finished-${cfg.tls.acmeHost}.target" ]; }; networking.firewall.allowedTCPPorts = [ cfg.port ]; modules.persistence.directories = [ "/var/lib/private/soju" ]; }; }