{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; rust-overlay.url = "github:oxalica/rust-overlay"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, rust-overlay, flake-utils }: flake-utils.lib.eachDefaultSystem ( system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; app = "bevy_test"; rust = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" ]; }; rustPlatform = pkgs.makeRustPlatform { cargo = rust; rustc = rust; }; shellInputs = [ rust pkgs.clang ]; appNativeBuildInputs = with pkgs; [ pkg-config ]; appBuildInputs = appRuntimeInputs ++ (with pkgs; [ udev alsaLib wayland vulkan-tools vulkan-headers vulkan-validation-layers ]); appRuntimeInputs = with pkgs; [ vulkan-loader libxkbcommon ]; in { devShells = let game = pkgs.mkShell { nativeBuildInputs = appNativeBuildInputs; buildInputs = shellInputs ++ appBuildInputs; shellHook = '' export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${pkgs.lib.makeLibraryPath appRuntimeInputs}" ''; }; in rec { ${app} = game; default = game; }; packages = let game = rustPlatform.buildRustPackage { pname = app; version = "0.1.0"; src = ./.; cargoLock = { lockFile = ./Cargo.lock; }; nativeBuildInputs = appNativeBuildInputs; buildInputs = appBuildInputs; postInstall = '' cp -r assets $out/bin/ ''; }; in rec { ${app} = game; default = game; }; apps = let game = { type = "app"; program = "${self.packages.${app}}/bin/${app}"; }; in rec { ${app} = game; default = game; }; checks.build = self.packages.${system}.${app}; } ); }