AquaticOS/modules/servers/containers/invidious.nix

131 lines
No EOL
3.7 KiB
Nix

{ 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" ];
};
};
};
};
}