diff options
Diffstat (limited to 'modules/tinc-networkmanager.nix')
-rw-r--r-- | modules/tinc-networkmanager.nix | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/modules/tinc-networkmanager.nix b/modules/tinc-networkmanager.nix new file mode 100644 index 00000000..ff03abd2 --- /dev/null +++ b/modules/tinc-networkmanager.nix | |||
@@ -0,0 +1,36 @@ | |||
1 | { lib, config, pkgs, ... }: | ||
2 | let | ||
3 | cfg = config.services.tinc; | ||
4 | in { | ||
5 | options = { | ||
6 | services.tinc.networks = lib.mkOption { | ||
7 | type = lib.types.attrsOf (lib.types.submodule { | ||
8 | options.nmDispatch = lib.mkOption { | ||
9 | type = lib.types.bool; | ||
10 | default = config.networking.networkmanager.enable; | ||
11 | description = '' | ||
12 | Install a network-manager dispatcher script to automatically | ||
13 | connect to all remotes when networking is available | ||
14 | ''; | ||
15 | }; | ||
16 | }); | ||
17 | }; | ||
18 | }; | ||
19 | |||
20 | config = { | ||
21 | networking.networkmanager.dispatcherScripts = lib.concatLists (lib.flip lib.mapAttrsToList cfg.networks (network: data: lib.optional data.nmDispatch { | ||
22 | type = "basic"; | ||
23 | source = pkgs.writeScript "connect-${network}.sh" '' | ||
24 | #!${pkgs.stdenv.shell} | ||
25 | |||
26 | shopt -s extglob | ||
27 | |||
28 | case "''${2}" in | ||
29 | (?(vpn-)up) | ||
30 | ${data.package}/bin/tinc -n ${network} --pidfile /run/tinc.${network}.pid --batch retry | ||
31 | ;; | ||
32 | esac | ||
33 | ''; | ||
34 | })); | ||
35 | }; | ||
36 | } | ||