# This is a helper file for people using NixOS as their operating system. | |
# If you don't know what this file does, you can safely ignore it. | |
# If you are using Nix as your package manager, you can run 'nix-shell' | |
# in the root directory of the project and Nix will open a bash shell | |
# with all the packages needed to build and run Graphite installed. | |
# A shell.nix file is used in the Nix ecosystem to define a development | |
# environment with specific dependencies. When you enter a Nix shell using | |
# this file, it ensures that all the specified tools and libraries are | |
# available regardless of the host system's configuration. This provides | |
# a reproducible development environment across different machines and developers. | |
# You can enter the Nix shell and run Graphite like normal with: | |
# > npm start | |
# Or you can run it like this without needing to first enter the Nix shell: | |
# > nix-shell --command "npm start" | |
let | |
# Get oxalica's Rust overlay for better Rust integration | |
rust-overlay-source = builtins.fetchGit { | |
url = "https://github.com/oxalica/rust-overlay"; | |
}; | |
# Import it so we can use it in Nix | |
rust-overlay = import rust-overlay-source; | |
# Import system packages overlaid with the Rust overlay | |
pkgs = import <nixpkgs> { | |
overlays = [ rust-overlay ]; | |
}; | |
# Define the rustc we need | |
rustc-wasm = pkgs.rust-bin.stable.latest.default.override { | |
targets = [ "wasm32-unknown-unknown" ]; | |
# wasm-pack needs this | |
extensions = [ "rust-src" "rust-analyzer" "clippy" "cargo"]; | |
}; | |
in | |
# Make a shell with the dependencies we need | |
pkgs.mkShell { | |
packages = with pkgs; [ | |
rustc-wasm | |
nodejs | |
cargo-watch | |
cargo-nextest | |
cargo-expand | |
cargo-about | |
wasm-pack | |
binaryen | |
wasm-bindgen-cli | |
vulkan-loader | |
libxkbcommon | |
pkg-config | |
# used for profiling | |
gnuplot | |
samply | |
cargo-flamegraph | |
# For Tauri | |
at-spi2-atk | |
atkmm | |
cairo | |
gdk-pixbuf | |
glib | |
gtk3 | |
harfbuzz | |
librsvg | |
libsoup_3 | |
pango | |
webkitgtk_4_1 | |
openssl | |
# For Rawkit tests | |
libraw | |
# Use Mold as a linker | |
mold | |
]; | |
# Hacky way to run Cargo through Mold | |
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [pkgs.openssl pkgs.vulkan-loader pkgs.libxkbcommon pkgs.llvmPackages.libcxxStdenv pkgs.gcc-unwrapped.lib pkgs.llvm pkgs.libraw]; | |
shellHook = '' | |
alias cargo='mold --run cargo' | |
''; | |
} | |