diff options
author | Maximilian Bosch <maximilian@mbosch.me> | 2022-11-07 12:20:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-07 12:20:06 +0100 |
commit | 67e61879c50dd39c0b6808a611bfb33471adc83b (patch) | |
tree | 04cf6d370be6f4e592c5f7bfffb018f26366a669 /nixos | |
parent | 5ebfb030f60c29ec7b5ac8ce446f3f226d270643 (diff) | |
parent | c5df8359dffe616b2d151a5514c4f4821911a002 (diff) |
Merge pull request #199416 from symphorien/wg-add-peer
nixos/wireguard: start new peers when they are added
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/services/networking/wireguard.nix | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/nixos/modules/services/networking/wireguard.nix b/nixos/modules/services/networking/wireguard.nix index 3f6fa3c864026..e3c3d3ba3c962 100644 --- a/nixos/modules/services/networking/wireguard.nix +++ b/nixos/modules/services/networking/wireguard.nix @@ -391,6 +391,19 @@ let ''; }; + # the target is required to start new peer units when they are added + generateInterfaceTarget = name: values: + let + mkPeerUnit = peer: (peerUnitServiceName name peer.publicKey (peer.dynamicEndpointRefreshSeconds != 0)) + ".service"; + in + nameValuePair "wireguard-${name}" + rec { + description = "WireGuard Tunnel - ${name}"; + wantedBy = [ "multi-user.target" ]; + wants = [ "wireguard-${name}.service" ] ++ map mkPeerUnit values.peers; + after = wants; + }; + generateInterfaceUnit = name: values: # exactly one way to specify the private key must be set #assert (values.privateKey != null) != (values.privateKeyFile != null); @@ -409,7 +422,6 @@ let after = [ "network-pre.target" ]; wants = [ "network.target" ]; before = [ "network.target" ]; - wantedBy = [ "multi-user.target" ]; environment.DEVICE = name; path = with pkgs; [ kmod iproute2 wireguard-tools ]; @@ -540,6 +552,8 @@ in // (mapAttrs' generateKeyServiceUnit (filterAttrs (name: value: value.generatePrivateKeyFile) cfg.interfaces)); - }); + systemd.targets = mapAttrs' generateInterfaceTarget cfg.interfaces; + } + ); } |