{ 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-parts.url = "github:hercules-ci/flake-parts"; flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; sidebus.url = "git+https://git.clan.lol/clan/sidebus?shallow=1&ref=main"; sidebus.inputs.nixpkgs.follows = "nixpkgs"; sidebus.inputs.flake-parts.follows = "flake-parts"; wl-backdrop.url = "git+https://git.clan.lol/valpackett/wl-backdrop?shallow=1&ref=main"; wl-backdrop.inputs.nixpkgs.follows = "nixpkgs"; wl-backdrop.inputs.flake-parts.follows = "flake-parts"; # To override with local checkouts during development, use the --override-input CLI flag! muvm-src = { url = "github:valpackett/muvm/c68742bcedb96deb6f23ed5a83188022d1cdf71d"; # v0.5.0+custom-init+dbus flake = false; }; libkrun-src = { url = "github:valpackett/libkrun/eeafbc55379b60379414168e7a22d5f95b73d7a0"; # PR #558 (map permission fix) + D-Bus WIP flake = false; }; # libkrunfw-src = { # url = "github:containers/libkrunfw/20484a2e60290acb74c43ccfd6e1ea4caf41d470"; # v5.1.0 # flake = false; # }; flake-compat = { url = "https://git.lix.systems/lix-project/flake-compat/archive/main.tar.gz"; flake = false; }; }; outputs = inputs@{ self, nixpkgs, flake-parts, sidebus, wl-backdrop, muvm-src, libkrun-src, # libkrunfw-src, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = [ "x86_64-linux" "aarch64-linux" ]; flake = { nixosModules.testvm = nixpkgs.lib.modules.importApply ./nixosModules/testvm.nix { }; nixosModules.default = nixpkgs.lib.modules.importApply ./nixosModules/default.nix { inherit self; }; templates.musictest = { description = "Music player demo VM with MPD and Euphonica"; path = ./templates/musictest; }; 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; } ]; }; }; perSystem = { pkgs, system, self', ... }: let scope = pkgs.callPackage ./scope.nix { }; in { _module.args.pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; checks = (pkgs.lib.mapAttrs' (n: pkgs.lib.nameValuePair "package-${n}") self'.packages) // (pkgs.lib.mapAttrs' (n: pkgs.lib.nameValuePair "devShell-${n}") self'.devShells) // (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"; } inherit (scope) libkrunfw libkrun mesa muvm munix wl-cross-domain-proxy ; }; devShells.default = scope.callPackage ./devShells { }; }; }; }