{ description = "Bevy project with Rust and dependencies via nixpkgs and oxalica/rust-overlay"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; 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; }; stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv; rustToolchain = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; nativeBuildInputs = with pkgs; [ rustToolchain mold pkg-config clang ]; xorgBuildInputs = with pkgs; [ xorg.libX11 xorg.libXcursor xorg.libXi ]; waylandBuildInputs = with pkgs; [ libxkbcommon wayland ]; buildInputs = with pkgs; [ alsa-lib systemd vulkan-loader ] ++ xorgBuildInputs ++ waylandBuildInputs; mkShell = pkgs.mkShell.override { stdenv = stdenv; }; in { packages.default = pkgs.rustPlatform.buildRustPackage { inherit stdenv buildInputs nativeBuildInputs; pname = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.name; version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.version; src = ./.; cargoLock = { lockFile = ./Cargo.lock; }; }; devShells.default = mkShell { inherit buildInputs nativeBuildInputs; RUST_BACKTRACE = 1; shellHook = '' export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${pkgs.lib.makeLibraryPath buildInputs}" ''; }; } ); }