{ pkgs ? import {} }: with pkgs; let pinnedPkgs = fetchFromGitHub { owner = "NixOS"; repo = "nixpkgs"; rev = "a63a64b593dcf2fe05f7c5d666eb395950f36bc9"; sha256 = "sha256-+ZoAny3ZxLcfMaUoLVgL9Ywb/57wP+EtsdNGuXUJrwg="; }; pkgs = import pinnedPkgs {}; inherit (lib) optional optionals; inherit (darwin.apple_sdk.frameworks) Cocoa CoreGraphics Foundation IOKit Kernel OpenGL Security; in pkgs.mkShell rec { buildInputs = with pkgs; [ clang # Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16) llvmPackages.bintools rustup libiconv watchexec ]; RUSTC_VERSION = pkgs.lib.readFile ./rust-toolchain; # https://github.com/rust-lang/rust-bindgen#environment-variables LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; shellHook = '' export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/ ''; # Add precompiled library to rustc search path RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [ # add libraries here (e.g. pkgs.libvmi) ]); # Add glibc, clang, glib and other headers to bindgen search path BINDGEN_EXTRA_CLANG_ARGS = # Includes with normal include path (builtins.map (a: ''-I"${a}/include"'') [ # add dev libraries here (e.g. pkgs.libvmi.dev) pkgs.libiconv ]) # Includes with special directory paths ++ [ ''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' ''-I"${pkgs.libiconv.out}/lib/"'' ]; }