{ lib, ... }: let peerSpec = { # "Server" porthos = { clientNum = 1; externalIp = "91.121.177.163"; }; # "Clients" aramis = { clientNum = 2; }; richelieu = { clientNum = 3; }; }; makePeer = name: attrs: with lib; { inherit (attrs) clientNum; publicKey = fileContents (./. + "/${name}/public.key"); privateKey = fileContents (./. + "/${name}/secret.key"); } // optionalAttrs (attrs ? externalIp) { inherit (attrs) externalIp; }; in { peers = builtins.mapAttrs makePeer peerSpec; }