From 49435d68ff6e8749a4aee249f1cce25f51aa6a60 Mon Sep 17 00:00:00 2001 From: kalipso Date: Wed, 11 Dec 2024 12:36:59 +0100 Subject: [PATCH] [nix] output vm packages for each host this now runs any host as microvm. it removes shared directories for microvms so no manuall setup is needed (expect you want persistence). i took it from c3d2, thanks guys for the inspiration <3 https://gitea.c3d2.de/c3d2/nix-config/src/branch/master/packages.nix --- outputs.nix | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/outputs.nix b/outputs.nix index 392401b..630be36 100644 --- a/outputs.nix +++ b/outputs.nix @@ -56,7 +56,46 @@ in (utils.lib.eachSystem (builtins.filter filter_system utils.lib.defaultSystems cp -r ./book/* $dest ''; }; - }; + } // + + builtins.foldl' + (result: host: + let + inherit (self.nixosConfigurations.${host}) config; + in + result // { + # boot any machine in a microvm + "${host}-vm" = (self.nixosConfigurations.${host}.extendModules { + modules = [{ + microvm = { + mem = pkgs.lib.mkForce 4096; + hypervisor = pkgs.lib.mkForce "qemu"; + socket = pkgs.lib.mkForce null; + shares = pkgs.lib.mkForce [{ + tag = "ro-store"; + source = "/nix/store"; + mountPoint = "/nix/.ro-store"; + }]; + interfaces = pkgs.lib.mkForce [{ + type = "user"; + id = "eth0"; + mac = "02:23:de:ad:be:ef"; + }]; + }; + boot.isContainer = pkgs.lib.mkForce false; + users.users.root.password = ""; + fileSystems."/".fsType = pkgs.lib.mkForce "tmpfs"; + services.getty.helpLine = '' + Log in as "root" with an empty password. + Use "reboot" to shut qemu down. + ''; + }] ++ pkgs.lib.optionals (! config ? microvm) [ + microvm.nixosModules.microvm + ]; + }).config.microvm.declaredRunner; + }) + { } + (builtins.attrNames self.nixosConfigurations); apps = { docs = {