Skip to content

Instantly share code, notes, and snippets.

@kugland
Last active April 30, 2024 04:07
Show Gist options
  • Save kugland/6d7f1482fc7a574e07ce47be8df8a63e to your computer and use it in GitHub Desktop.
Save kugland/6d7f1482fc7a574e07ce47be8df8a63e to your computer and use it in GitHub Desktop.
Invidious’s Nix configuration (generated from it’s docker-compose.yml)
{
pkgs,
lib,
...
}: let
listenHost = "127.0.0.1";
listenPort = 3000;
hmac_key = "0mwSVDxp8YhEuPvuxsUCoqhZBDQOys4U";
repo = fetchGit {
url = "https://github.com/iv-org/invidious";
ref = "master";
rev = "eda7444ca46dbc3941205316baba8030fe0b2989"; # master
};
in {
virtualisation.oci-containers.backend = "docker";
# Containers
virtualisation.oci-containers.containers."invidious-invidious" = {
image = "quay.io/invidious/invidious:latest";
environment = {
INVIDIOUS_CONFIG = lib.generators.toYAML {} {
db = {
dbname = "invidious";
user = "kemal";
password = "kemal";
host = "invidious-db";
port = 5432;
};
check_tables = true;
external_port = listenPort;
domain = "invidious.local";
https_only = false;
inherit hmac_key;
};
};
ports = ["${listenHost}:${toString listenPort}:${toString listenPort}/tcp"];
log-driver = "journald";
extraOptions = [
"--health-cmd='wget -nv --tries=1 --spider http://${listenHost}:${toString listenPort}/api/v1/trending || exit 1'"
"--health-interval=30s"
"--health-retries=2"
"--health-timeout=15s"
"--network-alias=invidious"
"--network=invidious_default"
];
};
systemd.services."docker-invidious-invidious" = {
serviceConfig.Restart = lib.mkOverride 500 "always";
after = ["docker-network-invidious_default.service" "docker-invidious-invidious-db.service"];
requires = ["docker-network-invidious_default.service" "docker-invidious-invidious-db.service"];
partOf = ["docker-compose-invidious-root.target"];
wantedBy = ["docker-compose-invidious-root.target"];
};
virtualisation.oci-containers.containers."invidious-invidious-db" = {
image = "docker.io/library/postgres:14";
environment.POSTGRES_DB = "invidious";
environment.POSTGRES_PASSWORD = "kemal";
environment.POSTGRES_USER = "kemal";
volumes = [
"${repo}/config/sql:/config/sql"
"${repo}/docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh"
"invidious_data:/var/lib/postgresql/data:rw"
];
log-driver = "journald";
extraOptions = [
"--health-cmd='pg_isready -U $POSTGRES_USER -d $POSTGRES_DB'"
"--network-alias=invidious-db"
"--network=invidious_default"
];
};
systemd.services."docker-invidious-invidious-db" = {
serviceConfig.Restart = lib.mkOverride 500 "always";
after = ["docker-network-invidious_default.service" "docker-volume-invidious_data.service"];
requires = ["docker-network-invidious_default.service" "docker-volume-invidious_data.service"];
partOf = ["docker-compose-invidious-root.target"];
wantedBy = ["docker-compose-invidious-root.target"];
};
# Networks
systemd.services."docker-network-invidious_default" = {
path = [pkgs.docker];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStop = "${pkgs.docker}/bin/docker network rm -f invidious_default";
};
script = "docker network inspect invidious_default || docker network create invidious_default";
partOf = ["docker-compose-invidious-root.target"];
wantedBy = ["docker-compose-invidious-root.target"];
};
# Volumes
systemd.services."docker-volume-invidious_data" = {
path = [pkgs.docker];
serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true;
script = "docker volume inspect invidious_data || docker volume create invidious_data";
partOf = ["docker-compose-invidious-root.target"];
wantedBy = ["docker-compose-invidious-root.target"];
};
systemd.targets."docker-compose-invidious-root".wantedBy = ["multi-user.target"];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment