{ hostName, config, lib, pkgs, ... }: let gateway = "upstream1"; tunnels = lib.filterAttrs (_: wireguard: wireguard != null ) config.site.hosts.${hostName}.wireguard; firstTunnel = if builtins.length (builtins.attrNames tunnels) > 0 then builtins.head (builtins.attrNames tunnels) else null; enabled = firstTunnel != null; privateKeyFile = ifName: "/run/wireguard-keys/${ifName}.key"; wireguardMark = 1; vpn4Table = 100; in { systemd.services = builtins.foldl' (services: ifName: services // { "wireguard-key-${ifName}" = { description = "Create key file for wireguard interface '${ifName}'"; requiredBy = [ "systemd-networkd.service" ]; before = [ "systemd-networkd.service" ]; serviceConfig.Type = "oneshot"; script = '' #! ${pkgs.runtimeShell} -e F=${privateKeyFile ifName} mkdir -p -m 0700 $(dirname $F) chown systemd-network:systemd-network $(dirname $F) rm -f $F cat >$F <