diff --git a/.nix/flake.lock b/.nix/flake.lock index ae901cc0..a102f87f 100644 --- a/.nix/flake.lock +++ b/.nix/flake.lock @@ -1,5 +1,19 @@ { "nodes": { + "flake-compat": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -52,6 +66,7 @@ }, "root": { "inputs": { + "flake-compat": "flake-compat", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", "nixpkgs-unstable": "nixpkgs-unstable", diff --git a/.nix/flake.nix b/.nix/flake.nix index 12192fd2..b17a13eb 100644 --- a/.nix/flake.nix +++ b/.nix/flake.nix @@ -24,6 +24,9 @@ inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; + + # This is used to provide a identical development shell at `shell.nix` for users that do not use flakes + flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"; }; outputs = { nixpkgs, nixpkgs-unstable, rust-overlay, flake-utils, ... }: diff --git a/.nix/shell.nix b/.nix/shell.nix new file mode 100644 index 00000000..17dae953 --- /dev/null +++ b/.nix/shell.nix @@ -0,0 +1,31 @@ +# 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 .nix' +# 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 .nix --command "npm start" + +# Uses flake compat to provide a development shell that is identical to the one defined in the flake +(import + ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + nodeName = lock.nodes.root.inputs.flake-compat; + in + fetchTarball { + url = lock.nodes.${nodeName}.locked.url; + sha256 = lock.nodes.${nodeName}.locked.narHash; + } + ) + { src = ./.; } +).shellNix diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 885f49d3..00000000 --- a/shell.nix +++ /dev/null @@ -1,85 +0,0 @@ -# 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 { - 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' - ''; - }