{ config, lib, ... }: with lib; let cfg = config.hq.yggdrasil; hostNameHash = builtins.hashString "sha256" config.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"; }; }; }; config = mkIf cfg.enable { networking.interfaces = { "${cfg.interface}" = { "ipv6" = { addresses = [{ address = "310:5217:69c0:9afc:${hostAddr}"; prefixLength = 64; }]; routes = [{ address = "200::"; prefixLength = 7; via = "310:5217:69c0:9afc::1"; }]; }; }; }; }; }