diff --git a/hosts/exodus/default.nix b/hosts/exodus/default.nix index 99d0254..5ea6246 100644 --- a/hosts/exodus/default.nix +++ b/hosts/exodus/default.nix @@ -32,7 +32,10 @@ gnome.enable = true; podman.enable = true; print.enable = true; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "mobile" ]; + }; runner = { enable = true; qemu = true; diff --git a/hosts/genesis/networking.nix b/hosts/genesis/networking.nix index 2df907a..cdda97e 100644 --- a/hosts/genesis/networking.nix +++ b/hosts/genesis/networking.nix @@ -19,7 +19,10 @@ let ]; in { - greg.tailscale.enable = true; + greg.tailscale = { + enable = true; + tags = [ "home" ]; + }; # Really, why do I still have to force-disable this crap? boot.kernel.sysctl = { diff --git a/hosts/hosea/default.nix b/hosts/hosea/default.nix index 077a8dd..bdc194c 100644 --- a/hosts/hosea/default.nix +++ b/hosts/hosea/default.nix @@ -45,7 +45,10 @@ in "jellyfin.home".target = "http://localhost:8096/"; "jellyfin.thehellings.lan".target = "http://localhost:8096/"; }; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "home" ]; + }; }; hardware = { diff --git a/hosts/isaiah/default.nix b/hosts/isaiah/default.nix index ce81a7b..640c98b 100644 --- a/hosts/isaiah/default.nix +++ b/hosts/isaiah/default.nix @@ -39,7 +39,10 @@ vipInterface = "enp38s0"; priority = 255; }; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "home" ]; + }; remote-builder.enable = true; runner = { enable = true; diff --git a/hosts/jeremiah/default.nix b/hosts/jeremiah/default.nix index bf3d89e..b488621 100644 --- a/hosts/jeremiah/default.nix +++ b/hosts/jeremiah/default.nix @@ -75,7 +75,10 @@ vipInterface = "br0"; priority = 254; }; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "home" ]; + }; remote-builder.enable = true; runner = { enable = true; diff --git a/hosts/proxmoxtemplate/default.nix b/hosts/proxmoxtemplate/default.nix index 1ec14ea..3e62e95 100644 --- a/hosts/proxmoxtemplate/default.nix +++ b/hosts/proxmoxtemplate/default.nix @@ -21,7 +21,10 @@ greg = { home = true; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "home" ]; + }; }; networking = { diff --git a/hosts/vm-gitlab/default.nix b/hosts/vm-gitlab/default.nix index 3d3b997..f48a33e 100644 --- a/hosts/vm-gitlab/default.nix +++ b/hosts/vm-gitlab/default.nix @@ -59,7 +59,10 @@ in dest = "gitlab"; }; home = true; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "home" ]; + }; }; networking = { diff --git a/hosts/zeke/default.nix b/hosts/zeke/default.nix index 46cc899..3f791a7 100644 --- a/hosts/zeke/default.nix +++ b/hosts/zeke/default.nix @@ -26,7 +26,10 @@ enable = true; vbox = true; }; - tailscale.enable = true; + tailscale = { + enable = true; + tags = [ "home" ]; + }; }; hardware = { diff --git a/modules/nixos/tailscale.nix b/modules/nixos/tailscale.nix index e5fae01..ae1e981 100644 --- a/modules/nixos/tailscale.nix +++ b/modules/nixos/tailscale.nix @@ -1,7 +1,23 @@ -{ lib, config, ... }: +{ + pkgs, + lib, + config, + ... +}: let cfg = config.greg.tailscale; + tags = lib.concatMapStringsSep "," (s: "tag:${s}") cfg.tags; + setScript = pkgs.writeShellApplication { + name = "tailscale-set"; + runtimeInputs = [ + config.services.tailscale.package + ]; + text = '' + tailscale set --accept-routes + tailscale set --hostname ${cfg.hostname} + ''; + }; in { options = { @@ -13,6 +29,12 @@ in default = config.networking.hostName; type = lib.types.str; }; + + tags = lib.mkOption { + type = lib.types.listOf lib.types.singleLineStr; + default = [ ]; + description = "The tags to request for this node"; + }; }; }; @@ -31,9 +53,25 @@ in extraUpFlags = [ "--hostname" cfg.hostname + "--accept-routes" + ] + ++ lib.optionals ((builtins.length cfg.tags) > 0) [ + "--advertise-tags" + tags ]; useRoutingFeatures = "both"; }; - systemd.services.tailscaled.partOf = [ "network-online.target" ]; + systemd.services = { + tailscale-set = { + enable = true; + after = [ + "tailscaled.service" + "tailscale-autoconnect.service" + ]; + partOf = [ "network-online.target" ]; + script = lib.getExe setScript; + }; + tailscaled.partOf = [ "network-online.target" ]; + }; }; }