[homepage] Fixes widget API calls
This commit is contained in:
@@ -2,16 +2,15 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
# Additional configuration
|
# Additional configuration
|
||||||
imports =
|
imports = [
|
||||||
[
|
./containers/grafana.nix
|
||||||
./containers/grafana.nix
|
./containers/nextcloud.nix
|
||||||
./containers/nextcloud.nix
|
./containers/prometheus.nix
|
||||||
./containers/prometheus.nix
|
./containers/public-homepage.nix
|
||||||
./containers/public-homepage.nix
|
./containers/searxng.nix
|
||||||
./containers/searxng.nix
|
./containers/shared-postgres.nix
|
||||||
./containers/shared-postgres.nix
|
./containers/synapse.nix
|
||||||
./containers/synapse.nix
|
];
|
||||||
];
|
|
||||||
|
|
||||||
# Enable common container config files in /etc/containers
|
# Enable common container config files in /etc/containers
|
||||||
virtualisation.containers.enable = true;
|
virtualisation.containers.enable = true;
|
||||||
@@ -38,369 +37,371 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
users.groups = {
|
users.groups = {
|
||||||
git = {};
|
git = { };
|
||||||
timetagger = {};
|
timetagger = { };
|
||||||
};
|
};
|
||||||
users.users = {
|
users.users = {
|
||||||
gitea = {
|
gitea = {
|
||||||
uid = 2001;
|
uid = 2001;
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
description = "System User for Gitea";
|
description = "System User for Gitea";
|
||||||
extraGroups = [ "git" ];
|
extraGroups = [ "git" ];
|
||||||
group = "git";
|
group = "git";
|
||||||
};
|
};
|
||||||
timetagger = {
|
timetagger = {
|
||||||
uid = 2002;
|
uid = 2002;
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
description = "System User for TimeTagger";
|
description = "System User for TimeTagger";
|
||||||
group = "timetagger";
|
group = "timetagger";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
virtualisation.oci-containers.backend = "podman";
|
virtualisation.oci-containers.backend = "podman";
|
||||||
virtualisation.oci-containers.containers = let
|
virtualisation.oci-containers.containers =
|
||||||
domain = "havenisms.com";
|
let
|
||||||
hostRule = host: "Host(`${host}.${domain}`)";
|
domain = "havenisms.com";
|
||||||
localNet = "192.168.0.0/16";
|
hostRule = host: "Host(`${host}.${domain}`)";
|
||||||
localNetRule = "ClientIP(`${localNet}`)";
|
localNet = "192.168.0.0/16";
|
||||||
localHostRule = host: "${localNetRule} && ${hostRule host}";
|
localNetRule = "ClientIP(`${localNet}`)";
|
||||||
in {
|
localHostRule = host: "${localNetRule} && ${hostRule host}";
|
||||||
traefik = {
|
in
|
||||||
image = "traefik";
|
{
|
||||||
autoStart = true;
|
traefik = {
|
||||||
cmd = [];
|
image = "traefik";
|
||||||
extraOptions = [
|
autoStart = true;
|
||||||
# Proxying Traefik itself
|
cmd = [ ];
|
||||||
"-l=traefik.enable=true"
|
extraOptions = [
|
||||||
"-l=traefik.http.routers.traefik.rule=${localHostRule "proxy"}"
|
# Proxying Traefik itself
|
||||||
"-l=traefik.http.services.traefik.loadbalancer.server.port=8080"
|
"-l=traefik.enable=true"
|
||||||
"-l=homepage.group=Infra"
|
"-l=traefik.http.routers.traefik.rule=${localHostRule "proxy"}"
|
||||||
"-l=homepage.name=Traefik"
|
"-l=traefik.http.services.traefik.loadbalancer.server.port=8080"
|
||||||
"-l=homepage.icon=traefik.svg"
|
"-l=homepage.group=Infra"
|
||||||
"-l=homepage.href=https://proxy.${domain}"
|
"-l=homepage.name=Traefik"
|
||||||
"-l=homepage.description=Reverse proxy"
|
"-l=homepage.icon=traefik.svg"
|
||||||
"-l=homepage.widget.type=traefik"
|
"-l=homepage.href=https://proxy.${domain}"
|
||||||
"-l=homepage.widget.url=http://traefik:8080"
|
"-l=homepage.description=Reverse proxy"
|
||||||
];
|
"-l=homepage.widget.type=traefik"
|
||||||
ports = [
|
"-l=homepage.widget.url=http://traefik:8080"
|
||||||
"443:443"
|
];
|
||||||
"80:80"
|
ports = [
|
||||||
];
|
"443:443"
|
||||||
environmentFiles = [
|
"80:80"
|
||||||
];
|
];
|
||||||
volumes = [
|
environmentFiles = [
|
||||||
"/var/run/podman/podman.sock:/var/run/docker.sock:ro"
|
];
|
||||||
"/tank/config/traefik:/etc/traefik"
|
volumes = [
|
||||||
];
|
"/var/run/podman/podman.sock:/var/run/docker.sock:ro"
|
||||||
};
|
"/tank/config/traefik:/etc/traefik"
|
||||||
jellyfin = {
|
];
|
||||||
image = "lscr.io/linuxserver/jellyfin";
|
};
|
||||||
autoStart = true;
|
jellyfin = {
|
||||||
extraOptions = [
|
image = "lscr.io/linuxserver/jellyfin";
|
||||||
"--device=/dev/dri:/dev/dri"
|
autoStart = true;
|
||||||
"-l=traefik.enable=true"
|
extraOptions = [
|
||||||
"-l=traefik.http.routers.jellyfin.rule=${hostRule "jellyfin"}"
|
"--device=/dev/dri:/dev/dri"
|
||||||
"-l=traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
"-l=traefik.enable=true"
|
||||||
"-l=homepage.group=Apps"
|
"-l=traefik.http.routers.jellyfin.rule=${hostRule "jellyfin"}"
|
||||||
"-l=homepage.name=Jellyfin"
|
"-l=traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||||
"-l=homepage.icon=jellyfin.svg"
|
"-l=homepage.group=Apps"
|
||||||
"-l=homepage.href=https://jellyfin.${domain}"
|
"-l=homepage.name=Jellyfin"
|
||||||
"-l=homepage.description=Media player"
|
"-l=homepage.icon=jellyfin.svg"
|
||||||
"-l=homepage.widget.type=jellyfin"
|
"-l=homepage.href=https://jellyfin.${domain}"
|
||||||
"-l=homepage.widget.key={{HOMEPAGE_FILE_JELLYFIN_KEY}}"
|
"-l=homepage.description=Media player"
|
||||||
"-l=homepage.widget.url=http://jellyfin:8096"
|
"-l=homepage.widget.type=jellyfin"
|
||||||
"-l=homepage.widget.enableBlocks=true"
|
"-l=homepage.widget.key={{HOMEPAGE_FILE_JELLYFIN_KEY}}"
|
||||||
];
|
"-l=homepage.widget.url=http://jellyfin:8096"
|
||||||
volumes = [
|
"-l=homepage.widget.enableBlocks=true"
|
||||||
"/tank/media/collection:/data"
|
];
|
||||||
"/tank/config/jellyfin:/config"
|
volumes = [
|
||||||
];
|
"/tank/media/collection:/data"
|
||||||
# environment = {
|
"/tank/config/jellyfin:/config"
|
||||||
# TZ = vars.timeZone;
|
];
|
||||||
# PUID = "994";
|
# environment = {
|
||||||
# UMASK = "002";
|
# TZ = vars.timeZone;
|
||||||
# GUID = "993";
|
# PUID = "994";
|
||||||
|
# UMASK = "002";
|
||||||
|
# GUID = "993";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
deluge = {
|
||||||
|
image = "linuxserver/deluge:latest";
|
||||||
|
autoStart = true;
|
||||||
|
dependsOn = [
|
||||||
|
"gluetun"
|
||||||
|
];
|
||||||
|
extraOptions = [
|
||||||
|
"--network=container:gluetun"
|
||||||
|
"-l=homepage.group=Arr"
|
||||||
|
"-l=homepage.name=Deluge"
|
||||||
|
"-l=homepage.icon=deluge.svg"
|
||||||
|
"-l=homepage.href=https://deluge.${domain}"
|
||||||
|
"-l=homepage.description=Torrent client"
|
||||||
|
"-l=homepage.widget.type=deluge"
|
||||||
|
"-l=homepage.widget.password={{HOMEPAGE_FILE_DELUGE_PASSWORD}}"
|
||||||
|
"-l=homepage.widget.url=http://gluetun:8112"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"/tank/media:/data"
|
||||||
|
"/tank/config/deluge:/config"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
qbittorrent = {
|
||||||
|
image = "linuxserver/qbittorrent:latest";
|
||||||
|
autoStart = true;
|
||||||
|
dependsOn = [
|
||||||
|
"gluetun"
|
||||||
|
];
|
||||||
|
extraOptions = [
|
||||||
|
"--network=container:gluetun"
|
||||||
|
"-l=homepage.group=Arr"
|
||||||
|
"-l=homepage.name=qBitTorrent"
|
||||||
|
"-l=homepage.icon=qbittorrent.svg"
|
||||||
|
"-l=homepage.href=https://torrents.${domain}"
|
||||||
|
"-l=homepage.description=Torrent client"
|
||||||
|
"-l=homepage.widget.type=qbittorrent"
|
||||||
|
"-l=homepage.widget.url=http://torrents.${domain}"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"/tank/media/Downloads:/downloads"
|
||||||
|
"/tank/config/qbittorrent:/config"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
PUID = "911";
|
||||||
|
PGID = "911";
|
||||||
|
UMASK = "002";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gluetun = {
|
||||||
|
image = "qmcgaw/gluetun:latest";
|
||||||
|
autoStart = true;
|
||||||
|
extraOptions = [
|
||||||
|
# add network admin capability.
|
||||||
|
"--cap-add=NET_ADMIN"
|
||||||
|
"--device=/dev/net/tun:/dev/net/tun"
|
||||||
|
"-l=traefik.enable=true"
|
||||||
|
"-l=traefik.http.routers.torrents.rule=${localHostRule "torrents"}"
|
||||||
|
"-l=traefik.http.routers.torrents.service=torrents"
|
||||||
|
"-l=traefik.http.services.torrents.loadbalancer.server.port=8080"
|
||||||
|
"-l=homepage.group=Infra"
|
||||||
|
"-l=homepage.name=GlueTun"
|
||||||
|
"-l=homepage.icon=gluetun.svg"
|
||||||
|
"-l=homepage.href=https://torrents.${domain}"
|
||||||
|
"-l=homepage.description=VPN killswitch"
|
||||||
|
"-l=homepage.widget.type=gluetun"
|
||||||
|
"-l=homepage.widget.url=http://gluetun:8000"
|
||||||
|
];
|
||||||
|
ports = [
|
||||||
|
"127.0.0.1:8083:8000"
|
||||||
|
];
|
||||||
|
environmentFiles = [
|
||||||
|
"/tank/config/gluetun/vpn.env"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
VPN_SERVICE_PROVIDER = "protonvpn";
|
||||||
|
UMASK = "002";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
prowlarr = {
|
||||||
|
image = "lscr.io/linuxserver/prowlarr";
|
||||||
|
autoStart = true;
|
||||||
|
extraOptions = [
|
||||||
|
"-l=traefik.enable=true"
|
||||||
|
"-l=traefik.http.routers.prowlarr.rule=${localHostRule "prowlarr"}"
|
||||||
|
"-l=traefik.http.services.prowlarr.loadbalancer.server.port=9696"
|
||||||
|
"-l=homepage.group=Arr"
|
||||||
|
"-l=homepage.name=Prowlarr"
|
||||||
|
"-l=homepage.icon=prowlarr.svg"
|
||||||
|
"-l=homepage.href=https://prowlarr.${domain}"
|
||||||
|
"-l=homepage.description=Torrent indexer"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"/tank/config/prowlarr:/config"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
UMASK = "002";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Currently broken and doesn't work. :(
|
||||||
|
# flaresolverr = {
|
||||||
|
# image = "ghcr.io/flaresolverr/flaresolverr:latest";
|
||||||
|
# autoStart = true;
|
||||||
|
# extraOptions = [
|
||||||
|
# "-l=homepage.group=Infra"
|
||||||
|
# "-l=homepage.name=FlareSolverr"
|
||||||
|
# "-l=homepage.icon=flaresolverr.svg"
|
||||||
|
# "-l=homepage.href=https://flaresolverr.${domain}"
|
||||||
|
# "-l=homepage.description=Cloudflare bypass"
|
||||||
|
# ];
|
||||||
|
# volumes = [
|
||||||
|
# "/tank/config/flaresolverr:/config"
|
||||||
|
# ];
|
||||||
|
# environment = {
|
||||||
|
# UMASK = "002";
|
||||||
|
# };
|
||||||
# };
|
# };
|
||||||
};
|
radarr = {
|
||||||
deluge = {
|
image = "lscr.io/linuxserver/radarr";
|
||||||
image = "linuxserver/deluge:latest";
|
autoStart = true;
|
||||||
autoStart = true;
|
extraOptions = [
|
||||||
dependsOn = [
|
"-l=traefik.enable=true"
|
||||||
"gluetun"
|
"-l=traefik.http.routers.radarr.rule=${localHostRule "radarr"}"
|
||||||
];
|
"-l=traefik.http.services.radarr.loadbalancer.server.port=7878"
|
||||||
extraOptions = [
|
"-l=homepage.group=Arr"
|
||||||
"--network=container:gluetun"
|
"-l=homepage.name=Radarr"
|
||||||
"-l=homepage.group=Arr"
|
"-l=homepage.icon=radarr.svg"
|
||||||
"-l=homepage.name=Deluge"
|
"-l=homepage.href=https://radarr.${domain}"
|
||||||
"-l=homepage.icon=deluge.svg"
|
"-l=homepage.description=Movie acquisition"
|
||||||
"-l=homepage.href=https://deluge.${domain}"
|
"-l=homepage.widget.type=radarr"
|
||||||
"-l=homepage.description=Torrent client"
|
"-l=homepage.widget.url=http://radarr:7878"
|
||||||
"-l=homepage.widget.type=deluge"
|
"-l=homepage.widget.key={{HOMEPAGE_FILE_RADARR_KEY}}"
|
||||||
"-l=homepage.widget.password={{HOMEPAGE_FILE_DELUGE_PASSWORD}}"
|
];
|
||||||
"-l=homepage.widget.url=http://gluetun:8112"
|
volumes = [
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/tank/media:/data"
|
|
||||||
"/tank/config/deluge:/config"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
qbittorrent = {
|
|
||||||
image = "linuxserver/qbittorrent:latest";
|
|
||||||
autoStart = true;
|
|
||||||
dependsOn = [
|
|
||||||
"gluetun"
|
|
||||||
];
|
|
||||||
extraOptions = [
|
|
||||||
"--network=container:gluetun"
|
|
||||||
"-l=homepage.group=Arr"
|
|
||||||
"-l=homepage.name=qBitTorrent"
|
|
||||||
"-l=homepage.icon=qbittorrent.svg"
|
|
||||||
"-l=homepage.href=https://torrents.${domain}"
|
|
||||||
"-l=homepage.description=Torrent client"
|
|
||||||
"-l=homepage.widget.type=qbittorrent"
|
|
||||||
"-l=homepage.widget.url=http://torrents.${domain}"
|
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/tank/media/Downloads:/downloads"
|
|
||||||
"/tank/config/qbittorrent:/config"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
PUID = "911";
|
|
||||||
PGID = "911";
|
|
||||||
UMASK = "002";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
gluetun = {
|
|
||||||
image = "qmcgaw/gluetun:latest";
|
|
||||||
autoStart = true;
|
|
||||||
extraOptions = [
|
|
||||||
# add network admin capability.
|
|
||||||
"--cap-add=NET_ADMIN"
|
|
||||||
"--device=/dev/net/tun:/dev/net/tun"
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.torrents.rule=${localHostRule "torrents"}"
|
|
||||||
"-l=traefik.http.routers.torrents.service=torrents"
|
|
||||||
"-l=traefik.http.services.torrents.loadbalancer.server.port=8080"
|
|
||||||
"-l=homepage.group=Infra"
|
|
||||||
"-l=homepage.name=GlueTun"
|
|
||||||
"-l=homepage.icon=gluetun.svg"
|
|
||||||
"-l=homepage.href=https://torrents.${domain}"
|
|
||||||
"-l=homepage.description=VPN killswitch"
|
|
||||||
"-l=homepage.widget.type=gluetun"
|
|
||||||
"-l=homepage.widget.url=http://gluetun:8000"
|
|
||||||
];
|
|
||||||
ports = [
|
|
||||||
"127.0.0.1:8083:8000"
|
|
||||||
];
|
|
||||||
environmentFiles = [
|
|
||||||
"/tank/config/gluetun/vpn.env"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
VPN_SERVICE_PROVIDER = "protonvpn";
|
|
||||||
UMASK = "002";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
prowlarr = {
|
|
||||||
image = "lscr.io/linuxserver/prowlarr";
|
|
||||||
autoStart = true;
|
|
||||||
extraOptions = [
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.prowlarr.rule=${localHostRule "prowlarr"}"
|
|
||||||
"-l=traefik.http.services.prowlarr.loadbalancer.server.port=9696"
|
|
||||||
"-l=homepage.group=Arr"
|
|
||||||
"-l=homepage.name=Prowlarr"
|
|
||||||
"-l=homepage.icon=prowlarr.svg"
|
|
||||||
"-l=homepage.href=https://prowlarr.${domain}"
|
|
||||||
"-l=homepage.description=Torrent indexer"
|
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/tank/config/prowlarr:/config"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
UMASK = "002";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# Currently broken and doesn't work. :(
|
|
||||||
# flaresolverr = {
|
|
||||||
# image = "ghcr.io/flaresolverr/flaresolverr:latest";
|
|
||||||
# autoStart = true;
|
|
||||||
# extraOptions = [
|
|
||||||
# "-l=homepage.group=Infra"
|
|
||||||
# "-l=homepage.name=FlareSolverr"
|
|
||||||
# "-l=homepage.icon=flaresolverr.svg"
|
|
||||||
# "-l=homepage.href=https://flaresolverr.${domain}"
|
|
||||||
# "-l=homepage.description=Cloudflare bypass"
|
|
||||||
# ];
|
|
||||||
# volumes = [
|
|
||||||
# "/tank/config/flaresolverr:/config"
|
|
||||||
# ];
|
|
||||||
# environment = {
|
|
||||||
# UMASK = "002";
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
radarr = {
|
|
||||||
image = "lscr.io/linuxserver/radarr";
|
|
||||||
autoStart = true;
|
|
||||||
extraOptions = [
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.radarr.rule=${localHostRule "radarr"}"
|
|
||||||
"-l=traefik.http.services.radarr.loadbalancer.server.port=7878"
|
|
||||||
"-l=homepage.group=Arr"
|
|
||||||
"-l=homepage.name=Radarr"
|
|
||||||
"-l=homepage.icon=radarr.svg"
|
|
||||||
"-l=homepage.href=https://radarr.${domain}"
|
|
||||||
"-l=homepage.description=Movie acquisition"
|
|
||||||
"-l=homepage.widget.type=radarr"
|
|
||||||
"-l=homepage.widget.url=http://radarr:7878"
|
|
||||||
"-l=homepage.widget.key={{HOMEPAGE_FILE_RADARR_KEY}}"
|
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/tank/media:/data"
|
"/tank/media:/data"
|
||||||
"/tank/config/radarr:/config"
|
"/tank/config/radarr:/config"
|
||||||
];
|
];
|
||||||
environment = {
|
environment = {
|
||||||
UMASK = "002";
|
UMASK = "002";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
sonarr = {
|
||||||
sonarr = {
|
image = "lscr.io/linuxserver/sonarr";
|
||||||
image = "lscr.io/linuxserver/sonarr";
|
autoStart = true;
|
||||||
autoStart = true;
|
extraOptions = [
|
||||||
extraOptions = [
|
"-l=traefik.enable=true"
|
||||||
"-l=traefik.enable=true"
|
"-l=traefik.http.routers.sonarr.rule=${localHostRule "sonarr"}"
|
||||||
"-l=traefik.http.routers.sonarr.rule=${localHostRule "sonarr"}"
|
"-l=traefik.http.services.sonarr.loadbalancer.server.port=8989"
|
||||||
"-l=traefik.http.services.sonarr.loadbalancer.server.port=8989"
|
"-l=homepage.group=Arr"
|
||||||
"-l=homepage.group=Arr"
|
"-l=homepage.name=Sonarr"
|
||||||
"-l=homepage.name=Sonarr"
|
"-l=homepage.icon=sonarr.svg"
|
||||||
"-l=homepage.icon=sonarr.svg"
|
"-l=homepage.href=https://sonarr.${domain}"
|
||||||
"-l=homepage.href=https://sonarr.${domain}"
|
"-l=homepage.description=Show acquisition"
|
||||||
"-l=homepage.description=Show acquisition"
|
"-l=homepage.widget.type=sonarr"
|
||||||
"-l=homepage.widget.type=sonarr"
|
"-l=homepage.widget.url=http://sonarr:8989"
|
||||||
"-l=homepage.widget.url=http://sonarr:8989"
|
"-l=homepage.widget.key={{HOMEPAGE_FILE_SONARR_KEY}}"
|
||||||
"-l=homepage.widget.key={{HOMEPAGE_FILE_SONARR_KEY}}"
|
];
|
||||||
];
|
volumes = [
|
||||||
volumes = [
|
|
||||||
"/tank/media:/data"
|
"/tank/media:/data"
|
||||||
"/tank/config/sonarr:/config"
|
"/tank/config/sonarr:/config"
|
||||||
];
|
];
|
||||||
environment = {
|
environment = {
|
||||||
UMASK = "002";
|
UMASK = "002";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
readarr = {
|
||||||
readarr = {
|
# The Linuxserver version of this image doesn't have a latest tag. Odd.
|
||||||
# The Linuxserver version of this image doesn't have a latest tag. Odd.
|
image = "lscr.io/linuxserver/readarr:develop";
|
||||||
image = "lscr.io/linuxserver/readarr:develop";
|
autoStart = true;
|
||||||
autoStart = true;
|
extraOptions = [
|
||||||
extraOptions = [
|
"-l=traefik.enable=true"
|
||||||
"-l=traefik.enable=true"
|
"-l=traefik.http.routers.readarr.rule=${localHostRule "readarr"}"
|
||||||
"-l=traefik.http.routers.readarr.rule=${localHostRule "readarr"}"
|
"-l=traefik.http.services.readarr.loadbalancer.server.port=8787"
|
||||||
"-l=traefik.http.services.readarr.loadbalancer.server.port=8787"
|
"-l=homepage.group=Arr"
|
||||||
"-l=homepage.group=Arr"
|
"-l=homepage.name=Readarr"
|
||||||
"-l=homepage.name=Readarr"
|
"-l=homepage.icon=readarr.svg"
|
||||||
"-l=homepage.icon=readarr.svg"
|
"-l=homepage.href=https://readarr.${domain}"
|
||||||
"-l=homepage.href=https://readarr.${domain}"
|
"-l=homepage.description=E-book acquisition"
|
||||||
"-l=homepage.description=E-book acquisition"
|
"-l=homepage.widget.type=readarr"
|
||||||
"-l=homepage.widget.type=readarr"
|
"-l=homepage.widget.url=http://readarr.havenisms.com:8787"
|
||||||
"-l=homepage.widget.url=http://readarr:8787"
|
"-l=homepage.widget.key={{HOMEPAGE_FILE_READARR_KEY}}"
|
||||||
"-l=homepage.widget.key={{HOMEPAGE_FILE_READARR_KEY}}"
|
];
|
||||||
];
|
volumes = [
|
||||||
volumes = [
|
|
||||||
"/tank/media:/data"
|
"/tank/media:/data"
|
||||||
"/tank/config/readarr:/config"
|
"/tank/config/readarr:/config"
|
||||||
];
|
];
|
||||||
environment = {
|
environment = {
|
||||||
UMASK = "002";
|
UMASK = "002";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
homepage = {
|
||||||
|
image = "ghcr.io/gethomepage/homepage:latest";
|
||||||
|
autoStart = true;
|
||||||
|
extraOptions = [
|
||||||
|
"-l=traefik.enable=true"
|
||||||
|
"-l=traefik.http.routers.homepage.rule=${localHostRule "start"}"
|
||||||
|
"-l=traefik.http.services.homepage.loadbalancer.server.port=3000"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"/tank/config/homepage:/app/config"
|
||||||
|
"/tank/secrets/deluge.pass:/app/config/secrets/deluge.pass"
|
||||||
|
"/tank/secrets/jellyfin.key:/app/config/secrets/jellyfin.key"
|
||||||
|
"/tank/secrets/radarr.key:/app/config/secrets/radarr.key"
|
||||||
|
"/tank/secrets/sonarr.key:/app/config/secrets/sonarr.key"
|
||||||
|
"/var/run/podman/podman.sock:/var/run/docker.sock:ro"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
HOMEPAGE_FILE_JELLYFIN_KEY = "/app/config/secrets/jellyfin.key";
|
||||||
|
HOMEPAGE_FILE_RADARR_KEY = "/app/config/secrets/radarr.key";
|
||||||
|
HOMEPAGE_FILE_SONARR_KEY = "/app/config/secrets/sonarr.key";
|
||||||
|
HOMEPAGE_FILE_READARR_KEY = "/app/config/secrets/readarr.key";
|
||||||
|
HOMEPAGE_FILE_DELUGE_PASSWORD = "/app/config/secrets/deluge.pass";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
scrutiny = {
|
||||||
|
image = "ghcr.io/analogj/scrutiny:master-omnibus";
|
||||||
|
autoStart = true;
|
||||||
|
extraOptions = [
|
||||||
|
"-l=traefik.enable=true"
|
||||||
|
"-l=traefik.http.routers.scrutiny.rule=${localHostRule "scrutiny"}"
|
||||||
|
"-l=traefik.http.services.scrutiny.loadbalancer.server.port=8080"
|
||||||
|
"-l=homepage.group=Infra"
|
||||||
|
"-l=homepage.name=Scrutiny"
|
||||||
|
"-l=homepage.icon=scrutiny-light.png"
|
||||||
|
"-l=homepage.href=https://scrutiny.${domain}"
|
||||||
|
"-l=homepage.description=S.M.A.R.T. monitoring"
|
||||||
|
"-l=homepage.widget.type=scrutiny"
|
||||||
|
"-l=homepage.widget.url=http://scrutiny:8080"
|
||||||
|
"--cap-add=SYS_RAWIO"
|
||||||
|
"--device=/dev/sda:/dev/sda"
|
||||||
|
"--device=/dev/sdb:/dev/sdb"
|
||||||
|
"--device=/dev/sdc:/dev/sdc"
|
||||||
|
"--device=/dev/sdd:/dev/sdd"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"/run/udev:/run/udev:ro"
|
||||||
|
"/tank/config/scrutiny/config:/opt/scrutiny/config"
|
||||||
|
"/tank/config/scrutiny/influxdb:/opt/scrutiny/influxdb"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
valkey = {
|
||||||
|
image = "docker.io/valkey/valkey:7-alpine";
|
||||||
|
autoStart = true;
|
||||||
|
volumes = [
|
||||||
|
"/tank/config/valkey:/usr/local/etc/valkey"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
gitea = {
|
||||||
|
image = "gitea/gitea:latest-rootless";
|
||||||
|
autoStart = true;
|
||||||
|
dependsOn = [
|
||||||
|
"db"
|
||||||
|
];
|
||||||
|
extraOptions = [
|
||||||
|
"-l=traefik.enable=true"
|
||||||
|
"-l=traefik.http.routers.gitea.rule=${localHostRule "git"}"
|
||||||
|
"-l=traefik.http.services.gitea.loadbalancer.server.port=3000"
|
||||||
|
"-l=homepage.group=Apps"
|
||||||
|
"-l=homepage.name=Gitea"
|
||||||
|
"-l=homepage.icon=gitea.png"
|
||||||
|
"-l=homepage.href=https://git.${domain}"
|
||||||
|
"-l=homepage.description=Git Server"
|
||||||
|
];
|
||||||
|
ports = [
|
||||||
|
"2222:2222"
|
||||||
|
];
|
||||||
|
volumes = [
|
||||||
|
"/tank/git:/var/lib/gitea"
|
||||||
|
"/tank/config/gitea:/etc/gitea"
|
||||||
|
];
|
||||||
|
user = toString config.users.users.gitea.uid;
|
||||||
|
environment = {
|
||||||
|
USER_UID = toString config.users.users.gitea.uid;
|
||||||
|
USER_GID = toString config.users.groups.git.gid;
|
||||||
|
GITEA__database__DB_TYPE = "postgres";
|
||||||
|
GITEA__database__HOST = "db";
|
||||||
|
GITEA__database__NAME = "gitea";
|
||||||
|
GITEA__database__USER = "gitea";
|
||||||
|
GITEA__database__PASSWD = "gitea123";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
homepage = {
|
|
||||||
image = "ghcr.io/gethomepage/homepage:latest";
|
|
||||||
autoStart = true;
|
|
||||||
extraOptions = [
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.homepage.rule=${localHostRule "start"}"
|
|
||||||
"-l=traefik.http.services.homepage.loadbalancer.server.port=3000"
|
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/tank/config/homepage:/app/config"
|
|
||||||
"/tank/secrets/deluge.pass:/app/config/secrets/deluge.pass"
|
|
||||||
"/tank/secrets/jellyfin.key:/app/config/secrets/jellyfin.key"
|
|
||||||
"/tank/secrets/radarr.key:/app/config/secrets/radarr.key"
|
|
||||||
"/tank/secrets/sonarr.key:/app/config/secrets/sonarr.key"
|
|
||||||
"/var/run/podman/podman.sock:/var/run/docker.sock:ro"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
HOMEPAGE_FILE_JELLYFIN_KEY = "/app/config/secrets/jellyfin.key";
|
|
||||||
HOMEPAGE_FILE_RADARR_KEY = "/app/config/secrets/radarr.key";
|
|
||||||
HOMEPAGE_FILE_SONARR_KEY = "/app/config/secrets/sonarr.key";
|
|
||||||
HOMEPAGE_FILE_READARR_KEY = "/app/config/secrets/readarr.key";
|
|
||||||
HOMEPAGE_FILE_DELUGE_PASSWORD = "/app/config/secrets/deluge.pass";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
scrutiny = {
|
|
||||||
image = "ghcr.io/analogj/scrutiny:master-omnibus";
|
|
||||||
autoStart = true;
|
|
||||||
extraOptions = [
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.scrutiny.rule=${localHostRule "scrutiny"}"
|
|
||||||
"-l=traefik.http.services.scrutiny.loadbalancer.server.port=8080"
|
|
||||||
"-l=homepage.group=Infra"
|
|
||||||
"-l=homepage.name=Scrutiny"
|
|
||||||
"-l=homepage.icon=scrutiny-light.png"
|
|
||||||
"-l=homepage.href=https://scrutiny.${domain}"
|
|
||||||
"-l=homepage.description=S.M.A.R.T. monitoring"
|
|
||||||
"-l=homepage.widget.type=scrutiny"
|
|
||||||
"-l=homepage.widget.url=http://scrutiny:8080"
|
|
||||||
"--cap-add=SYS_RAWIO"
|
|
||||||
"--device=/dev/sda:/dev/sda"
|
|
||||||
"--device=/dev/sdb:/dev/sdb"
|
|
||||||
"--device=/dev/sdc:/dev/sdc"
|
|
||||||
"--device=/dev/sdd:/dev/sdd"
|
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/run/udev:/run/udev:ro"
|
|
||||||
"/tank/config/scrutiny/config:/opt/scrutiny/config"
|
|
||||||
"/tank/config/scrutiny/influxdb:/opt/scrutiny/influxdb"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
valkey = {
|
|
||||||
image = "docker.io/valkey/valkey:7-alpine";
|
|
||||||
autoStart = true;
|
|
||||||
volumes = [
|
|
||||||
"/tank/config/valkey:/usr/local/etc/valkey"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
gitea = {
|
|
||||||
image = "gitea/gitea:latest-rootless";
|
|
||||||
autoStart = true;
|
|
||||||
dependsOn = [
|
|
||||||
"db"
|
|
||||||
];
|
|
||||||
extraOptions = [
|
|
||||||
"-l=traefik.enable=true"
|
|
||||||
"-l=traefik.http.routers.gitea.rule=${localHostRule "git"}"
|
|
||||||
"-l=traefik.http.services.gitea.loadbalancer.server.port=3000"
|
|
||||||
"-l=homepage.group=Apps"
|
|
||||||
"-l=homepage.name=Gitea"
|
|
||||||
"-l=homepage.icon=gitea.png"
|
|
||||||
"-l=homepage.href=https://git.${domain}"
|
|
||||||
"-l=homepage.description=Git Server"
|
|
||||||
];
|
|
||||||
ports = [
|
|
||||||
"2222:2222"
|
|
||||||
];
|
|
||||||
volumes = [
|
|
||||||
"/tank/git:/var/lib/gitea"
|
|
||||||
"/tank/config/gitea:/etc/gitea"
|
|
||||||
];
|
|
||||||
user = toString config.users.users.gitea.uid;
|
|
||||||
environment = {
|
|
||||||
USER_UID = toString config.users.users.gitea.uid;
|
|
||||||
USER_GID = toString config.users.groups.git.gid;
|
|
||||||
GITEA__database__DB_TYPE = "postgres";
|
|
||||||
GITEA__database__HOST= "db";
|
|
||||||
GITEA__database__NAME="gitea";
|
|
||||||
GITEA__database__USER="gitea";
|
|
||||||
GITEA__database__PASSWD="gitea123";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +1,31 @@
|
|||||||
|
{ config, ... }:
|
||||||
{ config, pkgs, ... }:
|
let
|
||||||
let inherit (import ./lib.nix config) hostRule; in
|
inherit (import ./lib.nix config) hostRule;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
virtualisation.oci-containers.containers.nextcloud = {
|
virtualisation.oci-containers.containers.nextcloud = {
|
||||||
image = "docker.io/library/nextcloud:latest";
|
image = "docker.io/library/nextcloud:latest";
|
||||||
extraOptions = [
|
extraOptions = [
|
||||||
"-l=traefik.enable=true"
|
"-l=traefik.enable=true"
|
||||||
"-l=traefik.http.routers.nextcloud.rule=${hostRule "cloud"}"
|
"-l=traefik.http.routers.nextcloud.rule=${hostRule "cloud"}"
|
||||||
"-l=traefik.http.services.nextcloud.loadbalancer.server.port=80"
|
"-l=traefik.http.services.nextcloud.loadbalancer.server.port=80"
|
||||||
"-l=homepage.group=Apps"
|
"-l=homepage.group=Apps"
|
||||||
"-l=homepage.name=NextCloud"
|
"-l=homepage.name=NextCloud"
|
||||||
"-l=homepage.icon=nextcloud.png"
|
"-l=homepage.icon=nextcloud.png"
|
||||||
"-l=homepage.href=https://cloud.${config.domainName}"
|
"-l=homepage.href=https://cloud.${config.domainName}"
|
||||||
"-l=homepage.description=Productivity suite"
|
"-l=homepage.description=Productivity suite"
|
||||||
"-l=homepage.widget.type=nextcloud"
|
"-l=homepage.widget.type=nextcloud"
|
||||||
"-l=homepage.widget.url=http://nextcloud:8080"
|
"-l=homepage.widget.url=http://nextcloud.havenisms.com:8080"
|
||||||
];
|
];
|
||||||
volumes = [
|
volumes = [
|
||||||
"/tank/nextcloud:/var/www/html"
|
"/tank/nextcloud:/var/www/html"
|
||||||
];
|
];
|
||||||
environment = {
|
environment = {
|
||||||
POSTGRES_HOST = "db";
|
POSTGRES_HOST = "db";
|
||||||
POSTGRES_DB = "nextcloud";
|
POSTGRES_DB = "nextcloud";
|
||||||
POSTGRES_USER = "nextcloud";
|
POSTGRES_USER = "nextcloud";
|
||||||
POSTGRES_PASSWORD = "nextcloud123";
|
POSTGRES_PASSWORD = "nextcloud123";
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user