1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6 cfg = config.services.zerotierone;
7in
8{
9 options.services.zerotierone.enable = mkEnableOption "ZeroTierOne";
10 options.services.zerotierone.package = mkOption {
11 default = pkgs.zerotierone;
12 defaultText = "pkgs.zerotierone";
13 type = types.package;
14 description = ''
15 ZeroTier One package to use.
16 '';
17 };
18
19 config = mkIf cfg.enable {
20 systemd.services.zerotierone = {
21 description = "ZeroTierOne";
22 path = [ cfg.package ];
23 after = [ "network.target" ];
24 wantedBy = [ "multi-user.target" ];
25 preStart =
26 ''
27 mkdir -p /var/lib/zerotier-one
28 chmod 700 /var/lib/zerotier-one
29 chown -R root:root /var/lib/zerotier-one
30 '';
31 serviceConfig = {
32 ExecStart = "${cfg.package}/bin/zerotier-one";
33 Restart = "always";
34 KillMode = "process";
35 };
36 };
37
38 # ZeroTier does not issue DHCP leases, but some strangers might...
39 networking.dhcpcd.denyInterfaces = [ "zt0" ];
40
41 environment.systemPackages = [ cfg.package ];
42 };
43}