From f0980c40c1353960834302498be8d8d454aaa11f Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Thu, 26 Apr 2018 18:53:19 +0900 Subject: networkmanager: make hooks easier to use First change is to override the nm-dispatcher systemd service so that it puts coreutils (wc/env/...) and iproute in PATH. Second change is to make sure userscripts have the execute bit. --- .../modules/services/networking/networkmanager.nix | 29 ++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'nixos/modules/services') diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix index b0bc1c83d6b7..d5af4648e8f9 100644 --- a/nixos/modules/services/networking/networkmanager.nix +++ b/nixos/modules/services/networking/networkmanager.nix @@ -289,7 +289,7 @@ in { source = mkOption { type = types.path; description = '' - A script. + Path to the hook script. ''; }; @@ -297,12 +297,28 @@ in { type = types.enum (attrNames dispatcherTypesSubdirMap); default = "basic"; description = '' - Dispatcher hook type. Only basic hooks are currently available. + Dispatcher hook type. Look up the hooks described at + https://developer.gnome.org/NetworkManager/stable/NetworkManager.html + and choose the type depending on the output folder. + You should then filter the event type (e.g., "up"/"down") from within your script. ''; }; }; }); default = []; + example = literalExample '' + [ { + source = pkgs.writeText "upHook" ''' + + if [ "$2" != "up" ]; then + logger "exit: event $2 != up" + fi + + # coreutils and iproute are in PATH too + logger "Device $DEVICE_IFACE coming up" + '''; + type = "basic"; + } ]''; description = '' A list of scripts which will be executed in response to network events. ''; @@ -418,6 +434,7 @@ in { ++ lib.imap1 (i: s: { inherit (s) source; target = "NetworkManager/dispatcher.d/${dispatcherTypesSubdirMap.${s.type}}03userscript${lib.fixedWidthNumber 4 i}"; + mode = "0544"; }) cfg.dispatcherScripts ++ optional (dynamicHostsEnabled) { target = "NetworkManager/dnsmasq.d/dyndns.conf"; @@ -475,6 +492,14 @@ in { }; }; + systemd.services."NetworkManager-dispatcher" = { + wantedBy = [ "network.target" ]; + restartTriggers = [ configFile ]; + + # useful binaries for user-specified hooks + path = [ pkgs.iproute pkgs.utillinux pkgs.coreutils ]; + }; + # Turn off NixOS' network management networking = { useDHCP = false; -- cgit 1.4.1