{ config, ... }: let domain = "headscale.sorre.xyz"; port = 5892; in { imports = [ ./web/acme.nix ]; services.headscale = { enable = true; inherit port; address = "127.0.0.1"; settings = { server_url = "https://${domain}"; dns = { base_domain = "sorre.internal"; nameservers.global = [ "1.1.1.1" "2301:db8:acad:a::1" ]; extra_records = [ { name = "vaultwarden.sorre.internal"; type = "AAAA"; value = "100.64.0.3"; } { name = "git.sorre.internal"; type = "AAAA"; value = "100.64.0.3"; } { name = "music.sorre.internal"; type = "AAAA"; value = "100.64.0.3"; } ]; }; }; }; environment.systemPackages = [ config.services.headscale.package ]; services.nginx.virtualHosts."${domain}" = { forceSSL = true; enableACME = true; locations."/" = { proxyPass = "http://localhost:${toString port}"; proxyWebsockets = true; }; }; # also enable the tailscale client since this is a node too services.tailscale = { enable = true; openFirewall = true; }; networking.firewall = { checkReversePath = "loose"; trustedInterfaces = [ "tailscale0" ]; allowedUDPPorts = [ config.services.tailscale.port ]; }; }