365 lines
9.6 KiB
Nix
365 lines
9.6 KiB
Nix
{moduleWithSystem, ...}: {
|
|
flake.nixosModules.containerArrStack = moduleWithSystem ({pkgs, ...}: {config, ...}: {
|
|
virtualisation.oci-containers.containers."bazarr" = {
|
|
image = "lscr.io/linuxserver/bazarr:latest";
|
|
environment = {
|
|
"PGID" = "0";
|
|
"PUID" = "0";
|
|
"TZ" = "Etc/UTC";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/bazarr-config:/config:rw"
|
|
"/mnt/storage/streaming:/data:rw"
|
|
];
|
|
ports = [
|
|
"8994:6767/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=bazarr"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-bazarr" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."flaresolverr" = {
|
|
image = "ghcr.io/flaresolverr/flaresolverr:latest";
|
|
environment = {
|
|
"CAPTCHA_SOLVER" = "none";
|
|
"LOG_HTML" = "false";
|
|
"LOG_LEVEL" = "info";
|
|
"TZ" = "Europe/London";
|
|
};
|
|
ports = [
|
|
"8191:8191/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=flaresolverr"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-flaresolverr" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."lidarr" = {
|
|
image = "lscr.io/linuxserver/lidarr:nightly";
|
|
environment = {
|
|
"PGID" = "0";
|
|
"PUID" = "0";
|
|
"TZ" = "Europe/London";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/lidarr-config:/config:rw"
|
|
"/mnt/storage/streaming:/data:rw"
|
|
];
|
|
ports = [
|
|
"8992:8686/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=lidarr"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-lidarr" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."lidatube" = {
|
|
image = "thewicklowwolf/lidatube:latest";
|
|
environment = {
|
|
"PGID" = "0";
|
|
"PUID" = "0";
|
|
"lidarr_address" = "http://192.168.1.180:8992";
|
|
};
|
|
environmentFiles = [config.sops.secrets.lidarr-api-key.path];
|
|
volumes = [
|
|
"/containers/arr/lidatube-config:/lidatube/config:rw"
|
|
"/etc/localtime:/etc/localtime:ro"
|
|
"/mnt/storage/streaming/lidarr:/lidatube/downloads:rw"
|
|
];
|
|
ports = [
|
|
"8997:5000/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=lidatube"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-lidatube" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."nginx" = {
|
|
image = "lscr.io/linuxserver/nginx:latest";
|
|
environment = {
|
|
"NGINX_AUTORELOAD" = "true";
|
|
"PGID" = "1000";
|
|
"PUID" = "1000";
|
|
"TZ" = "Europe/London";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/nginx-config:/config:rw"
|
|
];
|
|
ports = [
|
|
"8989:80/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=nginx"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-nginx" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."prowlarr" = {
|
|
image = "lscr.io/linuxserver/prowlarr:latest";
|
|
environment = {
|
|
"PGID" = "1000";
|
|
"PUID" = "1000";
|
|
"TZ" = "Etc/UTC";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/prowlarr-config:/config:rw"
|
|
];
|
|
ports = [
|
|
"8996:9696/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=prowlarr"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-prowlarr" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."qbittorrent" = {
|
|
image = "lscr.io/linuxserver/qbittorrent:latest";
|
|
environment = {
|
|
"PGID" = "0";
|
|
"PUID" = "0";
|
|
"TORRENTING_PORT" = "6881";
|
|
"TZ" = "Etc/UTC";
|
|
"WEBUI_PORT" = "8995";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/qbittorrnt-config:/config:rw"
|
|
"/mnt/storage/streaming/downloadclient:/data/downloadclient:rw"
|
|
];
|
|
ports = [
|
|
"8995:8995/tcp"
|
|
"6881:6881/tcp"
|
|
"6881:6881/udp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=qbittorrent"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-qbittorrent" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."radarr" = {
|
|
image = "lscr.io/linuxserver/radarr:latest";
|
|
environment = {
|
|
"PGID" = "0";
|
|
"PUID" = "0";
|
|
"TZ" = "Europe/London";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/radarr-config:/config:rw"
|
|
"/mnt/storage/streaming:/data:rw"
|
|
];
|
|
ports = [
|
|
"8991:7878/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=radarr"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-radarr" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
virtualisation.oci-containers.containers."sonarr" = {
|
|
image = "lscr.io/linuxserver/sonarr:latest";
|
|
environment = {
|
|
"PGID" = "0";
|
|
"PUID" = "0";
|
|
"TZ" = "Europe/London";
|
|
};
|
|
volumes = [
|
|
"/containers/arr/sonarr-config:/config:rw"
|
|
"/mnt/storage/streaming:/data:rw"
|
|
];
|
|
ports = [
|
|
"8990:8989/tcp"
|
|
];
|
|
log-driver = "journald";
|
|
extraOptions = [
|
|
"--network-alias=sonarr"
|
|
"--network=arr-stack_default"
|
|
];
|
|
};
|
|
systemd.services."podman-sonarr" = {
|
|
serviceConfig = {
|
|
Restart = pkgs.lib.mkOverride 90 "always";
|
|
};
|
|
after = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
requires = [
|
|
"podman-network-arr-stack_default.service"
|
|
];
|
|
partOf = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
wantedBy = [
|
|
"podman-compose-arr-stack-root.target"
|
|
];
|
|
};
|
|
|
|
# Networks
|
|
systemd.services."podman-network-arr-stack_default" = {
|
|
path = [pkgs.podman];
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
ExecStop = "podman network rm -f arr-stack_default";
|
|
};
|
|
script = ''
|
|
podman network inspect arr-stack_default || podman network create arr-stack_default
|
|
'';
|
|
partOf = ["podman-compose-arr-stack-root.target"];
|
|
wantedBy = ["podman-compose-arr-stack-root.target"];
|
|
};
|
|
|
|
# Root service
|
|
# When started, this will automatically create all resources and start
|
|
# the containers. When stopped, this will teardown all resources.
|
|
systemd.targets."podman-compose-arr-stack-root" = {
|
|
unitConfig = {
|
|
Description = "Root target generated by compose2nix.";
|
|
};
|
|
wantedBy = ["multi-user.target"];
|
|
};
|
|
});
|
|
}
|