blob: 7f4c031ce1506da8f3938041e087f9dd4a43e489 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
{ config, lib, ... }: with lib; let
multimediaUsernames = [
"prowlarr"
"sonarr"
"radarr"
"bazarr"
"jellyfin"
"transmission"
];
mkMultimediaUsers = names: mergeAttrsList (imap0 (i: name: {${name} = {
uid = 2007 + i;
isSystemUser = true;
group = name;
createHome = false;
};}) names);
mkMultimediaGroups = names: mergeAttrsList (map (name: {${name} = { };}) names);
in {
virtualisation.docker.rootless = {
enable = true;
setSocketVariable = true;
};
users.groups = {
multimedia = {
gid = 1994;
members = multimediaUsernames;
};
} // mkMultimediaGroups multimediaUsernames;
users.users = {
${my.username}.extraGroups = [ "multimedia" ];
} // mkMultimediaUsers multimediaUsernames;
systemd.tmpfiles.rules = [
"d /data 0770 - multimedia - -"
];
services.nginx = {
virtualHosts = {
"sonarr.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:8989"; }; };
"radarr.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:7878"; }; };
"bazarr.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:${toString config.services.bazarr.listenPort}"; }; };
# "readarr.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:8787"; }; };
"prowlarr.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:9696"; }; };
"transmission.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:9091"; }; };
"jellyfin.${my.domain}" = { locations."/" = { proxyPass = "http://127.0.0.1:8096"; }; };
};
};
virtualisation.oci-containers = {
backend = "docker";
containers = {
prowlarr = {
image = "linuxserver/prowlarr";
extraOptions = ["--net=host"];
environment = {
PUID = "${toString config.users.users.prowlarr.uid}";
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
"/data/config/prowlarr/data:/config"
];
};
bazarr = {
image = "linuxserver/bazarr";
extraOptions = ["--net=host"];
environment = {
PUID = "${toString config.users.users.bazarr.uid}";
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
"/data/media:/data"
"/data/config/bazarr/data:/config"
];
};
radarr = {
image = "linuxserver/radarr";
extraOptions = ["--net=host"];
environment = {
PUID = "${toString config.users.users.radarr.uid}";
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
"/data:/data"
"/data/config/radarr/data:/config"
];
};
sonarr = {
image = "linuxserver/sonarr";
extraOptions = ["--net=host"];
environment = {
PUID = "${toString config.users.users.sonarr.uid}";
PGID = "${toString config.users.groups.multimedia.gid}";
};
volumes = [
"/data:/data"
"/data/config/sonarr/data:/config"
];
};
jellyfin = {
image = "jellyfin/jellyfin";
extraOptions = ["--net=host"];
user = "${toString config.users.users.jellyfin.uid}:${toString config.users.groups.multimedia.gid}";
volumes = [
"/data/media:/media"
"/data/config/jellyfin/config:/config"
"/data/config/jellyfin/cache:/cache"
];
};
transmission = {
image = "haugene/transmission-openvpn";
extraOptions = ["--cap-add=NET_ADMIN" "--group-add=${toString config.users.groups.multimedia.gid}"];
volumes = [
"/data/config/ovpn:/etc/openvpn/custom"
"/data/config/transmission:/config"
"/data/torrents:/data/torrents"
];
ports = [
"9091:9091"
"5299:5299"
"8081:80"
];
environmentFiles = [
config.secrets.transmission.path
];
};
};
};
}
|