nixos-conf/modules/platform/hetzner.nix

48 lines
1.2 KiB
Nix

{ config, lib, ... }:
let
cfg = config.custom.platform.hetzner;
in
{
options.custom.platform.hetzner = {
enable = lib.mkEnableOption "Hetzner cloud configuration";
ipv4Address = lib.mkOption {
type = with lib.types; nullOr (strMatching "^[0-9]+.[0-9]+.[0-9]+.[0-9]+/32$");
default = null;
};
ipv6Address = lib.mkOption {
type = with lib.types; nullOr (strMatching "^[0-9a-zA-Z:]+/64$");
default = null;
};
interfaceName = lib.mkOption {
type = with lib.types; nullOr str;
default = "enp1s0";
};
};
config = lib.mkIf cfg.enable {
networking.networkmanager.enable = lib.mkForce false;
networking.useDHCP = false;
systemd.network.enable = true;
systemd.network.networks."30-wan" = {
matchConfig.Name = cfg.interfaceName;
networkConfig.DHCP = "no";
address = [
cfg.ipv4Address
cfg.ipv6Address
];
routes = [
{
Gateway = "172.31.1.1";
GatewayOnLink = true;
}
{ Gateway = "fe80::1"; }
];
};
boot.loader = {
efi.canTouchEfiVariables = false;
systemd-boot.enable = false;
grub.enable = true;
};
};
}