main
1{
2 den,
3 lib,
4 ...
5}: {
6 den.aspects.core.includes = [den.aspects.core.tailscale];
7 den.aspects.core.tailscale = {
8 persist = {
9 directories = [
10 {
11 directory = "/var/lib/tailscale";
12 mode = "0700";
13 }
14 ];
15 };
16
17 nixos = {
18 host,
19 config,
20 pkgs,
21 ...
22 }: {
23 environment.systemPackages = [pkgs.tailscale];
24
25 services.tailscale = {
26 enable = true;
27 extraUpFlags = [
28 "--login-server=https://gate.trin.one"
29 ];
30 };
31
32 networking.hosts = lib.concatMapAttrs (hostname: {address, ...}:
33 lib.optionalAttrs (hostname != host.name) {
34 ${address.ipv4.tailscale} = [hostname];
35 ${address.ipv6.tailscale} = [hostname];
36 })
37 (lib.mergeAttrsList (lib.attrValues den.hosts));
38
39 networking.firewall = {
40 trustedInterfaces = [config.services.tailscale.interfaceName];
41 allowedUDPPorts = [config.services.tailscale.port];
42 };
43
44 systemd.network.wait-online.enable = false;
45 boot.initrd.systemd.network.wait-online.enable = false;
46 };
47 };
48}