From 65c1c008f252bc3ac4c233262c30d3cf5f000034 Mon Sep 17 00:00:00 2001 From: rnhmjoj Date: Wed, 21 Jan 2026 00:49:00 +0100 Subject: [PATCH] nixos/networking-interfaces: add networking-scripted.target This adds a target that groups together all the services of the scripted backend. It has no role during the boot, but provides a quick way to reset the network configuration. For example, if addresses/routes are added/removed or an interface has been stopped manually, running systemctl restart networking-scripted.target will undo all the changes. --- .../tasks/network-interfaces-scripted.nix | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix index fe6f6e5a1cb8..4bf274d4157f 100644 --- a/nixos/modules/tasks/network-interfaces-scripted.nix +++ b/nixos/modules/tasks/network-interfaces-scripted.nix @@ -241,6 +241,7 @@ let ++ optional config.boot.isContainer "network.target" ++ optional (isDefaultGateway4 || isDefaultGateway6) "network-online.target"; bindsTo = deviceDependency i.name; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] @@ -329,6 +330,7 @@ let nameValuePair "${i.name}-netdev" { description = "Virtual Network Interface ${i.name}"; bindsTo = optional (!config.boot.isContainer) "dev-net-tun.device"; + partOf = [ "networking-scripted.target" ]; after = optional (!config.boot.isContainer) "dev-net-tun.device" ++ [ "network-pre.target" ]; wantedBy = [ "network.target" @@ -363,7 +365,10 @@ let (subsystemDevice n) ]; bindsTo = deps ++ optional v.rstp "mstpd.service"; - partOf = [ "network.target" ] + partOf = [ + "network.target" + "networking-scripted.target" + ] ++ optional v.rstp "mstpd.service"; after = [ "network-pre.target" @@ -469,7 +474,10 @@ let ] ++ internalConfigs; before = [ "network.target" ] ++ internalConfigs; - partOf = [ "network.target" ]; # shutdown the bridge when network is shutdown + partOf = [ + "network.target" + "networking-scripted.target" + ]; # shutdown the bridge when network is shutdown bindsTo = [ "ovs-vswitchd.service" ]; # requires ovs-vswitchd to be alive at all times after = [ "network-pre.target" @@ -537,6 +545,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps ++ map (i: "network-addresses-${i}.service") v.interfaces; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -585,6 +594,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -661,6 +671,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -732,6 +743,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -779,6 +791,7 @@ let (subsystemDevice n) ]; bindsTo = deps; + partOf = [ "networking-scripted.target" ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -813,7 +826,10 @@ let (subsystemDevice n) ]; bindsTo = deps; - partOf = [ "network.target" ]; + partOf = [ + "network.target" + "networking-scripted.target" + ]; after = [ "network-pre.target" ] ++ deps; before = [ "network.target" ]; serviceConfig.Type = "oneshot"; @@ -865,6 +881,13 @@ let # to multi-user.target, this has the same result. systemd.targets.network.wantedBy = [ "multi-user.target" ]; + # This target serves no purpose during the boot, but can be + # used to quickly reset the network configuration by running + # systemctl restart networking-scripted.target + systemd.targets.networking-scripted = { + description = "NixOS scripted networking setup"; + }; + services.udev.extraRules = '' KERNEL=="tun", TAG+="systemd" '';