From 07f1f811b9768280e70286b8547e9b938f6fc649 Mon Sep 17 00:00:00 2001 From: k3t Date: Tue, 28 Jul 2026 09:18:56 -0600 Subject: [PATCH] add mautrix podman containers --- .../nixcloud/services.d/matrix.d/mautrix.nix | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 hosts/nixcloud/services.d/matrix.d/mautrix.nix diff --git a/hosts/nixcloud/services.d/matrix.d/mautrix.nix b/hosts/nixcloud/services.d/matrix.d/mautrix.nix new file mode 100644 index 0000000..7939deb --- /dev/null +++ b/hosts/nixcloud/services.d/matrix.d/mautrix.nix @@ -0,0 +1,234 @@ +# Auto-generated by compose2nix. + +{ pkgs, lib, config, ... }: + +{ + # Runtime + virtualisation.podman = { + enable = true; + autoPrune.enable = true; + dockerCompat = true; + }; + + # Enable container name DNS for all Podman networks. + networking.firewall.interfaces = let + matchAll = if !config.networking.nftables.enable then "podman+" else "podman*"; + in { + "${matchAll}".allowedUDPPorts = [ 53 ]; + }; + + virtualisation.oci-containers.backend = "podman"; + + # Containers + virtualisation.oci-containers.containers."matrix-mautrix-bluesky" = { + image = "dock.mau.dev/mautrix/bluesky:latest"; + volumes = [ + "/var/lib/mautrix/bluesky:/data:rw" + ]; + ports = [ + "127.0.0.4:29340:29340/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mautrix-bluesky" + "--network=matrix_default" + ]; + }; + systemd.services."podman-matrix-mautrix-bluesky" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + after = [ + "podman-network-matrix_default.service" + ]; + requires = [ + "podman-network-matrix_default.service" + ]; + partOf = [ + "podman-compose-matrix-root.target" + ]; + wantedBy = [ + "podman-compose-matrix-root.target" + ]; + }; + virtualisation.oci-containers.containers."matrix-mautrix-discord" = { + image = "dock.mau.dev/mautrix/discord:latest"; + volumes = [ + "/var/lib/mautrix/discord:/data:rw" + ]; + ports = [ + "127.0.0.4:29334:29334/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mautrix-discord" + "--network=matrix_default" + ]; + }; + systemd.services."podman-matrix-mautrix-discord" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + after = [ + "podman-network-matrix_default.service" + ]; + requires = [ + "podman-network-matrix_default.service" + ]; + partOf = [ + "podman-compose-matrix-root.target" + ]; + wantedBy = [ + "podman-compose-matrix-root.target" + ]; + }; + virtualisation.oci-containers.containers."matrix-mautrix-linkedin" = { + image = "dock.mau.dev/mautrix/linkedin:latest"; + volumes = [ + "/var/lib/mautrix/linkedin:/data:rw" + ]; + ports = [ + "127.0.0.4:29341:29341/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mautrix-linkedin" + "--network=matrix_default" + ]; + }; + systemd.services."podman-matrix-mautrix-linkedin" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + after = [ + "podman-network-matrix_default.service" + ]; + requires = [ + "podman-network-matrix_default.service" + ]; + partOf = [ + "podman-compose-matrix-root.target" + ]; + wantedBy = [ + "podman-compose-matrix-root.target" + ]; + }; + virtualisation.oci-containers.containers."matrix-mautrix-meta" = { + image = "dock.mau.dev/mautrix/meta:latest"; + volumes = [ + "/var/lib/mautrix/meta:/data:rw" + ]; + ports = [ + "127.0.0.4:29319:29319/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mautrix-meta" + "--network=matrix_default" + ]; + }; + systemd.services."podman-matrix-mautrix-meta" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + after = [ + "podman-network-matrix_default.service" + ]; + requires = [ + "podman-network-matrix_default.service" + ]; + partOf = [ + "podman-compose-matrix-root.target" + ]; + wantedBy = [ + "podman-compose-matrix-root.target" + ]; + }; + virtualisation.oci-containers.containers."matrix-mautrix-twitter" = { + image = "dock.mau.dev/mautrix/twitter:latest"; + volumes = [ + "/var/lib/mautrix/twitter:/data:rw" + ]; + ports = [ + "127.0.0.4:29327:29327/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mautrix-twitter" + "--network=matrix_default" + ]; + }; + systemd.services."podman-matrix-mautrix-twitter" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + after = [ + "podman-network-matrix_default.service" + ]; + requires = [ + "podman-network-matrix_default.service" + ]; + partOf = [ + "podman-compose-matrix-root.target" + ]; + wantedBy = [ + "podman-compose-matrix-root.target" + ]; + }; + virtualisation.oci-containers.containers."matrix-mautrix-whatsapp" = { + image = "dock.mau.dev/mautrix/whatsapp:latest"; + volumes = [ + "/var/lib/mautrix/whatsapp:/data:rw" + ]; + ports = [ + "127.0.0.4:29318:29318/tcp" + ]; + log-driver = "journald"; + extraOptions = [ + "--network-alias=mautrix-whatsapp" + "--network=matrix_default" + ]; + }; + systemd.services."podman-matrix-mautrix-whatsapp" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + after = [ + "podman-network-matrix_default.service" + ]; + requires = [ + "podman-network-matrix_default.service" + ]; + partOf = [ + "podman-compose-matrix-root.target" + ]; + wantedBy = [ + "podman-compose-matrix-root.target" + ]; + }; + + # Networks + systemd.services."podman-network-matrix_default" = { + path = [ pkgs.podman ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStop = "podman network rm -f matrix_default"; + }; + script = '' + podman network inspect matrix_default || podman network create matrix_default + ''; + partOf = [ "podman-compose-matrix-root.target" ]; + wantedBy = [ "podman-compose-matrix-root.target" ]; + }; + + # Root service + # When started, this will automatically create all resources and start + # the containers. When stopped, this will teardown all resources. + systemd.targets."podman-compose-matrix-root" = { + unitConfig = { + Description = "Root target generated by compose2nix."; + }; + wantedBy = [ "multi-user.target" ]; + }; +}