{ config, ... }:

{
  virtualisation.pods.nextcloud = {
    hostname = "nextcloud.tlater.net";
    publish = [ "3001:80" ];
    network = "slirp4netns";

    containers = {
      nextcloud = {
        image = "nextcloud:fpm-alpine";
        dependsOn = [ "postgres" ];
        volumes = [
          "nextcloud-apps:/var/www/html/custom_apps"
          "nextcloud-config:/var/www/html/config"
          "nextcloud-data:/var/www/html/data"
        ];
        environment = {
          POSTGRES_DB = "nextcloud";
          POSTGRES_USER = "nextcloud";
          POSTGRES_HOST = "nextcloud-postgres";
          OVERWRITEPROTOCOL = "https";
          TRUSTED_PROXIES = "127.0.0.1";
        };
      };

      cron = {
        image = "nextcloud:fpm-alpine";
        entrypoint = "/cron.sh";
        dependsOn = [ "postgres" "nextcloud" ];
        extraOptions = [ "--volumes-from=nextcloud-nextcloud" ];
      };

      nginx = {
        image = "nginx:alpine";
        dependsOn = [ "nextcloud" ];
        volumes =
          [ "${./configs/nginx-nextcloud.conf}:/etc/nginx/nginx.conf:ro" ];
        extraOptions = [ "--volumes-from=nextcloud-nextcloud" ];
      };

      postgres = {
        image = "postgres:alpine";
        environment = {
          POSTGRES_DB = "nextcloud";
          POSTGRES_USER = "nextcloud";
        };
        volumes = [ "nextcloud-db-data:/var/lib/postgresql/data" ];
      };
    };
  };
}