summaryrefslogtreecommitdiff
path: root/os/srv/simplex.nix
diff options
context:
space:
mode:
Diffstat (limited to 'os/srv/simplex.nix')
-rw-r--r--os/srv/simplex.nix105
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;
+ };
+ }
+ ];
+ };
+ };
+ })
+ ]
+ );
+}