dotfiles/config/instance.nix

421 lines
10 KiB
Nix
Raw Normal View History

2024-10-06 15:25:05 -05:00
let
acmeLabel = "Acme";
caddyLabel = "Caddy";
castLabel = "Castopod";
forgejoLabel = "Forgejo";
jellyfinLabel = "Jellyfin";
mastodonLabel = "Mastodon";
matrixLabel = "Matrix";
minecraftLabel = "Minecraft";
nextcloudLabel = "Nextcloud";
ollamaLabel = "Ollama";
2024-10-18 22:05:40 -05:00
owncastLabel = "Owncast";
2024-10-06 15:25:05 -05:00
peertubeLabel = "PeerTube";
postgresLabel = "PostgreSQL";
sambaLabel = "Samba";
syncthingLabel = "Syncthing";
synologyLabel = "Synology";
vaultwardenLabel = "Vaultwarden";
2024-10-20 04:02:03 -05:00
wikiLabel = "Wiki";
2024-10-06 15:25:05 -05:00
writefreelyLabel = "WriteFreely";
acmeName = "acme";
caddyName = "caddy";
castName = "castopod";
forgejoName = "forgejo";
jellyfinName = "jellyfin";
mastodonName = "mastodon";
matrixName = "matrix";
minecraftName = "minecraft";
nextcloudName = "nextcloud";
ollamaName = "ollama";
2024-10-18 22:05:40 -05:00
owncastName = "owncast";
2024-10-06 15:25:05 -05:00
peertubeName = "peertube";
postgresName = "postgres";
sambaName = "samba";
syncthingName = "syncthing";
synologyName = "synology";
vaultwardenName = "vaultwarden";
2024-10-20 04:02:03 -05:00
wikiName = "wiki";
2024-10-06 15:25:05 -05:00
writefreelyName = "writefreely";
domain0 = "cloudbert.fun";
domain1 = "the-nutrivore.social";
servicePath = "/mnt/media/NAS1";
sops = "/var/lib/secrets";
sslPath = "/var/lib/acme";
2024-10-19 15:07:05 -05:00
varLib = "/var/lib";
2024-10-06 15:25:05 -05:00
in {
instance = {
2024-10-19 18:22:29 -05:00
web = {
domains = {
url0 = domain0;
url1 = domain1;
};
dns = {
provider0 = "namecheap";
};
localhost = {
address0 = "127.0.0.1"; # Local
address1 = "0.0.0.0"; # All
address2 = "192.168.50.1"; # Router
address3 = "192.168.50.0"; # Router
};
};
2024-10-06 15:25:05 -05:00
acme = {
label = acmeLabel;
name = acmeName;
paths = {
path0 = sslPath;
};
sops = {
path0 = "${sops}/${acmeName}";
};
};
caddy = {
label = caddyLabel;
name = caddyName;
sops = {
path0 = "${sops}/${caddyName}";
};
ports = {
port0 = 80;
port1 = 443;
};
};
castopod = let
2024-10-19 18:22:29 -05:00
castopodSubdomain = "podcast";
2024-10-06 15:25:05 -05:00
in {
label = castLabel;
name = castName;
2024-10-19 18:22:29 -05:00
email = {
address0 = "noreply@${castopodSubdomain}.${domain1}";
};
2024-10-06 15:25:05 -05:00
sops = {
path0 = "${sops}/${castName}";
};
2024-10-19 18:22:29 -05:00
subdomain = castopodSubdomain;
2024-10-06 15:25:05 -05:00
paths = {
path0 = "${servicePath}/${castLabel}";
};
ports = {
port0 = 8000;
};
ssl = {
2024-10-19 18:22:29 -05:00
cert = "${sslPath}/${castopodSubdomain}.${domain1}/fullchain.pem";
key = "${sslPath}/${castopodSubdomain}.${domain1}/key.pem";
2024-10-06 15:25:05 -05:00
};
};
forgejo = let
2024-10-19 18:22:29 -05:00
forgejoSubdomain = "source";
2024-10-06 15:25:05 -05:00
in {
label = forgejoLabel;
name = forgejoName;
2024-10-19 18:22:29 -05:00
email = {
address0 = "noreply@${forgejoSubdomain}.${domain1}";
};
2024-10-06 15:25:05 -05:00
sops = {
path0 = "${sops}/${forgejoName}";
};
2024-10-19 18:22:29 -05:00
subdomain = forgejoSubdomain;
2024-10-06 15:25:05 -05:00
paths = {
path0 = "${servicePath}/${forgejoLabel}";
};
ports = {
2024-10-19 15:33:59 -05:00
port0 = 3033;
2024-10-06 15:25:05 -05:00
};
ssl = {
2024-10-19 18:22:29 -05:00
cert = "${sslPath}/${forgejoSubdomain}.${domain1}/fullchain.pem";
key = "${sslPath}/${forgejoSubdomain}.${domain1}/key.pem";
2024-10-06 15:25:05 -05:00
};
};
jellyfin = {
label = jellyfinLabel;
name = jellyfinName;
sops = {
path0 = "${sops}/${jellyfinName}";
};
subdomain = jellyfinName;
paths = {
path0 = "${servicePath}/${jellyfinLabel}";
};
ports = {
port0 = 5055; # Jellyseer
port1 = 8096; # Jellyfin HTTP
port2 = 8920; # Jellyfin HTTPS
};
ssl = {
cert = "${sslPath}/${jellyfinName}.${domain0}/fullchain.pem";
key = "${sslPath}/${jellyfinName}.${domain0}/key.pem";
};
};
matrix = {
label = matrixLabel;
name = matrixName;
sops = {
path0 = "${sops}/${matrixName}";
};
subdomain = matrixName;
paths = {
path0 = "${servicePath}/${matrixLabel}";
path1 = "";
path2 = "";
};
};
mastodon = {
label = mastodonLabel;
name = mastodonName;
2024-10-19 18:22:29 -05:00
email = {
address0 = "thenutrivore@${domain1}";
};
2024-10-06 15:25:05 -05:00
sops = {
path0 = "${sops}/${mastodonName}";
};
paths = {
path0 = "${servicePath}/${mastodonLabel}";
path1 = "";
path2 = "";
};
ssl = {
cert = "${sslPath}/${domain1}/fullchain.pem";
key = "${sslPath}/${domain1}/key.pem";
};
};
minecraft = {
label = minecraftLabel;
name = minecraftName;
sops = {
path0 = "${sops}/${minecraftName}";
};
subdomain = minecraftName;
paths = {
path0 = "${servicePath}/${minecraftLabel}";
};
ports = {
port0 = 43000; # Minecraft (Brix on Nix)
};
ssl = {
cert = "${sslPath}/${minecraftName}.${domain0}/fullchain.pem";
key = "${sslPath}/${minecraftName}.${domain0}/key.pem";
};
};
2024-10-18 04:11:10 -05:00
nextcloud = {
2024-10-06 15:25:05 -05:00
label = nextcloudLabel;
name = nextcloudName;
sops = {
path0 = "${sops}/${nextcloudName}";
};
2024-10-18 04:11:10 -05:00
subdomain = nextcloudName;
2024-10-06 15:25:05 -05:00
paths = {
path0 = "${servicePath}/${nextcloudLabel}";
};
ports = {
port0 = 8354; # Nextcloud
};
ssl = {
2024-10-18 04:11:10 -05:00
cert = "${sslPath}/${nextcloudName}.${domain1}/fullchain.pem";
key = "${sslPath}/${nextcloudName}.${domain1}/key.pem";
2024-10-06 15:25:05 -05:00
};
};
nginx = {
ports = {
port0 = 8080; # HTTP
port1 = 8443; # HTTPS
};
};
ollama = {
label = ollamaLabel;
name = ollamaName;
sops = {
path0 = "${sops}/${ollamaName}";
};
subdomain = ollamaName;
paths = {
path0 = "${servicePath}/${ollamaLabel}";
path1 = "/mnt/media/storage/${ollamaName}";
};
ports = {
port0 = 8088; # Open-WebUI (Ollama Front End)
port1 = 11434; # Ollama API
};
ssl = {
cert = "${sslPath}/${ollamaName}.${domain0}/fullchain.pem";
key = "${sslPath}/${ollamaName}.${domain0}/key.pem";
};
};
2024-10-18 22:05:40 -05:00
owncast = let
owncastSubdomain = "stream";
in {
label = owncastLabel;
name = owncastName;
sops = {
path0 = "${sops}/${owncastName}";
};
subdomain = owncastSubdomain;
paths = {
path0 = "${servicePath}/${owncastLabel}";
path1 = "/mnt/media/storage/${owncastName}";
};
ports = {
port0 = 9454;
port1 = 1935;
};
ssl = {
cert = "${sslPath}/${owncastSubdomain}.${domain1}/fullchain.pem";
key = "${sslPath}/${owncastSubdomain}.${domain1}/key.pem";
};
};
2024-10-19 18:22:29 -05:00
peertube = let
peertubeSubdomain = "video";
in {
2024-10-06 15:25:05 -05:00
label = peertubeLabel;
name = peertubeName;
2024-10-19 18:22:29 -05:00
email = {
address0 = "noreply@${peertubeSubdomain}.${domain1}";
};
2024-10-06 15:25:05 -05:00
sops = {
path0 = "${sops}/${peertubeName}";
};
2024-10-19 18:22:29 -05:00
subdomain = peertubeSubdomain;
2024-10-06 15:25:05 -05:00
paths = {
path0 = "${servicePath}/${peertubeLabel}";
};
ports = {
port0 = 9000; # HTTP
port1 = 1935;
port2 = 1936;
port3 = 5432;
port4 = 52800;
};
ssl = {
cert = "${sslPath}/video.${domain1}/fullchain.pem";
key = "${sslPath}/video.${domain1}/key.pem";
};
};
postgresql = {
label = postgresLabel;
name = postgresName;
sops = {
path0 = "${sops}/${postgresName}";
};
paths = {
path0 = "${servicePath}/${postgresLabel}";
};
ports = {
port0 = 5432;
};
};
samba = {
label = sambaLabel;
name = sambaName;
sops = {
path0 = "${sops}/${sambaName}";
};
paths = {
path0 = "${servicePath}/${jellyfinLabel}";
2024-10-09 23:26:43 -05:00
path1 = jellyfinName;
2024-10-06 15:25:05 -05:00
path2 = "";
};
ports = {
port0 = 445; # Samba
};
};
synology = {
label = synologyLabel;
name = synologyName;
sops = {
path0 = "${sops}/${synologyName}";
};
ports = {
port0 = 5001; # Synology HTTPS
};
};
syncthing = {
label = syncthingLabel;
name = syncthingName;
sops = {
path0 = "${sops}/${syncthingName}";
};
subdomain = syncthingName;
ports = {
port0 = 8388; # Syncthing (WebUI)
port1 = 21027; # Syncthing (Discovery)
port2 = 22000; # Syncthing (Transfer)
};
ssl = {
cert = "${sslPath}/${syncthingName}.${domain0}/fullchain.pem";
key = "${sslPath}/${syncthingName}.${domain0}/key.pem";
};
};
2024-10-19 18:22:29 -05:00
vaultwarden = let
vaultwardenSubdomain = vaultwardenName;
in {
2024-10-06 15:25:05 -05:00
label = vaultwardenLabel;
name = vaultwardenName;
2024-10-19 18:22:29 -05:00
email = {
address0 = "noreply@${vaultwardenSubdomain}.${domain0}";
};
2024-10-06 15:25:05 -05:00
sops = {
path0 = "${sops}/${vaultwardenName}";
};
2024-10-19 18:22:29 -05:00
subdomain = vaultwardenSubdomain;
2024-10-06 15:25:05 -05:00
paths = {
path0 = "${servicePath}/${vaultwardenLabel}/BackupDir";
};
ports = {
port0 = 8085; # Vaultwarden WebUI
};
ssl = {
cert = "${sslPath}/${vaultwardenName}.${domain0}/fullchain.pem";
key = "${sslPath}/${vaultwardenName}.${domain0}/key.pem";
};
};
2024-10-19 15:04:13 -05:00
wiki = let
wikiSubdomain = "vault";
in {
label = wikiLabel;
name = wikiName;
sops = {
path0 = "${sops}/${wikiName}";
};
subdomain = wikiSubdomain;
paths = {
2024-10-19 15:06:09 -05:00
path0 = "${servicePath}/${wikiLabel}";
2024-10-19 15:07:05 -05:00
path1 = "${varLib}/DataDir";
2024-10-19 15:04:13 -05:00
};
ports = {
2024-10-19 15:33:59 -05:00
port0 = 3000;
2024-10-19 16:35:49 -05:00
port1 = 5432;
2024-10-19 15:04:13 -05:00
};
ssl = {
cert = "${sslPath}/${wikiSubdomain}.${domain1}/fullchain.pem";
key = "${sslPath}/${wikiSubdomain}.${domain1}/key.pem";
};
};
2024-10-06 15:25:05 -05:00
writefreely = let
writefreelyDomain = "blog";
in {
label = writefreelyLabel;
name = writefreelyName;
sops = {
path0 = "${sops}/${writefreelyName}";
};
subdomain = writefreelyDomain;
paths = {
path0 = "${servicePath}/${writefreelyLabel}/BackupDir";
};
ports = {
port0 = 8093;
};
ssl = {
2024-10-19 15:04:13 -05:00
cert = "${sslPath}/${writefreelyDomain}.${domain1}/fullchain.pem";
key = "${sslPath}/${writefreelyDomain}.${domain1}/key.pem";
2024-10-06 15:25:05 -05:00
};
};
};
}