diff options
Diffstat (limited to 'os/srv/simplex.nix')
| -rw-r--r-- | os/srv/simplex.nix | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/os/srv/simplex.nix b/os/srv/simplex.nix new file mode 100644 index 0000000..9ea54c3 --- /dev/null +++ b/os/srv/simplex.nix @@ -0,0 +1,105 @@ +{ config, lib, ... }: +let + cfg = config.os.srv.simplex; + internalSmpPort = 5223; + internalXftpPort = 5224; +in +{ + options.os.srv.simplex = { + enable = lib.mkEnableOption "enables SimpleX SMP and XFTP containers via Podman"; + tor.enable = lib.mkEnableOption "enables Tor hidden services for SimpleX"; + }; + + config = lib.mkIf cfg.enable ( + lib.mkMerge [ + { + assertions = [ + { + assertion = config.os.srv.oci.enable; + message = "SimpleX requires os.srv.oci to be enabled to run containers."; + } + { + assertion = config.os.srv.nginx.enable; + message = "SimpleX requires os.srv.nginx to be enabled for clearnet proxying."; + } + ]; + + virtualisation.oci-containers.containers = { + simplex-smp = { + image = "simplexchat/smp-server:latest"; + ports = [ "127.0.0.1:${toString internalSmpPort}:5223" ]; + volumes = [ + "/var/lib/simplex/smp/config:/etc/opt/simplex:rw" + "/var/lib/simplex/smp/logs:/var/opt/simplex:rw" + ]; + }; + + simplex-xftp = { + image = "simplexchat/xftp-server:latest"; + ports = [ "127.0.0.1:${toString internalXftpPort}:443" ]; + volumes = [ + "/var/lib/simplex/xftp/config:/etc/opt/simplex-xftp:rw" + "/var/lib/simplex/xftp/logs:/var/opt/simplex-xftp:rw" + ]; + }; + }; + + services.nginx = { + streamConfig = '' + server { + listen 5223; + proxy_pass 127.0.0.1:${toString internalSmpPort}; + } + server { + listen 5224; + proxy_pass 127.0.0.1:${toString internalXftpPort}; + } + ''; + }; + + systemd.tmpfiles.rules = [ + "d /var/lib/simplex/smp/config 0755 root root -" + "d /var/lib/simplex/smp/logs 0755 root root -" + "d /var/lib/simplex/xftp/config 0755 root root -" + "d /var/lib/simplex/xftp/logs 0755 root root -" + ]; + } + + (lib.mkIf cfg.tor.enable { + assertions = [ + { + assertion = config.os.srv.tor.enable; + message = "SimpleX Tor support requires os.srv.tor to be enabled."; + } + ]; + + services.tor.relay.onionServices = { + simplex-smp = { + version = 3; + map = [ + { + port = 5223; + target = { + addr = "127.0.0.1"; + port = internalSmpPort; + }; + } + ]; + }; + simplex-xftp = { + version = 3; + map = [ + { + port = 5224; + target = { + addr = "127.0.0.1"; + port = internalXftpPort; + }; + } + ]; + }; + }; + }) + ] + ); +} |
