34 lines
857 B
Nix
34 lines
857 B
Nix
{ 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"; }
|
|
];
|
|
};
|
|
};
|
|
}
|