homelab/vm-homelab.nix

114 lines
2.9 KiB
Nix
Raw Permalink Normal View History

2025-08-25 23:20:08 -05:00
{ pkgs, ... }:
2025-08-15 16:41:33 -05:00
2025-08-25 23:20:08 -05:00
let
minidump = pkgs.writeScript "minidump" "exec /run/wrappers/bin/sudo -u postgres /run/current-system/sw/bin/pg_dump miniflux";
in
2025-08-15 16:41:33 -05:00
{
imports = [
./vm-base.nix
];
config = {
my.vm = {
name = "lab01";
ip4 = "192.168.0.5";
};
2025-08-25 23:55:51 -05:00
environment.systemPackages = with pkgs; [
curl
];
2025-08-15 16:41:33 -05:00
2025-08-24 01:23:15 -05:00
networking.firewall.allowedTCPPorts = [
80
443
];
2025-08-15 16:41:33 -05:00
services.caddy = {
enable = true;
virtualHosts = {
"feed.rperce.net".extraConfig = ''
reverse_proxy http://192.168.0.5:8080
'';
"barkeep.dukeceph.xyz".extraConfig = ''
reverse_proxy http://192.168.0.2:8000
'';
"barkeep.rperce.net".extraConfig = ''
reverse_proxy http://192.168.0.2:8000
'';
"minecraft.dukeceph.xyz".extraConfig = ''
reverse_proxy http://192.168.0.4:8080
'';
"immich.rperce.net".extraConfig = ''
reverse_proxy http://192.168.0.2:2283
'';
"metrics.rperce.net".extraConfig = ''
2025-08-23 23:14:40 -05:00
reverse_proxy http://192.168.0.6:3000
2025-08-15 16:41:33 -05:00
'';
2025-08-25 15:12:36 -05:00
"metrics.dukeceph.xyz".extraConfig = ''
reverse_proxy http://192.168.0.6:3000
'';
2025-08-25 23:55:51 -05:00
"uptime.rperce.net".extraConfig = ''
reverse_proxy 192.168.0.6:3001
'';
2025-08-15 16:41:33 -05:00
"jellyfin.rperce.net".extraConfig = ''
reverse_proxy http://192.168.0.2:8096
'';
"forge.rperce.net".extraConfig = ''
reverse_proxy http://192.168.0.5:3333
'';
2025-08-20 14:39:39 -05:00
"unifi.rperce.net".extraConfig = ''
reverse_proxy 192.168.0.100:8443 {
transport http {
tls_insecure_skip_verify
}
header_up - Authorization
}
'';
2025-08-15 16:41:33 -05:00
};
};
services.miniflux = {
enable = true;
adminCredentialsFile = "/mnt/nfs/miniflux/admin-credentials";
config = {
LISTEN_ADDR = "0.0.0.0:8080";
};
};
services.forgejo = {
enable = true;
database.type = "postgres";
lfs.enable = true;
settings = {
server = {
DOMAIN = "forge.rperce.net";
ROOT_URL = "https://forge.rperce.net/";
HTTP_PORT = 3333;
};
service.DISABLE_REGISTRATION = true;
actions = {
ENABLED = true;
DEFAULT_ACTIONS_URL = "github";
};
mailer.ENABLED = false;
};
};
2025-08-25 23:20:08 -05:00
services.borgbackup.jobs.miniflux = {
dumpCommand = minidump;
archiveBaseName = null;
encryption.mode = "none";
environment.BORG_RSH = "ssh -i /etc/ssh/ssh_host_ed25519_key";
repo = "ssh://backup@xalicas/./miniflux";
compression = "auto,zstd";
startAt = "daily";
2025-08-25 23:55:51 -05:00
postHook = ''
echo "exit $exitStatus"
if [ $exitStatus -eq 0 ]; then
/run/current-system/sw/bin/curl -sSL http://192.168.0.6:3001/api/push/yTBTVZF8Bz?status=up&msg=OK&ping=
fi
'';
2025-08-25 23:20:08 -05:00
};
2025-08-15 16:41:33 -05:00
};
}