{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; systems.url = "github:nix-systems/default"; }; outputs = { systems, nixpkgs, ... } @ inputs: let yarn_overlay = final: prev: { yarn = prev.yarn.overrideAttrs(finalAttrs: prevAttrs: { # This is to make sure that yarn runs the correct node version # https://github.com/NixOS/nixpkgs/issues/145634#issuecomment-1627476963 installPhase = prevAttrs.installPhase + '' ln -fs $out/libexec/yarn/bin/yarn $out/bin/yarn ln -fs $out/libexec/yarn/bin/yarn.js $out/bin/yarn.js ln -fs $out/libexec/yarn/bin/yarn $out/bin/yarnpkg ''; }); }; # This gives us a central place to set the node version node_overlay = final: prev: { nodejs = prev.nodejs-18_x; }; eachSystem = f: nixpkgs.lib.genAttrs (import systems) ( system: f ((nixpkgs.legacyPackages.${system}.extend yarn_overlay).extend node_overlay) ); in { devShells = eachSystem (pkgs: { default = pkgs.mkShell { buildInputs = with pkgs; [ nodejs yarn ]; shellHook = '' echo "node `${pkgs.nodejs}/bin/node --version`" ''; }; }); }; }