{lib,...}: let build = iface: mac: rest: lib.recursiveUpdate rest { systemd.network.enable = true; systemd.network.links."${iface}" = { linkConfig.Name = iface; matchConfig.PermanentMACAddress = mac; }; systemd.network.networks."${iface}".enable = true; }; in { bridge = br: ip: gateway: iface: mac: build iface mac { systemd.network.networks."${iface}".bridge = [ br ]; systemd.network.networks."${br}" = { address = [ ip ]; gateway = [ gateway ]; }; systemd.network.netdevs."${br}" = { netdevConfig = { Name = br; Kind = "bridge"; }; }; }; dhcp = iface: mac: build iface mac { systemd.network.networks."${iface}" = { DHCP = "yes"; }; }; }