{ config, lib, ... }: let cfg = config.custom.services.tailscale; in { options.custom.services.tailscale = { enable = lib.mkEnableOption ""; domain = lib.mkOption { type = lib.types.nonEmptyStr; default = "stork-atlas.ts.net"; }; ssh.enable = lib.mkEnableOption ""; exitNode.enable = lib.mkEnableOption ""; }; config = lib.mkIf cfg.enable { sops.secrets."tailscale-auth-key" = { }; services.tailscale = { enable = true; authKeyFile = config.sops.secrets."tailscale-auth-key".path; openFirewall = true; useRoutingFeatures = if cfg.exitNode.enable then "server" else "client"; extraUpFlags = [ "--reset=true" ]; extraSetFlags = [ "--ssh=${lib.boolToString cfg.ssh.enable}" "--advertise-exit-node=${lib.boolToString cfg.exitNode.enable}" ]; }; }; }