{ 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; }; }; }