summary refs log tree commit diff
path: root/nixos/modules/services
diff options
context:
space:
mode:
authorSamuel Dionne-Riel <samuel@dionne-riel.com>2018-09-01 23:26:36 -0400
committerGitHub <noreply@github.com>2018-09-01 23:26:36 -0400
commitca47cc90c2d5502afddfb575c01d17aff13373b8 (patch)
tree89f33db7b2626c263a6ab0ca244ebfe8c751efd8 /nixos/modules/services
parent4a8a80d9b0a1584849cc5f9b91409861fbe42e69 (diff)
parentf0980c40c1353960834302498be8d8d454aaa11f (diff)
downloadnixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.tar
nixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.tar.gz
nixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.tar.bz2
nixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.tar.lz
nixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.tar.xz
nixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.tar.zst
nixlib-ca47cc90c2d5502afddfb575c01d17aff13373b8.zip
Merge pull request #39142 from teto/nm_dispatchers
[RDY] networkmanager: enrich dispatcher PATH
Diffstat (limited to 'nixos/modules/services')
-rw-r--r--nixos/modules/services/networking/networkmanager.nix29
1 files changed, 27 insertions, 2 deletions
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
+                <link xlink:href="https://developer.gnome.org/NetworkManager/stable/NetworkManager.html">https://developer.gnome.org/NetworkManager/stable/NetworkManager.html</link>
+                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;