{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; }; outputs = inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = [ "x86_64-linux" "aarch64-linux" ]; perSystem = { pkgs, ... }: let buildEnvVars = { BIN_XDG_PERMISSION_STORE = "${pkgs.xdg-desktop-portal}/libexec/xdg-permission-store"; BIN_XDG_DOCUMENT_PORTAL = "${pkgs.xdg-desktop-portal}/libexec/xdg-document-portal"; BIN_VIRTIOFSD = "${pkgs.virtiofsd}/bin/virtiofsd"; }; rustPackage = crate: let cargoToml = builtins.fromTOML (builtins.readFile ./${crate}/Cargo.toml); in pkgs.rustPlatform.buildRustPackage { inherit (cargoToml.package) name version; src = ./.; cargoLock.lockFile = ./Cargo.lock; cargoLock.outputHashes = { "busd-0.5.0" = "sha256-IZZ2MeEmUbzRrH6SUz0pnecMH4f8Mh54WdhI4q44YfI="; }; buildAndTestSubdir = crate; env = buildEnvVars; }; in { devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ cargo rustc rust-analyzer clippy ]; env = buildEnvVars; }; packages.sidebus-agent = rustPackage "sidebus-agent"; packages.sidebus-broker = rustPackage "sidebus-broker"; }; flake = { nixosModules.sidebus-vm = ./nixosModules/sidebus-vm.nix; }; }; }