server-configs/shared/platforms/hetzner.nix

79 lines
1.8 KiB
Nix
Raw Normal View History

{ config, lib, modulesPath, ... }:
with lib;
let
cfg = config.mine.platforms.hetzner;
mkIfOption = name: attrset: lib.optionalAttrs (
builtins.hasAttr name config.mine
) attrset;
in {
options.mine.platforms.hetzner= {
enable = mkEnableOption "Enable Hetzner platform profile";
network = {
address = mkOption {
type = types.listOf types.str;
example = "[\"55.72.39.76/32\"";
};
};
};
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
config = mkIf cfg.enable ({
boot = {
loader = {
grub.enable = true;
grub.device = "/dev/sda";
2024-08-08 22:02:37 +00:00
# TODO(eyJhb): temp, something about disko
# https://github.com/nix-community/disko/issues/572
# can't be removed even when the VPS does not use UEFI
grub.efiSupport = true;
grub.efiInstallAsRemovable = true;
};
initrd = {
availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sd_mod" "sr_mod" ];
};
};
networking.useDHCP = false;
systemd.network = {
enable = true;
networks.hetzner = {
name = "enp1s0";
address = cfg.network.address;
gateway = [
"fe80::1"
"172.31.1.1"
];
routes = [
{ Destination = "172.31.1.1"; }
{ Destination = "fe80::1"; }
];
};
};
# ssh on boot
mine.ssh-on-boot.network = let
netmaskAddressList = (lib.take 3 (lib.splitString "." "135.181.98.1")) ++ ["255"];
netmaskAddress = lib.concatStringsSep "." netmaskAddressList;
in {
address = lib.mkDefault (lib.elemAt cfg.network.address 0);
gateway = lib.mkDefault "172.31.1.1";
netmask = lib.mkDefault netmaskAddress;
interface = lib.mkDefault "enp1s0";
};
});
}