forked from the-distro/infra
77 lines
1.8 KiB
Nix
77 lines
1.8 KiB
Nix
|
|
||
|
{ lib, config, ... }:
|
||
|
let
|
||
|
cfg = config.bagel.hardware.hetzner;
|
||
|
inherit (lib) mkEnableOption mkIf mkOption types;
|
||
|
in
|
||
|
{
|
||
|
options.bagel.hardware.hetzner = {
|
||
|
enable = mkEnableOption "Hetzner's hardware defaults";
|
||
|
|
||
|
platformType = mkOption {
|
||
|
# Only VMs are supported.
|
||
|
type = types.enum [ "virtual-machine" ];
|
||
|
};
|
||
|
|
||
|
system = mkOption {
|
||
|
# Only the aarch64-linux VM Hetzner is supported.
|
||
|
type = types.enum [ "aarch64-linux" ];
|
||
|
};
|
||
|
|
||
|
networking.wan = {
|
||
|
mac = mkOption {
|
||
|
type = types.str;
|
||
|
description = "MAC address of the WAN interface in the Hetzner machine";
|
||
|
};
|
||
|
address = mkOption {
|
||
|
type = types.listOf types.str;
|
||
|
description = "List of static addresses attached to the WAN interface";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = mkIf cfg.enable {
|
||
|
# A bunch of stuff is virtio.
|
||
|
boot.initrd.availableKernelModules = [
|
||
|
"xhci_pci"
|
||
|
"usbhid"
|
||
|
"sr_mod"
|
||
|
"virtio_gpu"
|
||
|
"virtio_scsi"
|
||
|
"virtio_rng"
|
||
|
"virtio_pci"
|
||
|
];
|
||
|
|
||
|
boot.loader.systemd-boot.enable = true;
|
||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||
|
|
||
|
networking.useDHCP = lib.mkDefault false;
|
||
|
|
||
|
# Stolen from the netplan provided by aarch64 Ubuntu images.
|
||
|
systemd.network.enable = true;
|
||
|
systemd.network.links."10-wan" = {
|
||
|
linkConfig.Name = "wan";
|
||
|
matchConfig.MACAddress = cfg.networking.mac;
|
||
|
};
|
||
|
systemd.network.networks."10-wan" = {
|
||
|
matchConfig.Name = "wan";
|
||
|
networkingConfig.Address = cfg.networking.address;
|
||
|
linkConfig.RequiredForOnline = true;
|
||
|
DHCP = "ipv4";
|
||
|
routes = [
|
||
|
{
|
||
|
routeConfig = {
|
||
|
Destination = "::/0";
|
||
|
GatewayOnLink = true;
|
||
|
Gateway = "fe80::1";
|
||
|
};
|
||
|
}
|
||
|
];
|
||
|
dhcpV4Config = {
|
||
|
RouteMetric = 100;
|
||
|
UseMTU = true;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|