{ lib, ... }: rec { genK3SFromList = server-config: agent-config: { host, ipv4, server ? false, }@args: lib.mapAttrs ( args: lib.rad-dev.microvms.genMicroVM args.host args.ipv4 "x86_64-linux" ( if server then import server-config else import agent-config ) ) args; genMicroVM = hostName: ipv4: system: vm-config: # microvm refers to microvm.nixosModules { config, pkgs, lib, ... }: { ${hostName} = { # 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 = 24; }; }; # Any other configuration for your MicroVM # [...] } // vm-config; }; }; }