diff --git a/shell.nix b/shell.nix new file mode 100644 index 00000000..d21fc3a0 --- /dev/null +++ b/shell.nix @@ -0,0 +1,63 @@ +# 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 :D + +# 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. + +# If you don't need the shell, you can build Graphite using this command: +# 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 { + 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" ]; + }; +in + # Make a shell with the dependencies we need + pkgs.mkShell { + packages = [ + rustc-wasm + pkgs.nodejs + pkgs.cargo + pkgs.cargo-watch + pkgs.wasm-pack + + pkgs.openssl + pkgs.glib + pkgs.gtk3 + pkgs.libsoup + pkgs.webkitgtk + + pkgs.pkg-config + + # Use Mold as a Linke + pkgs.mold + ]; + + # Hacky way to run cago through Mold + shellHook = '' + alias cargo='mold --run cargo' + ''; + } +