From 48e3f7c54a6b28546b015fd83440be0f1470f989 Mon Sep 17 00:00:00 2001 From: isiko Date: Tue, 8 Aug 2023 14:03:10 +0200 Subject: [PATCH] Add config for nix-shell (#1359) * Add config for nix-shell This adds a development environment for Nix users, which automatically installs all libraries needed for building and fixes some nix stuff. * Add Mold This adds the Mold-Linker to improve build times. I also added an alias, so cargo is run through mold. --- shell.nix | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 shell.nix 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' + ''; + } +