nix-config/lib/yggdrasil-hq.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"; }
];
};
};
}