diff --git a/shell.nix b/shell.nix index ce1add060d9a466a6c5fb93d137dd7c1db2cdf14..fe76c1e7878628cff2a5a1fcdd8d027b2c817a7a 100644 --- a/shell.nix +++ b/shell.nix @@ -3,8 +3,17 @@ let in { pkgs ? release2105 }: pkgs.mkShell { + # When a path (such as `pkgs.path`) is interpolated into a string then nix + # first adds that path to the store, and then interpolates the store path + # into the string. We use `builtins.toString` to convert the path to a + # string without copying it to the store before interpolating. Either the + # path is already in the store (e.g. when `pkgs` is `release2105`) so we + # avoid making a second copy with a longer name, or the user passed in local + # path (e.g. a checkout of nixpkgs) and we point at it directly, rather than + # a snapshot of it. + # See https://github.com/NixOS/nix/issues/200 and https://github.com/NixOS/nix/issues/1728 shellHook = '' - export NIX_PATH="nixpkgs=${pkgs.path}"; + export NIX_PATH="nixpkgs=${builtins.toString pkgs.path}"; ''; buildInputs = [ pkgs.morph