Nix configurations for my homelab

caddy: move from dandelion to lily

dandelion is being retired

yemou.pink b8eedc02 4ae0ab1d

verified
+24 -2
lily/config.nix
···
./services/fail2ban.nix
../modules/basic.nix
+
../modules/caddy.nix
../modules/development/nix.nix
../modules/development/sh.nix
../modules/editor.nix
···
../modules/nix.nix
../modules/remote-builder.nix
+
../modules/services/caddy
+
../modules/services/caddy/atproto-did.nix
+
../modules/services/caddy/nextcloud.nix
+
../modules/services/caddy/pds.nix
+
../modules/services/caddy/soju.nix
+
../modules/services/caddy/tangled-knot.nix
+
../modules/services/caddy/websites/boo-b77.nix
+
../modules/services/caddy/websites/boo-y6d.nix
+
../modules/services/caddy/websites/org-biotabit.nix
+
../modules/services/caddy/websites/org-butwho.nix
+
../modules/services/caddy/websites/pink-lilac.nix
+
../modules/services/caddy/websites/pink-yemou.nix
+
../modules/services/nextcloud.nix
../modules/services/openssh.nix
../modules/services/pds.nix
+
../modules/services/soju.nix
../modules/services/tangled.nix
];
-
garden.info.host = {
-
server = true;
+
garden = {
+
caddy.package = {
+
plugins = [
+
"github.com/mholt/caddy-events-exec@v0.1.0"
+
"github.com/mholt/caddy-l4@v0.0.0-20250530154005-4d3c80e89c5f"
+
];
+
hash = "sha256-X+46XM2UzadAifeTvKOdUdawU8EaINUTIeCjAVVCGqU=";
+
};
+
info.host.server = true;
};
sops = {
-1
modules/openssh.nix
···
settings = {
PasswordAuthentication = false;
PermitRootLogin = "no";
-
PerSourcePenalties = "no"; # TODO: Look into mmproxy or some other way of giving the client-ip to openssh
};
};
}
+2 -2
modules/services/caddy/nextcloud.nix
···
-
{ config, ... }:
+
{ ... }:
{
services.caddy.virtualHosts."cloud.lilac.pink".extraConfig = ''
encode
-
reverse_proxy ${config.garden.info.network.lily.netbird-ip}:80 {
+
reverse_proxy [::1]:8080 {
# NixOS uses nginx as a webserver for NextCloud by default and nginx will send 301 redirects to the client
# using http as the protocol instead of https since it doesn't have SSL certs of its own.
# Because the redirect isn't also https, this can cause a Content-Security-Policy error on the client.
+5 -5
modules/services/caddy/pds.nix
···
-
{ config, ... }:
+
{ ... }:
{
services.caddy = {
globalConfig = ''
on_demand_tls {
-
ask http://${config.garden.info.network.lily.netbird-ip}:3000/tls-check
+
ask http://[::1]:3000/tls-check
}
'';
virtualHosts = {
···
on_demand
}
encode
-
reverse_proxy ${config.garden.info.network.lily.netbird-ip}:3000
+
reverse_proxy [::1]:3000
'';
"*.butwho.club".extraConfig = ''
tls {
on_demand
}
encode
-
reverse_proxy ${config.garden.info.network.lily.netbird-ip}:3000
+
reverse_proxy [::1]:3000
'';
"*.butwho.social".extraConfig = ''
tls {
on_demand
}
encode
-
reverse_proxy ${config.garden.info.network.lily.netbird-ip}:3000
+
reverse_proxy [::1]:3000
'';
};
};
+2 -2
modules/services/caddy/soju.nix
···
{ ... }:
{
-
networking.firewall.interfaces."enp1s0".allowedTCPPorts = [ 6697 ];
+
networking.firewall.allowedTCPPorts = [ 6697 ];
services.caddy.virtualHosts."soju.y6d.boo".extraConfig = ''
encode
-
reverse_proxy [::1]:8080
+
reverse_proxy [::1]:8081
'';
garden.caddy.layer4 = ''
+2 -12
modules/services/caddy/tangled-knot.nix
···
-
{ config, ... }:
+
{ ... }:
{
-
networking.firewall.interfaces."enp1s0".allowedTCPPorts = [ 22 ];
-
services.caddy.virtualHosts."knot.butwho.org".extraConfig = ''
encode
-
reverse_proxy ${config.garden.info.network.lily.netbird-ip}:5555
-
'';
-
-
garden.caddy.layer4 = ''
-
[::]:22 {
-
route {
-
proxy ${config.garden.info.network.lily.netbird-ip}:2222
-
}
-
}
+
reverse_proxy [::1]:5555
'';
}
+3
modules/services/caddy/websites/org-butwho.nix
···
respond "{err.status_code} {err.status_text}"
}
'';
+
"butwho.club".extraConfig = ''
+
redir https://butwho.org{uri}
+
'';
"butwho.social".extraConfig = ''
redir https://butwho.org{uri}
'';
+9 -8
modules/services/nextcloud.nix
···
};
# This is the port that nginx listens on by default
-
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts = [ 80 ];
+
+
services.nginx.virtualHosts.${config.services.nextcloud.hostName}.listen = [
+
{
+
addr = "[::1]";
+
port = 8080;
+
}
+
];
services = {
redis.package = pkgs.valkey;
···
maxUploadSize = "1G";
notify_push = {
enable = true;
-
nextcloudUrl = "http://${config.garden.info.network.${config.networking.hostName}.netbird-ip}";
+
nextcloudUrl = "http://[::1]:8080";
};
phpOptions = {
"opcache.interned_strings_buffer" = "16";
···
};
"simpleSignUpLink.shown" = false;
trusted_proxies = [
-
config.garden.info.network.${config.networking.hostName}.netbird-ip
-
config.garden.info.network.dandelion.netbird-ip
-
config.garden.info.network.${config.networking.hostName}.ipv4-local
+
"::1"
];
};
};
···
services = {
# TODO: Need to make sure that this runs after nextcloud to avoid startup errors especially when there is a nextcloud
# upgrade
-
nextcloud-notify_push_setup.environment = {
-
NEXTCLOUD_URL = config.services.nextcloud.notify_push.nextcloudUrl;
-
};
nextcloud-generate-previews = {
enable = true;
description = "Nextcloud preview generator app (https://github.com/nextcloud/previewgenerator)";
+1 -1
modules/services/soju.nix
···
hostName = "soju.y6d.boo";
listen = [
"irc+insecure://[::1]:6667"
-
"http+insecure://[::1]:8080" # Needed for file-upload
+
"http+insecure://[::1]:8081" # Needed for file-upload
];
acceptProxyIP = [ "localhost" ];
enableMessageLogging = false; # This stores messages using the filesystem, I want to use the database.
+8 -4
modules/services/tangled.nix
···
'';
};
-
services.openssh.settings.AllowUsers = [
-
"${config.services.tangled-knot.gitUser}@${config.garden.info.network.dandelion.netbird-ip}"
-
];
+
services.openssh = {
+
ports = [ 22 ];
+
settings.AllowUsers = [ "${config.services.tangled-knot.gitUser}" ];
+
};
-
networking.firewall.interfaces.${config.services.netbird.clients.homelab.interface}.allowedTCPPorts = [ 5555 ];
+
networking.firewall.allowedTCPPorts = [
+
22
+
5555
+
];
services.tangled-knot = {
enable = true;