{ nixConfig = { extra-substituters = [ "https://cache.clan.lol" ]; extra-trusted-public-keys = [ "cache.clan.lol-1:3KztgSAB5R1M+Dz7vzkBGzXdodizbgLXGXKXlcQLA28=" ]; }; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; virtwl.url = "git+https://github.com/valpackett/wayland-proxy-virtwl?shallow=1&submodules=1&ref=wip"; virtwl.inputs.nixpkgs.follows = "nixpkgs"; sidebus.url = "git+https://git.clan.lol/clan/sidebus?shallow=1&ref=main"; sidebus.inputs.nixpkgs.follows = "nixpkgs"; # To override with local checkouts during development, use the --override-input CLI flag! muvm-src = { url = "github:valpackett/muvm/3ec4c90bbfb6d0111f91b898a7f17deb562f4f92"; flake = false; }; libkrun-src = { url = "github:containers/libkrun/b250ee6fff7d959da3d55bb62ffe09d87248651c"; flake = false; }; libkrunfw-src = { url = "github:containers/libkrunfw/8a8c33f24f72aa6ca017347dc2be45b6fa612af5"; flake = false; }; }; outputs = { self, nixpkgs, flake-utils, virtwl, sidebus, muvm-src, libkrun-src, libkrunfw-src, ... }: { nixosModules.testvm = nixpkgs.lib.modules.importApply ./nixosModules/testvm.nix { inherit virtwl; }; nixosModules.default = nixpkgs.lib.modules.importApply ./nixosModules/default.nix { inherit self virtwl sidebus; }; nixosConfigurations.testvm-x86_64 = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ self.nixosModules.default self.nixosModules.testvm { nixpkgs.config.allowUnfree = true; } ]; }; nixosConfigurations.testvm-aarch64 = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ self.nixosModules.default self.nixosModules.testvm { nixpkgs.config.allowUnfree = true; } ]; }; } // flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system: let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; in { checks = (pkgs.lib.mapAttrs' (n: pkgs.lib.nameValuePair "package-${n}") self.packages.${system}) // (pkgs.lib.mapAttrs' (n: pkgs.lib.nameValuePair "devShell-${n}") self.devShells.${system}) // (pkgs.lib.optionalAttrs (system == "x86_64-linux") { nixos-testvm = self.nixosConfigurations.testvm-x86_64.config.system.build.toplevel; }) // (pkgs.lib.optionalAttrs (system == "aarch64-linux") { nixos-testvm = self.nixosConfigurations.testvm-aarch64.config.system.build.toplevel; }); packages = { # Packages support variant parameter: null (default), "sev", or "tdx" # To build a variant: packages.libkrunfw.override { variant = "sev"; } libkrunfw = pkgs.callPackage ./packages/libkrunfw { libkrunfw-src = libkrunfw-src; }; libkrun = pkgs.callPackage ./packages/libkrun { libkrunfw = self.packages.${system}.libkrunfw; libkrun-src = libkrun-src; }; mesa = pkgs.callPackage ./packages/mesa { }; muvm = pkgs.callPackage ./packages/muvm { libkrun = self.packages.${system}.libkrun; muvm-src = muvm-src; }; munix = pkgs.callPackage ./packages/munix { mesa = self.packages.${system}.mesa; muvm = self.packages.${system}.muvm; sidebus-broker = sidebus.packages.${system}.sidebus-broker; }; }; devShells.default = pkgs.callPackage ./devShells { libkrun = self.packages.${system}.libkrun; muvm = self.packages.${system}.muvm; sidebus-broker = sidebus.packages.${system}.sidebus-broker; }; }); }