# Auto-generated using compose2nix v0.3.1. { config, pkgs, lib, ... }: { imports = [ ../../../../system/sops.nix ]; # Containers virtualisation.oci-containers.containers."synapse-db" = { image = "docker.io/postgres:17.5"; environmentFiles = [ config.sops.secrets.synapse_db_docker_env.path ]; environment = { "POSTGRES_INITDB_ARGS" = "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"; "POSTGRES_USER" = "synapse"; }; volumes = [ "synapse_db:/var/lib/postgresql/data:rw" ]; log-driver = "journald"; extraOptions = [ "--network-alias=db" "--network=synapse_default" ]; }; systemd.services."docker-synapse-db" = { serviceConfig = { Restart = lib.mkOverride 90 "no"; }; after = [ "docker-network-synapse_default.service" "docker-volume-synapse_db.service" ]; requires = [ "docker-network-synapse_default.service" "docker-volume-synapse_db.service" ]; partOf = [ "docker-compose-synapse-root.target" ]; wantedBy = [ "docker-compose-synapse-root.target" ]; }; virtualisation.oci-containers.containers."synapse-synapse" = { image = "docker.io/matrixdotorg/synapse:latest"; environment = { "SYNAPSE_CONFIG_PATH" = "/data/homeserver.yaml"; }; volumes = [ "synapse_synapse:/data:rw" "/mnt/NASBox/synapse/uploads:/data/media_store:rw" "${config.sops.secrets.synapse_synapse_docker_env.path}:/data/homeserver.yaml:ro" "${config.sops.secrets.synapse_synapse_signing_docker_env.path}:/data/matrix.terah.dev.signing.key:ro" ]; labels = { "traefik.enable" = "true"; "traefik.http.routers.http-synapse.entryPoints" = "http"; "traefik.http.routers.http-synapse.rule" = "Host(`matrix.terah.dev`)"; }; dependsOn = [ "synapse-db" ]; log-driver = "journald"; extraOptions = [ "--network-alias=synapse" "--network=synapse_default" ]; }; systemd.services."docker-synapse-synapse" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; RestartMaxDelaySec = lib.mkOverride 90 "1m"; RestartSec = lib.mkOverride 90 "100ms"; RestartSteps = lib.mkOverride 90 9; }; after = [ "docker-network-synapse_default.service" "docker-volume-synapse_synapse.service" ]; requires = [ "docker-network-synapse_default.service" "docker-volume-synapse_synapse.service" ]; partOf = [ "docker-compose-synapse-root.target" ]; wantedBy = [ "docker-compose-synapse-root.target" ]; }; # Networks systemd.services."docker-network-synapse_default" = { path = [ pkgs.docker ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "docker network rm -f synapse_default"; }; script = '' docker network inspect synapse_default || docker network create synapse_default ''; partOf = [ "docker-compose-synapse-root.target" ]; wantedBy = [ "docker-compose-synapse-root.target" ]; }; # Volumes systemd.services."docker-volume-synapse_db" = { path = [ pkgs.docker ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' docker volume inspect synapse_db || docker volume create synapse_db ''; partOf = [ "docker-compose-synapse-root.target" ]; wantedBy = [ "docker-compose-synapse-root.target" ]; }; systemd.services."docker-volume-synapse_synapse" = { path = [ pkgs.docker ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' docker volume inspect synapse_synapse || docker volume create synapse_synapse ''; partOf = [ "docker-compose-synapse-root.target" ]; wantedBy = [ "docker-compose-synapse-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."docker-compose-synapse-root" = { unitConfig = { Description = "Root target generated by compose2nix."; }; wantedBy = [ "multi-user.target" ]; }; }