799cdbd834
tailscale allows to specify the interface name. The upstream systemd unit does not expose it directly however, only via the `FLAGS` environment variable. I can’t be 100% sure that the escaping is correct, but this is as good as we can do for now, unless upstream changes their unit file.
44 lines
1.2 KiB
Nix
44 lines
1.2 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let cfg = config.services.tailscale;
|
|
in {
|
|
meta.maintainers = with maintainers; [ danderson mbaillie ];
|
|
|
|
options.services.tailscale = {
|
|
enable = mkEnableOption "Tailscale client daemon";
|
|
|
|
port = mkOption {
|
|
type = types.port;
|
|
default = 41641;
|
|
description = "The port to listen on for tunnel traffic (0=autoselect).";
|
|
};
|
|
|
|
interfaceName = mkOption {
|
|
type = types.str;
|
|
default = "tailscale0";
|
|
description = ''The interface name for tunnel traffic. Use "userspace-networking" (beta) to not use TUN.'';
|
|
};
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.tailscale;
|
|
defaultText = "pkgs.tailscale";
|
|
description = "The package to use for tailscale";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
environment.systemPackages = [ cfg.package ]; # for the CLI
|
|
systemd.packages = [ cfg.package ];
|
|
systemd.services.tailscaled = {
|
|
wantedBy = [ "multi-user.target" ];
|
|
path = [ pkgs.openresolv ];
|
|
serviceConfig.Environment = [
|
|
"PORT=${toString cfg.port}"
|
|
''"FLAGS=--tun ${lib.escapeShellArg cfg.interfaceName}"''
|
|
];
|
|
};
|
|
};
|
|
}
|