{ config, lib, pkgs, ... }: let systemsDir = ../../../../../systems; systemNames = lib.attrNames (lib.filterAttrs (name: type: type == "directory" && builtins.pathExists (systemsDir + "/${name}/cfg.nix")) (builtins.readDir systemsDir)); # Use a helper to check if the attribute path exists safely # This prevents the "attribute 'net' missing" error isValidPeer = p: (p ? syscfg.net.wg.enable) && (p.syscfg.net.wg.enable == true) && (p.syscfg.net.wg.pubkey != config.syscfg.net.wg.pubkey); importedConfigs = map (name: import (systemsDir + "/${name}/cfg.nix")) systemNames; activePeers = builtins.filter isValidPeer importedConfigs; in { imports = [ ./forwarding.nix ]; config = lib.mkIf (config.syscfg.net.wg.enable) { networking.wireguard = { enable = true; interfaces = { wg0 = { ips = [ config.syscfg.net.wg.ip4 config.syscfg.net.wg.ip6 ]; privateKeyFile = config.sops.secrets."${config.syscfg.hostname}_wg_priv".path; listenPort = 1515; mtu = 1340; peers = if config.syscfg.net.wg.server.enable then map (p: { name = p.syscfg.hostname; publicKey = p.syscfg.net.wg.pubkey; allowedIPs = [ p.syscfg.net.wg.ip4 p.syscfg.net.wg.ip6 ]; }) activePeers else [{ allowedIPs = [ "10.10.1.0/24" "fd10:10:10::0/64" ]; endpoint = "vpn.helcel.net:1515"; publicKey = "NFBJvYXZC+bd62jhrKnM7/pugidWhgR6+C5qIiUiq3Q="; persistentKeepalive = 30; }]; }; }; }; }; }