{ config, lib }: with lib; let cfg = config.hq.yggdrasil; hostNameHash = hashString "sha256" networking.hostName; hextets = map (i: substring (4 * i) (4 * (i + 1)) hostNameHash) [0 1 2 3]; hostAddr = concatStringsSep ":" hextets; in { options = with types; { hq.yggdrasil = { enable = mkEnableOption "Configure Yggdrasil access via the Yggdrasil router"; interface = mkOption { type = nullOr str; default = "eth0"; description = "Network interface to the C3D2 HQ ethernet"; }; }; }; networking.interfaces = optionalAttrs cfg.enable { "${cfg.interface}.ipv6" = { addresses = [ { address = "310:5217:69c0:9afc:${hostAddr}"; prefixLength = 64; } ]; routes = [ { address = "200::"; prefixLength = 7; via = "310:5217:69c0:9afc::1"; } ]; }; }; }