diff options
Diffstat (limited to 'custom/tinc')
-rw-r--r-- | custom/tinc/def.nix | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/custom/tinc/def.nix b/custom/tinc/def.nix index 5d1216c9..0fa0b912 100644 --- a/custom/tinc/def.nix +++ b/custom/tinc/def.nix | |||
@@ -76,6 +76,15 @@ let | |||
76 | ''; | 76 | ''; |
77 | }; | 77 | }; |
78 | 78 | ||
79 | nmDispatch = mkOption { | ||
80 | type = types.bool; | ||
81 | default = config.networking.networkmanager.enable; | ||
82 | description = '' | ||
83 | Install a network-manager dispatcher script to automatically | ||
84 | connect to all remotes when networking is available | ||
85 | ''; | ||
86 | }; | ||
87 | |||
79 | }; | 88 | }; |
80 | in | 89 | in |
81 | 90 | ||
@@ -134,6 +143,21 @@ in | |||
134 | } // data.interfaceConfig) | 143 | } // data.interfaceConfig) |
135 | ); | 144 | ); |
136 | 145 | ||
146 | networking.networkmanager.dispatcherScripts = flip mapAttrs' cfg.networks (network: data: optional data.nmDispatch { | ||
147 | type = "basic"; | ||
148 | source = pkgs.writeScript "connectRemotes.sh" '' | ||
149 | #!${pkgs.stdenv.shell} | ||
150 | |||
151 | shopt -s extglob | ||
152 | |||
153 | case "''${2}" in | ||
154 | (?(vpn-)up) | ||
155 | systemctl --signal=ALRM --kill-who=main kill "tinc.${network}.service" | ||
156 | ;; | ||
157 | esac | ||
158 | ''; | ||
159 | }); | ||
160 | |||
137 | systemd.services = flip mapAttrs' cfg.networks (network: data: nameValuePair | 161 | systemd.services = flip mapAttrs' cfg.networks (network: data: nameValuePair |
138 | ("tinc.${network}") | 162 | ("tinc.${network}") |
139 | ({ | 163 | ({ |