2022-09-09 17:26:49 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
cfg = config.services.tailscale;
|
|
|
|
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options.services.tailscale = {
|
|
|
|
domain = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
default = "";
|
2022-09-09 17:40:42 +00:00
|
|
|
description = "The Tailscale domain. This is displayed at the top left of https://login.tailscale.com/admin, next to the Tailscale logo.";
|
2022-09-09 17:26:49 +00:00
|
|
|
};
|
|
|
|
|
2022-09-09 17:40:42 +00:00
|
|
|
enable = mkEnableOption "Tailscale client daemon";
|
2022-09-09 17:26:49 +00:00
|
|
|
|
|
|
|
package = mkOption {
|
|
|
|
type = types.package;
|
|
|
|
default = pkgs.tailscale;
|
|
|
|
defaultText = literalExpression "pkgs.tailscale";
|
2022-09-09 17:40:42 +00:00
|
|
|
description = "The package to use for tailscale";
|
2022-09-09 17:26:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
magicDNS = {
|
2022-09-09 17:40:42 +00:00
|
|
|
enable = mkEnableOption "Whether to configure networking to work with Tailscale's MagicDNS.";
|
2022-09-09 17:26:49 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
warnings = [
|
|
|
|
(mkIf (cfg.magicDNS.enable && cfg.domain == "") "${showOption cfg.domain} isn't empty, Tailscale MagicDNS search path won't be configured.")
|
|
|
|
];
|
|
|
|
|
|
|
|
environment.systemPackages = [ cfg.package ];
|
|
|
|
launchd.user.agents.tailscaled = {
|
|
|
|
# derived from
|
|
|
|
# https://github.com/tailscale/tailscale/blob/main/cmd/tailscaled/install_darwin.go#L30
|
|
|
|
serviceConfig = {
|
|
|
|
Label = "com.tailscale.tailscaled";
|
|
|
|
ProgramArguments = [ "${lib.getBin cfg.package}/bin/tailscaled" ];
|
|
|
|
RunAtLoad = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
networking = mkIf cfg.magicDNS.enable {
|
|
|
|
dns = [ "100.100.100.100" ];
|
|
|
|
search =
|
|
|
|
if cfg.domain == "" then
|
|
|
|
[ ]
|
|
|
|
else
|
|
|
|
[ "${cfg.domain}.beta.tailscale.net" ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|