Compare commits
3 Commits
5709333bcb
...
b8b8dd58e1
| Author | SHA1 | Date | |
|---|---|---|---|
|
b8b8dd58e1
|
|||
|
88b506b08c
|
|||
|
93a7645d3f
|
@@ -32,6 +32,13 @@
|
|||||||
./services/jellyfin-qbittorrent-monitor.nix
|
./services/jellyfin-qbittorrent-monitor.nix
|
||||||
./services/bitmagnet.nix
|
./services/bitmagnet.nix
|
||||||
|
|
||||||
|
./services/prowlarr.nix
|
||||||
|
./services/sonarr.nix
|
||||||
|
./services/radarr.nix
|
||||||
|
./services/bazarr.nix
|
||||||
|
./services/jellyseerr.nix
|
||||||
|
./services/recyclarr.nix
|
||||||
|
|
||||||
./services/soulseek.nix
|
./services/soulseek.nix
|
||||||
|
|
||||||
./services/ups.nix
|
./services/ups.nix
|
||||||
@@ -192,6 +199,7 @@
|
|||||||
hostName = hostname;
|
hostName = hostname;
|
||||||
hostId = "0f712d56";
|
hostId = "0f712d56";
|
||||||
firewall.enable = true;
|
firewall.enable = true;
|
||||||
|
firewall.trustedInterfaces = [ "wg-br" ];
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
enableIPv6 = false;
|
enableIPv6 = false;
|
||||||
|
|
||||||
|
|||||||
34
flake.nix
34
flake.nix
@@ -125,6 +125,11 @@
|
|||||||
ntfy = 2586;
|
ntfy = 2586;
|
||||||
livekit = 7880;
|
livekit = 7880;
|
||||||
lk_jwt = 8081;
|
lk_jwt = 8081;
|
||||||
|
prowlarr = 9696;
|
||||||
|
sonarr = 8989;
|
||||||
|
radarr = 7878;
|
||||||
|
bazarr = 6767;
|
||||||
|
jellyseerr = 5055;
|
||||||
};
|
};
|
||||||
|
|
||||||
https = {
|
https = {
|
||||||
@@ -193,6 +198,35 @@
|
|||||||
signalBackupDir = "/${zpool_ssds}/bak/signal";
|
signalBackupDir = "/${zpool_ssds}/bak/signal";
|
||||||
grayjayBackupDir = "/${zpool_ssds}/bak/grayjay";
|
grayjayBackupDir = "/${zpool_ssds}/bak/grayjay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sonarr = {
|
||||||
|
dataDir = services_dir + "/sonarr";
|
||||||
|
};
|
||||||
|
|
||||||
|
radarr = {
|
||||||
|
dataDir = services_dir + "/radarr";
|
||||||
|
};
|
||||||
|
|
||||||
|
prowlarr = {
|
||||||
|
dataDir = services_dir + "/prowlarr";
|
||||||
|
};
|
||||||
|
|
||||||
|
bazarr = {
|
||||||
|
dataDir = services_dir + "/bazarr";
|
||||||
|
};
|
||||||
|
|
||||||
|
jellyseerr = {
|
||||||
|
configDir = services_dir + "/jellyseerr";
|
||||||
|
};
|
||||||
|
|
||||||
|
recyclarr = {
|
||||||
|
dataDir = services_dir + "/recyclarr";
|
||||||
|
};
|
||||||
|
|
||||||
|
media = {
|
||||||
|
moviesDir = torrents_path + "/media/movies";
|
||||||
|
tvDir = torrents_path + "/media/tv";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
|
|||||||
34
services/bazarr.nix
Normal file
34
services/bazarr.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
service_configs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.serviceMountWithZpool "bazarr" service_configs.zpool_ssds [
|
||||||
|
service_configs.bazarr.dataDir
|
||||||
|
])
|
||||||
|
(lib.serviceMountWithZpool "bazarr" service_configs.zpool_hdds [
|
||||||
|
service_configs.torrents_path
|
||||||
|
])
|
||||||
|
(lib.serviceFilePerms "bazarr" [
|
||||||
|
"Z ${service_configs.bazarr.dataDir} 0700 ${config.services.bazarr.user} ${config.services.bazarr.group}"
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
|
services.bazarr = {
|
||||||
|
enable = true;
|
||||||
|
listenPort = service_configs.ports.bazarr;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."bazarr.${service_configs.https.domain}".extraConfig = ''
|
||||||
|
import ${config.age.secrets.caddy_auth.path}
|
||||||
|
reverse_proxy :${builtins.toString service_configs.ports.bazarr}
|
||||||
|
'';
|
||||||
|
|
||||||
|
users.users.${config.services.bazarr.user}.extraGroups = [
|
||||||
|
service_configs.media_group
|
||||||
|
];
|
||||||
|
}
|
||||||
43
services/jellyseerr.nix
Normal file
43
services/jellyseerr.nix
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
service_configs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.serviceMountWithZpool "jellyseerr" service_configs.zpool_ssds [
|
||||||
|
service_configs.jellyseerr.configDir
|
||||||
|
])
|
||||||
|
(lib.serviceFilePerms "jellyseerr" [
|
||||||
|
"Z ${service_configs.jellyseerr.configDir} 0700 jellyseerr jellyseerr"
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
|
services.jellyseerr = {
|
||||||
|
enable = true;
|
||||||
|
port = service_configs.ports.jellyseerr;
|
||||||
|
configDir = service_configs.jellyseerr.configDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.jellyseerr.serviceConfig = {
|
||||||
|
DynamicUser = lib.mkForce false;
|
||||||
|
User = "jellyseerr";
|
||||||
|
Group = "jellyseerr";
|
||||||
|
ReadWritePaths = [ service_configs.jellyseerr.configDir ];
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.jellyseerr = {
|
||||||
|
isSystemUser = true;
|
||||||
|
group = "jellyseerr";
|
||||||
|
home = service_configs.jellyseerr.configDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.groups.jellyseerr = { };
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."jellyseerr.${service_configs.https.domain}".extraConfig = ''
|
||||||
|
# import ${config.age.secrets.caddy_auth.path}
|
||||||
|
reverse_proxy :${builtins.toString service_configs.ports.jellyseerr}
|
||||||
|
'';
|
||||||
|
}
|
||||||
26
services/prowlarr.nix
Normal file
26
services/prowlarr.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
service_configs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.serviceMountWithZpool "prowlarr" service_configs.zpool_ssds [
|
||||||
|
service_configs.prowlarr.dataDir
|
||||||
|
])
|
||||||
|
(lib.vpnNamespaceOpenPort service_configs.ports.prowlarr "prowlarr")
|
||||||
|
];
|
||||||
|
|
||||||
|
services.prowlarr = {
|
||||||
|
enable = true;
|
||||||
|
dataDir = service_configs.prowlarr.dataDir;
|
||||||
|
settings.server.port = service_configs.ports.prowlarr;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."prowlarr.${service_configs.https.domain}".extraConfig = ''
|
||||||
|
import ${config.age.secrets.caddy_auth.path}
|
||||||
|
reverse_proxy ${config.vpnNamespaces.wg.namespaceAddress}:${builtins.toString service_configs.ports.prowlarr}
|
||||||
|
'';
|
||||||
|
}
|
||||||
36
services/radarr.nix
Normal file
36
services/radarr.nix
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
service_configs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.serviceMountWithZpool "radarr" service_configs.zpool_ssds [
|
||||||
|
service_configs.radarr.dataDir
|
||||||
|
])
|
||||||
|
(lib.serviceMountWithZpool "radarr" service_configs.zpool_hdds [
|
||||||
|
service_configs.torrents_path
|
||||||
|
])
|
||||||
|
(lib.serviceFilePerms "radarr" [
|
||||||
|
"Z ${service_configs.radarr.dataDir} 0700 ${config.services.radarr.user} ${config.services.radarr.group}"
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
|
services.radarr = {
|
||||||
|
enable = true;
|
||||||
|
dataDir = service_configs.radarr.dataDir;
|
||||||
|
settings.server.port = service_configs.ports.radarr;
|
||||||
|
settings.update.mechanism = "external";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."radarr.${service_configs.https.domain}".extraConfig = ''
|
||||||
|
import ${config.age.secrets.caddy_auth.path}
|
||||||
|
reverse_proxy :${builtins.toString service_configs.ports.radarr}
|
||||||
|
'';
|
||||||
|
|
||||||
|
users.users.${config.services.radarr.user}.extraGroups = [
|
||||||
|
service_configs.media_group
|
||||||
|
];
|
||||||
|
}
|
||||||
39
services/recyclarr.nix
Normal file
39
services/recyclarr.nix
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
service_configs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.serviceMountWithZpool "recyclarr" service_configs.zpool_ssds [
|
||||||
|
service_configs.recyclarr.dataDir
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d ${service_configs.recyclarr.dataDir} 0755 root root -"
|
||||||
|
"d ${service_configs.recyclarr.dataDir}/data 0755 root root -"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services.recyclarr = {
|
||||||
|
description = "Recyclarr TRaSH Guides Sync";
|
||||||
|
after = [ "network-online.target" "radarr.service" "sonarr.service" ];
|
||||||
|
wants = [ "network-online.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = "${pkgs.recyclarr}/bin/recyclarr sync --config ${service_configs.recyclarr.dataDir}/recyclarr.yml --app-data ${service_configs.recyclarr.dataDir}/data";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.recyclarr = {
|
||||||
|
description = "Run Recyclarr daily";
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "daily";
|
||||||
|
Persistent = true;
|
||||||
|
RandomizedDelaySec = "1h";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
42
services/sonarr.nix
Normal file
42
services/sonarr.nix
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
service_configs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(lib.serviceMountWithZpool "sonarr" service_configs.zpool_ssds [
|
||||||
|
service_configs.sonarr.dataDir
|
||||||
|
])
|
||||||
|
(lib.serviceMountWithZpool "sonarr" service_configs.zpool_hdds [
|
||||||
|
service_configs.torrents_path
|
||||||
|
])
|
||||||
|
(lib.serviceFilePerms "sonarr" [
|
||||||
|
"Z ${service_configs.sonarr.dataDir} 0700 ${config.services.sonarr.user} ${config.services.sonarr.group}"
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /torrents/media 2775 root ${service_configs.media_group} -"
|
||||||
|
"d ${service_configs.media.tvDir} 2775 root ${service_configs.media_group} -"
|
||||||
|
"d ${service_configs.media.moviesDir} 2775 root ${service_configs.media_group} -"
|
||||||
|
];
|
||||||
|
|
||||||
|
services.sonarr = {
|
||||||
|
enable = true;
|
||||||
|
dataDir = service_configs.sonarr.dataDir;
|
||||||
|
settings.server.port = service_configs.ports.sonarr;
|
||||||
|
settings.update.mechanism = "external";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts."sonarr.${service_configs.https.domain}".extraConfig = ''
|
||||||
|
import ${config.age.secrets.caddy_auth.path}
|
||||||
|
reverse_proxy :${builtins.toString service_configs.ports.sonarr}
|
||||||
|
'';
|
||||||
|
|
||||||
|
users.users.${config.services.sonarr.user}.extraGroups = [
|
||||||
|
service_configs.media_group
|
||||||
|
];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user