# Auto-generated using compose2nix v0.1.6.
{ pkgs, lib, ... }:

{
  # Runtime
  virtualisation.podman = {
    enable = true;
    autoPrune.enable = true;
    dockerCompat = true;
    defaultNetwork.settings = {
      # Required for container networking to be able to use names.
      dns_enabled = true;
    };
  };
  virtualisation.oci-containers.backend = "podman";

  # Containers
  virtualisation.oci-containers.containers."blackbird-api" = {
    image = "";
    environment = {
      API_DOMAIN = "http://localhost:3000";
      DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public";
      JWT_SECRET = "test1234";
      MEDIA_LOCATION = "./data/media/";
      MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache";
      MEDIA_LOCATION_INCOMING = "/data/media/incoming";
      MINIO_HOST = "minio";
      MINIO_PORT = "9000";
      MINIO_ROOT_PASSWORD = "password";
      MINIO_ROOT_USER = "blackbird";
      NODE_ENV = "development";
      PORT = "3000";
      POSTGRES_LOCAL_MACHINE_PORT = "5434";
      POSTGRES_PASSWORD = "nomads";
      POSTGRES_USER = "nomads";
      REACT_APP_API_DOMAIN = "http://localhost:3000";
      REDIS_HOST = "redis";
      REDIS_PASSWORD = "password";
      REDIS_PORT = "6379";
      REFRESH_TOKEN_SECRET = "test1234";
      STATIC_MEDIA_HOST = "http://localhost:3000";
      STRIPE_KEY = "";
    };
    volumes = [
      "/home/anish/.ssh:/root/.ssh:rw"
      "/home/anish/usr/mirlo:/var/www/api:rw"
      "/home/anish/usr/mirlo/data/media/downloadCache:/data/media/downloadCache:rw"
      "/home/anish/usr/mirlo/data/media/incoming:/data/media/incoming:rw"
    ];
    ports = [
      "3000:3000/tcp"
    ];
    cmd = [ "/bin/sh" "-c" "yarn && yarn migrate:deploy && yarn dev:api" ];
    dependsOn = [
      "blackbird-minio"
      "blackbird-pgsql"
      "blackbird-redis"
    ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=api"
      "--network=mirlo-api-network"
      "--network=mirlo-redis-network"
    ];
  };
  systemd.services."podman-blackbird-api" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "always";
    };
    after = [
      "podman-network-mirlo-api-network.service"
      "podman-network-mirlo-redis-network.service"
    ];
    requires = [
      "podman-network-mirlo-api-network.service"
      "podman-network-mirlo-redis-network.service"
    ];
    partOf = [
      "podman-compose-mirlo-root.target"
    ];
    unitConfig.UpheldBy = [
      "podman-blackbird-minio.service"
      "podman-blackbird-pgsql.service"
      "podman-blackbird-redis.service"
    ];
    wantedBy = [
      "podman-compose-mirlo-root.target"
    ];
  };
  virtualisation.oci-containers.containers."blackbird-background" = {
    image = "";
    environment = {
      API_DOMAIN = "http://localhost:3000";
      DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public";
      JWT_SECRET = "test1234";
      MEDIA_LOCATION = "./data/media/";
      MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache";
      MEDIA_LOCATION_INCOMING = "/data/media/incoming";
      MINIO_HOST = "minio";
      MINIO_PORT = "9000";
      MINIO_ROOT_PASSWORD = "password";
      MINIO_ROOT_USER = "blackbird";
      NODE_ENV = "development";
      PORT = "3000";
      POSTGRES_LOCAL_MACHINE_PORT = "5434";
      POSTGRES_PASSWORD = "nomads";
      POSTGRES_USER = "nomads";
      REACT_APP_API_DOMAIN = "http://localhost:3000";
      REDIS_HOST = "redis";
      REDIS_PASSWORD = "password";
      REDIS_PORT = "6379";
      REFRESH_TOKEN_SECRET = "test1234";
      STATIC_MEDIA_HOST = "http://localhost:3000";
      STRIPE_KEY = "";
    };
    volumes = [
      "/home/anish/.ssh:/root/.ssh:rw"
      "/home/anish/usr/mirlo:/var/www/api:rw"
      "/home/anish/usr/mirlo/data/media/processing:/data/media/processing:rw"
    ];
    dependsOn = [
      "blackbird-api"
      "blackbird-minio"
      "blackbird-pgsql"
      "blackbird-redis"
    ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=background"
      "--network=mirlo-api-network"
      "--network=mirlo-redis-network"
    ];
  };
  systemd.services."podman-blackbird-background" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "always";
    };
    after = [
      "podman-network-mirlo-api-network.service"
      "podman-network-mirlo-redis-network.service"
    ];
    requires = [
      "podman-network-mirlo-api-network.service"
      "podman-network-mirlo-redis-network.service"
    ];
    partOf = [
      "podman-compose-mirlo-root.target"
    ];
    unitConfig.UpheldBy = [
      "podman-blackbird-api.service"
      "podman-blackbird-minio.service"
      "podman-blackbird-pgsql.service"
      "podman-blackbird-redis.service"
    ];
    wantedBy = [
      "podman-compose-mirlo-root.target"
    ];
  };
  virtualisation.oci-containers.containers."blackbird-minio" = {
    image = "minio/minio";
    environment = {
      API_DOMAIN = "http://localhost:3000";
      DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public";
      JWT_SECRET = "test1234";
      MEDIA_LOCATION = "./data/media/";
      MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache";
      MEDIA_LOCATION_INCOMING = "/data/media/incoming";
      MINIO_HOST = "minio";
      MINIO_PORT = "9000";
      MINIO_ROOT_PASSWORD = "password";
      MINIO_ROOT_USER = "blackbird";
      PORT = "3000";
      POSTGRES_LOCAL_MACHINE_PORT = "5434";
      POSTGRES_PASSWORD = "nomads";
      POSTGRES_USER = "nomads";
      REACT_APP_API_DOMAIN = "http://localhost:3000";
      REDIS_HOST = "redis";
      REDIS_PASSWORD = "password";
      REDIS_PORT = "6379";
      REFRESH_TOKEN_SECRET = "test1234";
      STATIC_MEDIA_HOST = "http://localhost:3000";
      STRIPE_KEY = "";
    };
    volumes = [
      "/home/anish/usr/mirlo/data/minio_storage:/data:rw"
    ];
    ports = [
      "9000:9000/tcp"
      "9001:9001/tcp"
    ];
    cmd = [ "server" "--console-address" ":9001" "/data" ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=minio"
      "--network=mirlo-api-network:alias=minio"
    ];
  };
  systemd.services."podman-blackbird-minio" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "no";
    };
    after = [
      "podman-network-mirlo-api-network.service"
    ];
    requires = [
      "podman-network-mirlo-api-network.service"
    ];
    partOf = [
      "podman-compose-mirlo-root.target"
    ];
    wantedBy = [
      "podman-compose-mirlo-root.target"
    ];
  };
  virtualisation.oci-containers.containers."blackbird-pgsql" = {
    image = "postgres:14-alpine";
    environment = {
      API_DOMAIN = "http://localhost:3000";
      DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public";
      JWT_SECRET = "test1234";
      MEDIA_LOCATION = "./data/media/";
      MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache";
      MEDIA_LOCATION_INCOMING = "/data/media/incoming";
      MINIO_HOST = "minio";
      MINIO_PORT = "9000";
      MINIO_ROOT_PASSWORD = "password";
      MINIO_ROOT_USER = "blackbird";
      PORT = "3000";
      POSTGRES_LOCAL_MACHINE_PORT = "5434";
      POSTGRES_PASSWORD = "nomads";
      POSTGRES_USER = "nomads";
      REACT_APP_API_DOMAIN = "http://localhost:3000";
      REDIS_HOST = "redis";
      REDIS_PASSWORD = "password";
      REDIS_PORT = "6379";
      REFRESH_TOKEN_SECRET = "test1234";
      STATIC_MEDIA_HOST = "http://localhost:3000";
      STRIPE_KEY = "";
    };
    volumes = [
      "/home/anish/usr/mirlo/data/pgsql:/var/lib/postgresql/data:rw"
      "/home/anish/usr/mirlo/data/pgsql_backups:/backups:rw"
    ];
    ports = [
      "5432:5432/tcp"
    ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=pgsql"
      "--network=mirlo-api-network:alias=pgsql"
    ];
  };
  systemd.services."podman-blackbird-pgsql" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "no";
    };
    after = [
      "podman-network-mirlo-api-network.service"
    ];
    requires = [
      "podman-network-mirlo-api-network.service"
    ];
    partOf = [
      "podman-compose-mirlo-root.target"
    ];
    wantedBy = [
      "podman-compose-mirlo-root.target"
    ];
  };
  virtualisation.oci-containers.containers."blackbird-redis" = {
    image = "redis";
    ports = [
      "6379:6379/tcp"
    ];
    cmd = [ "redis-server" "--appendonly" "yes" "--requirepass " ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=redis"
      "--network=mirlo-redis-network"
    ];
  };
  systemd.services."podman-blackbird-redis" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "always";
    };
    after = [
      "podman-network-mirlo-redis-network.service"
    ];
    requires = [
      "podman-network-mirlo-redis-network.service"
    ];
    partOf = [
      "podman-compose-mirlo-root.target"
    ];
    wantedBy = [
      "podman-compose-mirlo-root.target"
    ];
  };

  # Networks
  systemd.services."podman-network-mirlo-api-network" = {
    path = [ pkgs.podman ];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = true;
      ExecStop = "${pkgs.podman}/bin/podman network rm -f mirlo-api-network";
    };
    script = ''
      podman network inspect mirlo-api-network || podman network create mirlo-api-network --opt isolate=true
    '';
    partOf = [ "podman-compose-mirlo-root.target" ];
    wantedBy = [ "podman-compose-mirlo-root.target" ];
  };
  systemd.services."podman-network-mirlo-redis-network" = {
    path = [ pkgs.podman ];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = true;
      ExecStop = "${pkgs.podman}/bin/podman network rm -f mirlo-redis-network";
    };
    script = ''
      podman network inspect mirlo-redis-network || podman network create mirlo-redis-network --opt isolate=true
    '';
    partOf = [ "podman-compose-mirlo-root.target" ];
    wantedBy = [ "podman-compose-mirlo-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-mirlo-root" = {
    unitConfig = {
      Description = "Root target generated by compose2nix.";
    };
    wantedBy = [ "multi-user.target" ];
  };
}
