nix-dotfiles/lib/microvms.nix

57 lines
1.5 KiB
Nix
Raw Normal View History

{ lib, ... }:
rec {
genK3SVM =
server-config: agent-config: vms:
lib.mapAttrs (
host: {ipv4,server ? false}:
genMicroVM host ipv4 "x86_64-linux" (
if server then (import server-config) else (import agent-config)
)
) vms;
genMicroVM =
hostName: ipv4: system: vm-config:
# microvm refers to microvm.nixosModules
# {
# config,
# pkgs,
# lib,
# ...
# }:
{
# The package set to use for the microvm. This also determines the microvm's architecture.
# Defaults to the host system's package set if not given.
# pkgs = import pkgs { inherit system; };
# (Optional) A set of special arguments to be passed to the MicroVM's NixOS modules.
#specialArgs = {};
# The configuration for the MicroVM.
# Multiple definitions will be merged as expected.
config = {
# It is highly recommended to share the host's nix-store
# with the VMs to prevent building huge images.
microvm.shares = [
{
source = "/nix/store";
mountPoint = "/nix/.ro-store";
tag = "ro-store";
proto = "virtiofs";
}
];
networking = {
inherit hostName;
interfaces.ether.ipv4.addreses = {
address = ipv4;
prefixLength = 32;
};
};
# Any other configuration for your MicroVM
# [...]
} // vm-config;
};
}