mirror of
https://gitlab.com/upRootNutrition/dotfiles.git
synced 2025-07-05 02:45:01 -05:00
refactor: standardized instance records
This commit is contained in:
parent
6b2a601776
commit
a32993db4c
40 changed files with 310 additions and 239 deletions
|
@ -5,16 +5,16 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
acmeLabel = "Acme";
|
label = "Acme";
|
||||||
acmeName = "acme";
|
name = "acme";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = acmeLabel;
|
label = label;
|
||||||
name = acmeName;
|
name = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = sslPath;
|
path0 = sslPath;
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${acmeName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{ instancesFunctions }:
|
{ instancesFunctions }:
|
||||||
let
|
let
|
||||||
inherit (instancesFunctions)
|
inherit (instancesFunctions)
|
||||||
audiobookshelfLabel
|
|
||||||
audiobookshelfName
|
|
||||||
domain0
|
domain0
|
||||||
servicePath
|
servicePath
|
||||||
sslPath
|
sslPath
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
audiobookshelfLabel = "Audiobookshelf";
|
||||||
|
audiobookshelfName = "audiobookshelf";
|
||||||
audiobookshelfSubdomain = "books";
|
audiobookshelfSubdomain = "books";
|
||||||
audiobookshelfDomain = "${audiobookshelfSubdomain}.${domain0}";
|
audiobookshelfDomain = "${audiobookshelfSubdomain}.${domain0}";
|
||||||
in
|
in
|
||||||
|
|
|
@ -7,32 +7,32 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
forgejoLabel = "Forgejo";
|
label = "Forgejo";
|
||||||
forgejoName = "forgejo";
|
name = "forgejo";
|
||||||
forgejoSubdomain = "source";
|
subdomain = "source";
|
||||||
forgejoDomain = "${forgejoSubdomain}.${domain3}";
|
domain = "${subdomain}.${domain3}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = forgejoLabel;
|
label = label;
|
||||||
name = forgejoName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${domain3}";
|
address0 = "noreply@${domain3}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${forgejoName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = forgejoDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = forgejoSubdomain;
|
subdomain = subdomain;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${forgejoLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 3033;
|
port0 = 3033;
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${forgejoSubdomain}.${domain3}/fullchain.pem";
|
cert = "${sslPath}/${subdomain}.${domain3}/fullchain.pem";
|
||||||
key = "${sslPath}/${forgejoSubdomain}.${domain3}/key.pem";
|
key = "${sslPath}/${subdomain}.${domain3}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,32 +7,32 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
glanceLabel = "Glance";
|
label = "Glance";
|
||||||
glanceName = "glance";
|
name = "glance";
|
||||||
glanceSubdomain = "dashboard";
|
subdomain = "dashboard";
|
||||||
glanceDomain = "${glanceSubdomain}.${domain0}";
|
domain = "${subdomain}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = glanceLabel;
|
label = label;
|
||||||
name = glanceName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${domain0}";
|
address0 = "noreply@${domain0}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${glanceName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = glanceDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = glanceSubdomain;
|
subdomain = subdomain;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${glanceLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 3434;
|
port0 = 3434;
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${glanceSubdomain}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${subdomain}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${glanceSubdomain}.${domain0}/key.pem";
|
key = "${sslPath}/${subdomain}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,27 +2,27 @@
|
||||||
let
|
let
|
||||||
inherit (instancesFunctions)
|
inherit (instancesFunctions)
|
||||||
domain0
|
domain0
|
||||||
jellyfinLabel
|
|
||||||
jellyfinName
|
|
||||||
servicePath
|
servicePath
|
||||||
sslPath
|
sslPath
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
jellyfinDomain = "${jellyfinName}.${domain0}";
|
label = "Jellyfin";
|
||||||
|
name = "jellyfin";
|
||||||
|
domain = "${name}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = jellyfinLabel;
|
label = label;
|
||||||
name = jellyfinName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${jellyfinName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = jellyfinDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = jellyfinName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${jellyfinLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
path1 = "${servicePath}/${jellyfinLabel}/cache";
|
path1 = "${servicePath}/${label}/cache";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 5055; # Jellyseer
|
port0 = 5055; # Jellyseer
|
||||||
|
@ -30,7 +30,7 @@ in
|
||||||
port2 = 8920; # Jellyfin HTTPS
|
port2 = 8920; # Jellyfin HTTPS
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${jellyfinName}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${jellyfinName}.${domain0}/key.pem";
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
{ instancesFunctions }:
|
|
||||||
let
|
|
||||||
inherit (instancesFunctions)
|
|
||||||
domain0
|
|
||||||
servicePath
|
|
||||||
sslPath
|
|
||||||
sopsPath
|
|
||||||
;
|
|
||||||
|
|
||||||
kanboardLabel = "Kanboard";
|
|
||||||
kanboardName = "kanboard";
|
|
||||||
kanboardSubdomain = "todo";
|
|
||||||
kanboardDomain = "${kanboardSubdomain}.${domain0}";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
label = kanboardLabel;
|
|
||||||
name = kanboardName;
|
|
||||||
email = {
|
|
||||||
address0 = "noreply@${kanboardName}.${domain0}";
|
|
||||||
};
|
|
||||||
sops = {
|
|
||||||
path0 = "${sopsPath}/${kanboardName}";
|
|
||||||
};
|
|
||||||
domains = {
|
|
||||||
url0 = kanboardDomain;
|
|
||||||
};
|
|
||||||
subdomain = kanboardSubdomain;
|
|
||||||
paths = {
|
|
||||||
path0 = "${servicePath}/${kanboardLabel}";
|
|
||||||
};
|
|
||||||
ports = {
|
|
||||||
port0 = 3128;
|
|
||||||
};
|
|
||||||
ssl = {
|
|
||||||
cert = "${sslPath}/${kanboardSubdomain}.${domain0}/fullchain.pem";
|
|
||||||
key = "${sslPath}/${kanboardSubdomain}.${domain0}/key.pem";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -7,31 +7,31 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
mastodonLabel = "Mastodon";
|
label = "Mastodon";
|
||||||
mastodonName = "mastodon";
|
name = "mastodon";
|
||||||
mastodonSubdomain = "social";
|
subdomain = "social";
|
||||||
mastodonDomain = "${mastodonSubdomain}.${domain3}";
|
domain = "${subdomain}.${domain3}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = mastodonLabel;
|
label = label;
|
||||||
name = mastodonName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${domain3}";
|
address0 = "noreply@${domain3}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = mastodonDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = mastodonSubdomain;
|
subdomain = subdomain;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${mastodonName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${mastodonLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
path1 = "";
|
path1 = "";
|
||||||
path2 = "";
|
path2 = "";
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${mastodonSubdomain}.${domain3}/fullchain.pem";
|
cert = "${sslPath}/${subdomain}.${domain3}/fullchain.pem";
|
||||||
key = "${sslPath}/${mastodonSubdomain}.${domain3}/key.pem";
|
key = "${sslPath}/${subdomain}.${domain3}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,18 +5,18 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
matrixLabel = "Matrix";
|
label = "Matrix";
|
||||||
matrixName = "matrix";
|
name = "matrix";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = matrixLabel;
|
label = label;
|
||||||
name = matrixName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${matrixName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
subdomain = matrixName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${matrixLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
path1 = "";
|
path1 = "";
|
||||||
path2 = "";
|
path2 = "";
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,24 +7,24 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
minecraftLabel = "Minecraft";
|
label = "Minecraft";
|
||||||
minecraftName = "minecraft";
|
name = "minecraft";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = minecraftLabel;
|
label = label;
|
||||||
name = minecraftName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${minecraftName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
subdomain = minecraftName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${minecraftLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 43000; # Minecraft (Brix on Nix)
|
port0 = 43000; # Minecraft (Brix on Nix)
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${minecraftName}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${minecraftName}.${domain0}/key.pem";
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,31 +7,31 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
nextcloudLabel = "Nextcloud";
|
label = "Nextcloud";
|
||||||
nextcloudName = "nextcloud";
|
name = "nextcloud";
|
||||||
nextcloudDomain = "${nextcloudName}.${domain0}";
|
domain = "${name}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = nextcloudLabel;
|
label = label;
|
||||||
name = nextcloudName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${nextcloudName}.${domain0}";
|
address0 = "noreply@${name}.${domain0}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${nextcloudName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = nextcloudDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = nextcloudName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${nextcloudLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 8354; # Nextcloud
|
port0 = 8354; # Nextcloud
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${nextcloudName}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${nextcloudName}.${domain0}/key.pem";
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,14 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
nginxLabel = "Nginx";
|
label = "Nginx";
|
||||||
nginxName = "nginx";
|
name = "nginx";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = nginxLabel;
|
label = label;
|
||||||
name = nginxName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${nginxName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 8080;
|
port0 = 8080;
|
||||||
|
|
|
@ -7,30 +7,30 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
ollamaLabel = "Ollama";
|
label = "Ollama";
|
||||||
ollamaName = "ollama";
|
name = "ollama";
|
||||||
ollamaDomain = "${ollamaName}.${domain0}";
|
domain = "${name}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = ollamaLabel;
|
label = label;
|
||||||
name = ollamaName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${ollamaName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = ollamaDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = ollamaName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${ollamaLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
path1 = "/mnt/media/storage/${ollamaName}";
|
path1 = "/mnt/media/storage/${name}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 8088; # Open-WebUI (Ollama Front End)
|
port0 = 8088; # Open-WebUI (Ollama Front End)
|
||||||
port1 = 11434; # Ollama API
|
port1 = 11434; # Ollama API
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${ollamaName}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${ollamaName}.${domain0}/key.pem";
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,31 +7,31 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
owncastLabel = "Owncast";
|
label = "Owncast";
|
||||||
owncastName = "owncast";
|
name = "owncast";
|
||||||
owncastSubdomain = "stream";
|
subdomain = "stream";
|
||||||
owncastDomain = "${owncastSubdomain}.${domain1}";
|
domain = "${subdomain}.${domain1}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = owncastLabel;
|
label = label;
|
||||||
name = owncastName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${owncastName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = owncastDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = owncastSubdomain;
|
subdomain = subdomain;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${owncastLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
path1 = "/mnt/media/storage/${owncastName}";
|
path1 = "/mnt/media/storage/${name}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 9454;
|
port0 = 9454;
|
||||||
port1 = 1935;
|
port1 = 1935;
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${owncastSubdomain}.${domain1}/fullchain.pem";
|
cert = "${sslPath}/${subdomain}.${domain1}/fullchain.pem";
|
||||||
key = "${sslPath}/${owncastSubdomain}.${domain1}/key.pem";
|
key = "${sslPath}/${subdomain}.${domain1}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,26 +7,26 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
peertubeLabel = "PeerTube";
|
label = "PeerTube";
|
||||||
peertubeName = "peertube";
|
name = "peertube";
|
||||||
peertubeSubdomain = "video";
|
subdomain = "video";
|
||||||
peertubeDomain = "${peertubeSubdomain}.${domain3}";
|
domain = "${subdomain}.${domain3}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = peertubeLabel;
|
label = label;
|
||||||
name = peertubeName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${domain3}";
|
address0 = "noreply@${domain3}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${peertubeName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = peertubeDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = peertubeSubdomain;
|
subdomain = subdomain;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${peertubeLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 9000; # HTTP
|
port0 = 9000; # HTTP
|
||||||
|
@ -36,7 +36,7 @@ in
|
||||||
port4 = 52800;
|
port4 = 52800;
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${peertubeSubdomain}.${domain3}/fullchain.pem";
|
cert = "${sslPath}/${subdomain}.${domain3}/fullchain.pem";
|
||||||
key = "${sslPath}/${peertubeSubdomain}.${domain3}/key.pem";
|
key = "${sslPath}/${subdomain}.${domain3}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
35
modules/config/instances/config/podgrab.nix
Normal file
35
modules/config/instances/config/podgrab.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{ instancesFunctions }:
|
||||||
|
let
|
||||||
|
inherit (instancesFunctions)
|
||||||
|
domain0
|
||||||
|
servicePath
|
||||||
|
sslPath
|
||||||
|
sopsPath
|
||||||
|
;
|
||||||
|
|
||||||
|
label = "Podgrab";
|
||||||
|
name = "podgrab";
|
||||||
|
subdomain = "podcasts";
|
||||||
|
domain = "${subdomain}.${domain0}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
label = label;
|
||||||
|
name = name;
|
||||||
|
sops = {
|
||||||
|
path0 = "${sopsPath}/${name}";
|
||||||
|
};
|
||||||
|
domains = {
|
||||||
|
url0 = domain;
|
||||||
|
};
|
||||||
|
subdomain = name;
|
||||||
|
paths = {
|
||||||
|
path0 = "${servicePath}/${label}";
|
||||||
|
};
|
||||||
|
ports = {
|
||||||
|
port0 = 4242;
|
||||||
|
};
|
||||||
|
ssl = {
|
||||||
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
|
};
|
||||||
|
}
|
|
@ -7,22 +7,22 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
postfixLabel = "Postfix";
|
label = "Postfix";
|
||||||
postfixName = "postfix";
|
name = "postfix";
|
||||||
postfixDomain = "${postfixName}.${domain3}";
|
domain = "${name}.${domain3}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = postfixLabel;
|
label = label;
|
||||||
name = postfixName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${postfixName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = postfixDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = postfixName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${postfixLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${domain3}/fullchain.pem";
|
cert = "${sslPath}/${domain3}/fullchain.pem";
|
||||||
|
|
|
@ -5,17 +5,17 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
postgresLabel = "PostgreSQL";
|
label = "PostgreSQL";
|
||||||
postgresName = "postgres";
|
name = "postgres";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = postgresLabel;
|
label = label;
|
||||||
name = postgresName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${postgresName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${postgresLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 5432;
|
port0 = 5432;
|
||||||
|
|
|
@ -4,14 +4,14 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
sambaLabel = "Samba";
|
label = "Samba";
|
||||||
sambaName = "samba";
|
name = "samba";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = sambaLabel;
|
label = label;
|
||||||
name = sambaName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${sambaName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
paths = {
|
paths = {
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,32 +7,32 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
searxLabel = "SearXNG";
|
label = "SearXNG";
|
||||||
searxName = "searx";
|
name = "searx";
|
||||||
searxSubdomain = "search";
|
subdomain = "search";
|
||||||
searxDomain = "${searxSubdomain}.${domain0}";
|
domain = "${subdomain}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = searxLabel;
|
label = label;
|
||||||
name = searxName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${domain0}";
|
address0 = "noreply@${domain0}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${searxName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = searxDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = searxSubdomain;
|
subdomain = subdomain;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${searxLabel}";
|
path0 = "${servicePath}/${label}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 8888;
|
port0 = 8888;
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${searxSubdomain}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${subdomain}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${searxSubdomain}.${domain0}/key.pem";
|
key = "${sslPath}/${subdomain}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,27 +6,27 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
syncthingLabel = "Syncthing";
|
label = "Syncthing";
|
||||||
syncthingName = "syncthing";
|
name = "syncthing";
|
||||||
syncthingDomain = "${syncthingName}.${domain0}";
|
domain = "${name}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = syncthingLabel;
|
label = label;
|
||||||
name = syncthingName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${syncthingName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = syncthingDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = syncthingName;
|
subdomain = name;
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 8388; # Syncthing (WebUI)
|
port0 = 8388; # Syncthing (WebUI)
|
||||||
port1 = 21027; # Syncthing (Discovery)
|
port1 = 21027; # Syncthing (Discovery)
|
||||||
port2 = 22000; # Syncthing (Transfer)
|
port2 = 22000; # Syncthing (Transfer)
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${syncthingName}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${syncthingName}.${domain0}/key.pem";
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,14 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
synologyLabel = "Synology";
|
label = "Synology";
|
||||||
synologyName = "synology";
|
name = "synology";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = synologyLabel;
|
label = label;
|
||||||
name = synologyName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${synologyName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 5001; # Synology HTTPS
|
port0 = 5001; # Synology HTTPS
|
||||||
|
|
|
@ -6,17 +6,17 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
upRootNutritionLabel = "upRootNutrition";
|
label = "upRootNutrition";
|
||||||
upRootNutritionName = "uprootnutrition";
|
name = "uprootnutrition";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = upRootNutritionLabel;
|
label = label;
|
||||||
name = upRootNutritionName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "nick@${domain3}";
|
address0 = "nick@${domain3}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${upRootNutritionName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "/var/lib/website/dist";
|
path0 = "/var/lib/website/dist";
|
||||||
|
|
|
@ -7,31 +7,31 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
vaultwardenLabel = "Vaultwarden";
|
label = "Vaultwarden";
|
||||||
vaultwardenName = "vaultwarden";
|
name = "vaultwarden";
|
||||||
vaultwardenDomain = "${vaultwardenName}.${domain0}";
|
domain = "${name}.${domain0}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = vaultwardenLabel;
|
label = label;
|
||||||
name = vaultwardenName;
|
name = name;
|
||||||
email = {
|
email = {
|
||||||
address0 = "noreply@${vaultwardenName}.${domain0}";
|
address0 = "noreply@${name}.${domain0}";
|
||||||
};
|
};
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${vaultwardenName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
domains = {
|
domains = {
|
||||||
url0 = vaultwardenDomain;
|
url0 = domain;
|
||||||
};
|
};
|
||||||
subdomain = vaultwardenName;
|
subdomain = name;
|
||||||
paths = {
|
paths = {
|
||||||
path0 = "${servicePath}/${vaultwardenLabel}/BackupDir";
|
path0 = "${servicePath}/${label}/BackupDir";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
port0 = 8085; # Vaultwarden WebUI
|
port0 = 8085; # Vaultwarden WebUI
|
||||||
};
|
};
|
||||||
ssl = {
|
ssl = {
|
||||||
cert = "${sslPath}/${vaultwardenName}.${domain0}/fullchain.pem";
|
cert = "${sslPath}/${name}.${domain0}/fullchain.pem";
|
||||||
key = "${sslPath}/${vaultwardenName}.${domain0}/key.pem";
|
key = "${sslPath}/${name}.${domain0}/key.pem";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,14 @@ let
|
||||||
sopsPath
|
sopsPath
|
||||||
;
|
;
|
||||||
|
|
||||||
wireGuardLabel = "WireGuard";
|
label = "WireGuard";
|
||||||
wireGuardName = "wireguard";
|
name = "wireguard";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
label = wireGuardLabel;
|
label = label;
|
||||||
name = wireGuardName;
|
name = name;
|
||||||
sops = {
|
sops = {
|
||||||
path0 = "${sopsPath}/${wireGuardName}";
|
path0 = "${sopsPath}/${name}";
|
||||||
};
|
};
|
||||||
ports = {
|
ports = {
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,10 +2,6 @@ let
|
||||||
configPath = ./config;
|
configPath = ./config;
|
||||||
|
|
||||||
instancesFunctions = {
|
instancesFunctions = {
|
||||||
jellyfinLabel = "Jellyfin";
|
|
||||||
jellyfinName = "jellyfin";
|
|
||||||
audiobookshelfLabel = "Audiobookshelf";
|
|
||||||
audiobookshelfName = "audiobookshelf";
|
|
||||||
domain0 = "cloudbert.fun";
|
domain0 = "cloudbert.fun";
|
||||||
domain1 = "the-nutrivore.social";
|
domain1 = "the-nutrivore.social";
|
||||||
domain2 = "the-nutrivore.com";
|
domain2 = "the-nutrivore.com";
|
||||||
|
|
|
@ -38,8 +38,8 @@ in
|
||||||
"nextcloud"
|
"nextcloud"
|
||||||
"syncthing"
|
"syncthing"
|
||||||
"searx"
|
"searx"
|
||||||
|
"podgrab"
|
||||||
"vaultwarden"
|
"vaultwarden"
|
||||||
"kanboard"
|
|
||||||
"audiobookshelf"
|
"audiobookshelf"
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
77
modules/nixos/services/podgrab/default.nix
Normal file
77
modules/nixos/services/podgrab/default.nix
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
{ config, flake, ... }:
|
||||||
|
let
|
||||||
|
inherit (flake.config.services.instances) podgrab web;
|
||||||
|
inherit (flake.config.machines.devices) ceres;
|
||||||
|
service = podgrab;
|
||||||
|
localhost = web.localhost.address0;
|
||||||
|
host = service.domains.url0;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services = {
|
||||||
|
podgrab = {
|
||||||
|
enable = true;
|
||||||
|
port = service.ports.port0;
|
||||||
|
passwordFile = config.sops.secrets."${service.name}-pass".path;
|
||||||
|
dataDirectory = service.paths.path0;
|
||||||
|
};
|
||||||
|
caddy = {
|
||||||
|
virtualHosts = {
|
||||||
|
"${host}" = {
|
||||||
|
extraConfig = ''
|
||||||
|
redir /.well-known/carddav /remote.php/dav/ 301
|
||||||
|
redir /.well-known/caldav /remote.php/dav/ 301
|
||||||
|
|
||||||
|
reverse_proxy ${localhost}:${toString service.ports.port1}
|
||||||
|
|
||||||
|
tls ${service.ssl.cert} ${service.ssl.key}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sops =
|
||||||
|
let
|
||||||
|
sopsPath = secret: {
|
||||||
|
path = "${service.sops.path0}/${service.name}-${secret}";
|
||||||
|
owner = service.name;
|
||||||
|
mode = "600";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
secrets = builtins.listToAttrs (
|
||||||
|
map
|
||||||
|
(secret: {
|
||||||
|
name = "${service.name}-${secret}";
|
||||||
|
value = sopsPath secret;
|
||||||
|
})
|
||||||
|
[
|
||||||
|
"pass"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/var/lib/${service.name}" = {
|
||||||
|
device = service.paths.path0;
|
||||||
|
fsType = "none";
|
||||||
|
options = [
|
||||||
|
"bind"
|
||||||
|
];
|
||||||
|
depends = [
|
||||||
|
ceres.storage0.mount
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"Z ${service.paths.path0} 0755 ${service.name} ${service.name} -"
|
||||||
|
"Z ${service.sops.path0} 0755 ${service.name} ${service.name} -"
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
firewall = {
|
||||||
|
allowedTCPPorts = [
|
||||||
|
service.ports.port0
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -36,6 +36,7 @@ wireguard-CA358: ENC[AES256_GCM,data:/VewmiNfRc9/wSE7TT+z1F9LLIvr/5wPsQZ/zBwAh3d
|
||||||
wireguard-CA627: ENC[AES256_GCM,data:chmDsH2nE0nagjFRZWuxX08/Ykt+rIgCHYkMHd+7nIqihK5SebF7MJlrp84=,iv:NVOlGE7W70nQ0UM/i5WixJvDULO3Y4cLf8h+OAGHhQQ=,tag:L123ShCnr9+kIg1itIoqBA==,type:str]
|
wireguard-CA627: ENC[AES256_GCM,data:chmDsH2nE0nagjFRZWuxX08/Ykt+rIgCHYkMHd+7nIqihK5SebF7MJlrp84=,iv:NVOlGE7W70nQ0UM/i5WixJvDULO3Y4cLf8h+OAGHhQQ=,tag:L123ShCnr9+kIg1itIoqBA==,type:str]
|
||||||
glance-jellyfin: ENC[AES256_GCM,data:ozdDKgAWkA88J2j8RtiOP/aQPAt/neUOSlAZF20g510=,iv:x+VhYlnA9F/VPrzVcma4/oPelCc8kjWoTZvOs4L9Uqo=,tag:crdSDjr8Y5GH/JAF6t8Yeg==,type:str]
|
glance-jellyfin: ENC[AES256_GCM,data:ozdDKgAWkA88J2j8RtiOP/aQPAt/neUOSlAZF20g510=,iv:x+VhYlnA9F/VPrzVcma4/oPelCc8kjWoTZvOs4L9Uqo=,tag:crdSDjr8Y5GH/JAF6t8Yeg==,type:str]
|
||||||
kanboard-smtp: ENC[AES256_GCM,data:eOIEGwJZlvbJaTfDRU3IFQ==,iv:Jex01WlHG3uxqUnTSF+v1BgnNcIu4cS9OwHBCFl1m28=,tag:3Eld1FkI6AftlCyC3419BA==,type:str]
|
kanboard-smtp: ENC[AES256_GCM,data:eOIEGwJZlvbJaTfDRU3IFQ==,iv:Jex01WlHG3uxqUnTSF+v1BgnNcIu4cS9OwHBCFl1m28=,tag:3Eld1FkI6AftlCyC3419BA==,type:str]
|
||||||
|
podgrab-pass: ENC[AES256_GCM,data:Dg2eI0+yufvwfs6b3iNXtuyZR0ivL4U5LeC23isHZO4=,iv:ORB8xIBnNeJ6eQvm6Gb972Qv5xxY+cldwfUNYXaz6GA=,tag:ANAC/oyF6hqOGopYvpzaPQ==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- recipient: age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0
|
- recipient: age19dpncsdphdt2tmknjs99eghk527pvdrw0m29qjn2z2gg3et5tdtqycqhl0
|
||||||
|
@ -47,7 +48,7 @@ sops:
|
||||||
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
|
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
|
||||||
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
|
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-06-09T22:48:59Z"
|
lastmodified: "2025-06-22T16:48:14Z"
|
||||||
mac: ENC[AES256_GCM,data:NDH6wnmCs/D4SPJW5UaI96dfH0LrNG3H6khNUndFg8qWn8AG8/QJjsanSkEs+OnOE/l4nO84qAr9k9mEeqtYxDQsPehrBroSNPZQLsmB9EWCM7mHX4f9aeadm7liWWRf8ay96F3zl8PrxJNEus8cO57FKDVDqUgcldSzdaHxI00=,iv:1Jbhr61vUmByPfGquSrHWiytgasjmGMw+aXPZnuCLN8=,tag:UzgVLK+wsFSwAUKmIImN/g==,type:str]
|
mac: ENC[AES256_GCM,data:qmfkuAvJuDSyWRFuEyp1Kb2Ba4QrMAHN1WrMaN3FIbpEm/jWAw6yyEiZ5fEwr5XMkBczjkg7ioG+IFf28I6TEgZVrgAv3NKm2wkIw2SCU0Fo7+s5Hbv4vT0pra6rHwL+b9ND6K32Z7hbanGytqLtv99Y9YxyVplzPaEIa0CP4v0=,iv:1lU5vKoAV4vr1lFv1dxqJrGu5fUsQQtzsSKOc+BhnVA=,tag:r/7gli4X5UpejJTe6UQywQ==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.10.2
|
version: 3.10.2
|
||||||
|
|
0
templates/elm/frontend/.gitignore
vendored
Normal file → Executable file
0
templates/elm/frontend/.gitignore
vendored
Normal file → Executable file
0
templates/elm/frontend/README.md
Normal file → Executable file
0
templates/elm/frontend/README.md
Normal file → Executable file
0
templates/elm/frontend/elm-land.json
Normal file → Executable file
0
templates/elm/frontend/elm-land.json
Normal file → Executable file
0
templates/elm/frontend/elm.json
Normal file → Executable file
0
templates/elm/frontend/elm.json
Normal file → Executable file
0
templates/elm/frontend/src/Effect.elm
Normal file → Executable file
0
templates/elm/frontend/src/Effect.elm
Normal file → Executable file
0
templates/elm/frontend/src/Pages/Home_.elm
Normal file → Executable file
0
templates/elm/frontend/src/Pages/Home_.elm
Normal file → Executable file
0
templates/elm/frontend/src/Pages/NotFound_.elm
Normal file → Executable file
0
templates/elm/frontend/src/Pages/NotFound_.elm
Normal file → Executable file
0
templates/elm/frontend/src/Shared.elm
Normal file → Executable file
0
templates/elm/frontend/src/Shared.elm
Normal file → Executable file
0
templates/elm/frontend/src/Shared/Model.elm
Normal file → Executable file
0
templates/elm/frontend/src/Shared/Model.elm
Normal file → Executable file
0
templates/elm/frontend/src/Shared/Msg.elm
Normal file → Executable file
0
templates/elm/frontend/src/Shared/Msg.elm
Normal file → Executable file
0
templates/elm/frontend/src/View.elm
Normal file → Executable file
0
templates/elm/frontend/src/View.elm
Normal file → Executable file
0
templates/elm/frontend/src/interop.ts
Normal file → Executable file
0
templates/elm/frontend/src/interop.ts
Normal file → Executable file
Loading…
Add table
Add a link
Reference in a new issue