44 lines
1.4 KiB
Nix
44 lines
1.4 KiB
Nix
{
|
|
pkgs ? import <nixpkgs> { },
|
|
}:
|
|
|
|
let
|
|
# First, select the rust toolchain attribute set from pkgs.
|
|
# This set contains cargo, rustc, rust-std, rust-src, etc.
|
|
# Using `pkgs.rust-toolchain` will select the default stable toolchain.
|
|
rust-toolchain = pkgs.rust-toolchain;
|
|
in
|
|
pkgs.mkShell {
|
|
# nativeBuildInputs are tools you run on your machine during development.
|
|
nativeBuildInputs = with pkgs; [
|
|
# 1. Add the main toolchain components (cargo, rustc).
|
|
rust-toolchain
|
|
|
|
# 2. Add the Rust standard library for our specific WebAssembly target.
|
|
# We get `rust-std` from the `rust-toolchain` set we defined above
|
|
# to guarantee version consistency.
|
|
(rust-toolchain.rust-std.override {
|
|
targets = [ "wasm32-unknown-unknown" ];
|
|
})
|
|
|
|
# 3. Add the other necessary tools.
|
|
wasm-bindgen-cli
|
|
bun
|
|
clang # Recommended linker for wasm on NixOS
|
|
pkg-config
|
|
openssl
|
|
];
|
|
|
|
# Environment variables that will be set when you enter the shell.
|
|
shellHook = ''
|
|
# Set the linker for the wasm target to avoid potential issues.
|
|
export CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_LINKER="${pkgs.clang}/bin/clang"
|
|
|
|
# Set the path to the Rust standard library source code.
|
|
# This is used by tools like rust-analyzer for "go to definition", etc.
|
|
export RUST_SRC_PATH="${rust-toolchain}/lib/rustlib/src/rust/library"
|
|
|
|
echo "✅ Nix shell is ready with Rust (wasm target), wasm-bindgen, and Bun."
|
|
'';
|
|
}
|