{ pkgs, config, lib, modulesPath, microvm, disko, agenix, machines, dns, machine, nixos-hardware, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") microvm.nixosModules.host nixos-hardware.nixosModules.raspberry-pi-4 ]; config = { fileSystems = { "/" = { device = "/dev/disk/by-label/NIXOS_SD"; fsType = "ext4"; options = [ "noatime" ]; }; }; # boot.loader.grub.device = "/dev/sda"; # boot.loader.grub.enable = true; # boot.loader.grub.efiSupport = true; # boot.loader.grub.efiInstallAsRemovable = true; # boot.loader.grub.device = "nodev"; # boot = { # # kernelModules = [ "kvm-intel" ]; # kernelModules = [ ]; # extraModulePackages = [ ]; # initrd = { # availableKernelModules = [ # "ahci" # "xhci_pci" # "nvme" # "usbhid" # "usb_storage" # "sd_mod" # "sdhci_pci" # ]; # kernelModules = [ ]; # }; # loader = { # # systemd-boot.enable = true; # efi.canTouchEfiVariables = true; # }; # }; nixpkgs = { config.allowUnfree = true; # hostPlatform = machine.arch; }; # hardware.cpu.intel.updateMicrocode = config.hardware.enableRedistributableFirmware; age.identityPaths = [ "/etc/age_ed25519" ]; nix = { package = pkgs.nixFlakes; extraOptions = '' experimental-features = nix-command flakes ''; }; system = { stateVersion = "23.05"; activationScripts.diff = '' if [[ -e /run/current-system ]]; then ${pkgs.nix}/bin/nix store diff-closures /run/current-system "$systemConfig" fi ''; }; microvm.vms = let vmsForHypervisor = lib.filterAttrs (n: v: v.type == "virtual" && v.hypervisorName == config.networking.hostName) machines; in builtins.mapAttrs (name: vm: { # Do not restart virtual machines to apply configuration changes. # While conceptually this seems useful, it could result in annoying situations. # For example, changing the default VM configuration will restart ALL VMs simultaneously, causing a lot of stress on the servers. # Downside of not restarting, is that we may need to do this manually now to apply changes. restartIfChanged = false; specialArgs = { inherit agenix disko pkgs lib microvm dns; machine = vm; hypervisorConfig = config; }; config.imports = [ ./. { networking.hostName = name; } ]; } ) vmsForHypervisor; }; }