AquaticOS/modules/servers/containers/arr.nix

289 lines
No EOL
7.7 KiB
Nix

{ inputs, ... }:
{
flake.modules.nixos.arr =
{ lib, pkgs, config, ... }:
{
imports = with inputs.self.modules.nixos; [
podman
];
age.secrets.gluetun.file = ../../../secrets/gluetun.age;
virtualisation.oci-containers.containers =
{
"gluetun" = {
image = "qmcgaw/gluetun:latest";
environmentFiles = [
"${config.age.secrets.gluetun.path}"
];
ports = [
"4545:4545" #Requestrr
"6767:6767" #Bazarr
"7878:7878" #Radarr
"8080:8080" #QBitTorrent
"8989:8989" #Sonarr
"9696:9696" #Prowlarr
"6881:6881/tcp"
"6881:6881/udp"
];
log-driver = "journald";
extraOptions = [
"--cap-add=NET_ADMIN"
"--device=/dev/net/tun:/dev/net/tun:rwm"
"--network-alias=gluetun"
];
};
"qbittorrent" = {
image = "lscr.io/linuxserver/qbittorrent:latest";
environment = {
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
"WEBUI_PORT" = "8080";
};
volumes = [
"/DockerData/configs/qbittorrent:/config:rw"
"/Media/Downloads:/Media/Downloads:rw"
];
dependsOn = [
"gluetun"
];
log-driver = "journald";
extraOptions = [
"--network=container:gluetun"
];
};
"flaresolverr" = {
image = "ghcr.io/flaresolverr/flaresolverr:latest";
environment = {
"CAPTCHA_SOLVER" = "none";
"LOG_HTML" = "false";
"LOG_LEVEL" = "info";
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
};
log-driver = "journald";
extraOptions = [
"--network-alias=flaresolverr"
];
};
"prowlarr" = {
image = "lscr.io/linuxserver/prowlarr:latest";
environment = {
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
};
volumes = [
"/DockerData/configs/prowlarr:/config:rw"
];
dependsOn = [
"flaresolverr"
];
log-driver = "journald";
extraOptions = [
"--network=container:gluetun"
];
};
"radarr" = {
image = "lscr.io/linuxserver/radarr:latest";
environment = {
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
};
volumes = [
"/DockerData/configs/radarr:/config:rw"
"/Media/AutoMovies:/Media/Movies:rw"
"/Media/Downloads:/Media/Downloads:rw"
];
dependsOn = [
"prowlarr"
"qbittorrent"
];
log-driver = "journald";
extraOptions = [
"--network=container:gluetun"
];
};
"sonarr" = {
image = "lscr.io/linuxserver/sonarr:latest";
environment = {
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
};
volumes = [
"/DockerData/configs/sonarr:/config:rw"
"/Media/AutoTV:/Media/TV:rw"
"/Media/Downloads:/Media/Downloads:rw"
];
dependsOn = [
"prowlarr"
"qbittorrent"
];
log-driver = "journald";
extraOptions = [
"--network=container:gluetun"
];
};
"requestrr" = {
image = "thomst08/requestrr";
environment = {
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
};
volumes = [
"/DockerData/configs/requestrr:/root/config:rw"
];
dependsOn = [
"radarr"
"sonarr"
];
log-driver = "journald";
extraOptions = [
"--network=container:gluetun"
];
};
"bazarr" = {
image = "ghcr.io/hotio/bazarr";
environment = {
"PGID" = "1000";
"PUID" = "1000";
"TZ" = "America/New_York";
};
volumes = [
"/DockerData/configs/bazarr:/config:rw"
"/Media/AutoMovies:/Media/Movies:rw"
"/Media/AutoTV:/Media/TV:rw"
"/Media/Downloads:/Media/Downloads:rw"
];
dependsOn = [
"radarr"
"sonarr"
];
log-driver = "journald";
extraOptions = [
"--network=container:gluetun"
];
};
};
systemd = {
services = {
"podman-gluetun" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
};
"podman-qbittorrent" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
"podman-flaresolverr" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
"podman-prowlarr" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
"podman-radarr" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
"podman-sonarr" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
"podman-requestrr" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
"podman-bazarr" = {
serviceConfig = {
Restart = lib.mkOverride 90 "always";
};
partOf = [ "podman-compose-arr-root.target" ];
wantedBy = [ "podman-compose-arr-root.target" ];
after = [ "podman-gluetun.service" ];
wants = [ "podman-gluetun.service" ];
};
};
targets = {
"podman-compose-arr-root" = {
wantedBy = [ "multi-user.target" ];
};
};
};
systemd.services.restart-arr-daily = {
enable = true;
description = "Restart ARR stack";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.systemd}/bin/systemctl restart podman-compose-arr-root.target";
};
};
systemd.timers.restart-arr-daily = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar= "4:03:0";
Persistent=true;
Unit = "restart-arr-daily.service";
};
};
};
}