# Auto-generated using compose2nix v0.2.2.
{ 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."paperless-broker" = {
    image = "docker.io/library/redis:7";
    volumes = [
      "paperless_redisdata:/data:rw"
    ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=broker"
      "--network=paperless_default"
    ];
  };
  systemd.services."podman-paperless-broker" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "always";
    };
    after = [
      "podman-network-paperless_default.service"
      "podman-volume-paperless_redisdata.service"
    ];
    requires = [
      "podman-network-paperless_default.service"
      "podman-volume-paperless_redisdata.service"
    ];
    partOf = [
      "podman-compose-paperless-root.target"
    ];
    wantedBy = [
      "podman-compose-paperless-root.target"
    ];
  };
  virtualisation.oci-containers.containers."paperless-webserver" = {
    image = "ghcr.io/paperless-ngx/paperless-ngx:latest";
    environment = {
      "PAPERLESS_REDIS" = "redis://broker:6379";
    };
    volumes = [
      "paperless_data:/usr/src/paperless/data:rw"
      "paperless_media:/usr/src/paperless/media:rw"
    ];
    ports = [
      "8000:8000/tcp"
    ];
    dependsOn = [
      "paperless-broker"
    ];
    log-driver = "journald";
    extraOptions = [
      "--network-alias=webserver"
      "--network=paperless_default"
    ];
  };
  systemd.services."podman-paperless-webserver" = {
    serviceConfig = {
      Restart = lib.mkOverride 500 "always";
    };
    after = [
      "podman-network-paperless_default.service"
      "podman-volume-paperless_data.service"
      "podman-volume-paperless_media.service"
    ];
    requires = [
      "podman-network-paperless_default.service"
      "podman-volume-paperless_data.service"
      "podman-volume-paperless_media.service"
    ];
    partOf = [
      "podman-compose-paperless-root.target"
    ];
    wantedBy = [
      "podman-compose-paperless-root.target"
    ];
  };

  # Networks
  systemd.services."podman-network-paperless_default" = {
    path = [ pkgs.podman ];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = true;
      ExecStop = "podman network rm -f paperless_default";
    };
    script = ''
      podman network inspect paperless_default || podman network create paperless_default
    '';
    partOf = [ "podman-compose-paperless-root.target" ];
    wantedBy = [ "podman-compose-paperless-root.target" ];
  };

  # Volumes
  systemd.services."podman-volume-paperless_data" = {
    path = [ pkgs.podman ];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = true;
    };
    script = ''
      podman volume inspect paperless_data || podman volume create paperless_data
    '';
    partOf = [ "podman-compose-paperless-root.target" ];
    wantedBy = [ "podman-compose-paperless-root.target" ];
  };
  systemd.services."podman-volume-paperless_media" = {
    path = [ pkgs.podman ];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = true;
    };
    script = ''
      podman volume inspect paperless_media || podman volume create paperless_media
    '';
    partOf = [ "podman-compose-paperless-root.target" ];
    wantedBy = [ "podman-compose-paperless-root.target" ];
  };
  systemd.services."podman-volume-paperless_redisdata" = {
    path = [ pkgs.podman ];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = true;
    };
    script = ''
      podman volume inspect paperless_redisdata || podman volume create paperless_redisdata
    '';
    partOf = [ "podman-compose-paperless-root.target" ];
    wantedBy = [ "podman-compose-paperless-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-paperless-root" = {
    unitConfig = {
      Description = "Root target generated by compose2nix.";
    };
    wantedBy = [ "multi-user.target" ];
  };
}