105 lines
2.9 KiB
Nix
105 lines
2.9 KiB
Nix
{
|
|
description = "Bevy + local AI game dev template for macOS with Nix";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, rust-overlay }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [ (import rust-overlay) ];
|
|
};
|
|
|
|
lib = pkgs.lib;
|
|
|
|
rustToolchain = pkgs.rust-bin.stable."1.95.0".default.override {
|
|
extensions = [
|
|
"rust-src"
|
|
"rustfmt"
|
|
"clippy"
|
|
"rust-analyzer"
|
|
];
|
|
targets = [
|
|
"wasm32-unknown-unknown"
|
|
];
|
|
};
|
|
|
|
linuxLibs = lib.optionals pkgs.stdenv.isLinux (with pkgs; [
|
|
alsa-lib
|
|
libudev-zero
|
|
vulkan-loader
|
|
wayland
|
|
libxkbcommon
|
|
xorg.libX11
|
|
xorg.libXcursor
|
|
xorg.libXi
|
|
xorg.libXrandr
|
|
]);
|
|
in {
|
|
devShells.default = pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
rustToolchain
|
|
pkg-config
|
|
clang
|
|
cmake
|
|
git
|
|
just
|
|
bacon
|
|
cargo-edit
|
|
cargo-watch
|
|
cargo-nextest
|
|
nil
|
|
nixd
|
|
taplo
|
|
imagemagick
|
|
pngquant
|
|
ffmpeg
|
|
jq
|
|
fd
|
|
ripgrep
|
|
tree
|
|
python3
|
|
nodejs_22
|
|
libiconv
|
|
] ++ linuxLibs;
|
|
|
|
shellHook = ''
|
|
export RUST_SRC_PATH="${rustToolchain}/lib/rustlib/src/rust/library"
|
|
export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
|
|
export CARGO_INCREMENTAL=1
|
|
export RUST_BACKTRACE=1
|
|
export BEVY_ASSET_ROOT="$PWD/assets"
|
|
|
|
if [ "$(uname)" = "Darwin" ]; then
|
|
if ! xcode-select -p >/dev/null 2>&1; then
|
|
echo 'error: Xcode Command Line Tools missing. Run: xcode-select --install'
|
|
else
|
|
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path 2>/dev/null || true)"
|
|
fi
|
|
fi
|
|
|
|
mkdir -p assets ai/context
|
|
|
|
echo "Bevy + AI shell ready"
|
|
echo "rustc: $(rustc --version)"
|
|
echo "cargo: $(cargo --version)"
|
|
echo "node: $(node --version)"
|
|
|
|
# Keep user prompt/plugins by switching interactive sessions to system zsh.
|
|
# This does not affect `nix develop -c ...` non-interactive commands.
|
|
if [ -n "''${PS1:-}" ] && [ -z "''${ZSH_VERSION:-}" ] && [ -z "''${IN_NIX_DEVELOP_SYSTEM_ZSH:-}" ] && [ -x /bin/zsh ]; then
|
|
export IN_NIX_DEVELOP_SYSTEM_ZSH=1
|
|
export SHELL=/bin/zsh
|
|
exec /bin/zsh -i
|
|
fi
|
|
'';
|
|
};
|
|
}
|
|
);
|
|
}
|