Files
nixos.server/modules/containers/arr/container.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"];
};
});
}