aboutsummaryrefslogtreecommitdiff
path: root/modules/services/soju.nix
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2023-03-29 20:54:19 +0900
committersefidel <contact@sefidel.net>2023-04-03 18:32:29 +0900
commitce06f43476863da90dc60dcee606d2b6c5a89a8e (patch)
tree5d14946330cb09ff0ebd97bee59407fccee4d860 /modules/services/soju.nix
downloadinfra-ce06f43476863da90dc60dcee606d2b6c5a89a8e.zip
project: initial commit
Diffstat (limited to 'modules/services/soju.nix')
-rw-r--r--modules/services/soju.nix48
1 files changed, 48 insertions, 0 deletions
diff --git a/modules/services/soju.nix b/modules/services/soju.nix
new file mode 100644
index 0000000..4302538
--- /dev/null
+++ b/modules/services/soju.nix
@@ -0,0 +1,48 @@
+{ config, lib, ... }:
+
+with lib;
+let
+ cfg = config.modules.services.soju;
+in
+{
+ disabledModules = [
+ "services/networking/soju.nix"
+ ];
+
+ imports = [
+ ../../overlays/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 ];
+
+ environment.persistence."/persist".directories = [
+ "/var/lib/private/soju"
+ ];
+ };
+}