{ lib, ... }: let toStringFixed = k: n: lib.fixedWidthString k "0" (toString n); mkNode = id: let a = id / 256; b = id - 256 * a; suffix = "${toStringFixed 3 a}${toStringFixed 3 b}"; suffixA = builtins.substring 0 2 suffix; suffixB = builtins.substring 2 2 suffix; suffixC = builtins.substring 4 2 suffix; in { ipv6 = "fd0a:66d3:1c19:42::${toString a}:${toString b}"; ipv4 = "10.42.${toString a}.${toString b}"; mac = "42:42:42:${suffixA}:${suffixB}:${suffixC}"; id = id; }; mkHub = hub: hub // { ipv6 = "fd0a:66d3:1c19:1000::${toString hub.id}"; }; in { infra = { vxlan = { vni = 42; port = 4789; }; cidr = { hubs.ipv6 = 64; nodes = { ipv4 = 16; ipv6 = 64; }; }; nodes = builtins.mapAttrs (_: mkNode) { vogon = 1; glucagon = 2; ronderu = 3; dodecagon = 4; saigon = 5; harpagon = 6; patagon = 7; wagon = 8; lagon = 9; aragon = 10; pendragon = 11; estragon = 12; carlosgon = 13; memoragon = 14; hendecagon = 15; dragon = 16; perdrigon = 17; martagon = 18; }; hubs = builtins.mapAttrs (_: mkHub) { vogon = { id = 1; publicKey = "d5vEJUiTFQh+MPQcU2JTaJ9lcsvzuoZkohxzeOigiVQ="; endpoint = "193.54.193.161:51039"; }; glucagon = { id = 2; publicKey = "JfTsY3+jPTDgLDrECoSvoYs+6+GpjII0ookjhFhd5SY="; endpoint = "89.234.162.224:51039"; }; ronderu = { id = 3; publicKey = "nOeLgmE1U6nY3UNxltQKwlID9lD7fvpEwij2XUvEGgg="; endpoint = "137.194.12.129:51039"; }; saigon = { id = 4; publicKey = "9pGyE4+CQl+f8sFJ/Mkvp14yxDQJ0SJmGnher5Tgzjc="; endpoint = "193.48.225.201:51039"; }; }; }; }