{ inputs, ... }: { flake.modules.nixos.invidious = { lib, config, pkgs, ... }: { imports = with inputs.self.modules.nixos; [ podman ]; age.secrets = { invidiouscomp.file = ../../../secrets/invidiouscomp.age; invidiousdb.file = ../../../secrets/invidiousdb.age; }; virtualisation.oci-containers.containers = { "invidiouscompanion" = { image = "quay.io/invidious/invidious-companion:latest"; volumes = [ "companioncache:/var/tmp/youtubei.js:rw" ]; labels = { "io.containers.autoupdate" = "registry"; }; environmentFiles = [ "${config.age.secrets.invidiouscomp.path}" ]; log-driver = "journald"; extraOptions = [ "--pod=invidious" ]; }; "invidious-db" = { image = "docker.io/library/postgres:14"; volumes = [ "/DockerData/configs/invidious/postgresdata:/var/lib/postgresql/data" "/DockerData/configs/invidious/sql:/config/sql" "/DockerData/configs/invidious/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh" ]; labels = { "io.containers.autoupdate" = "registry"; }; environmentFiles = [ "${config.age.secrets.invidiousdb.path}" ]; log-driver = "journald"; extraOptions = [ "--pod=invidious" ]; }; "invidious" = { image = "quay.io/invidious/invidious:master"; extraOptions = [ "--pod=invidious" ]; labels = { "io.containers.autoupdate" = "registry"; }; volumes = [ "/DockerData/configs/invidious/config.yml:/invidious/config/config.yml" ]; log-driver = "journald"; dependsOn = [ "invidious-db" ]; }; }; systemd = { services = { "podman-invidious-db" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-invidious-root.target" ]; wantedBy = [ "podman-compose-invidious-root.target" ]; after = [ "podman-pod-invidious.service" ]; wants = [ "podman-pod-invidious.service" ]; }; "podman-invidiouscompanion" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-invidious-root.target" ]; wantedBy = [ "podman-compose-invidious-root.target" ]; after = [ "podman-pod-invidious.service" ]; wants = [ "podman-pod-invidious.service" ]; }; "podman-invidious" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; partOf = [ "podman-compose-invidious-root.target" ]; wantedBy = [ "podman-compose-invidious-root.target" ]; after = [ "podman-pod-invidious.service" "podman-invidious-db.service" ]; wants = [ "podman-pod-invidious.service" "podman-invidious-db.service" ]; }; "podman-pod-invidious" = { path = [ pkgs.podman ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "podman pod rm -f invidious"; }; #Invidious pod with port 5464=server script = '' podman pod inspect invidious || podman pod create --name invidious -p 5464:3000 -p 8282:8282 ''; partOf = [ "podman-compose-invidious-root.target" ]; wantedBy = [ "podman-compose-invidious-root.target" ]; }; }; targets = { "podman-compose-invidious-root" = { wantedBy = [ "multi-user.target" ]; }; }; }; }; }