To get `bashInteractive`, `nix develop` currently [gets a flake reference to nixpkgs](3b473c4be5/src/nix/develop.cc (L650-L658)), either from [`inputs.nixpkgs`](3b473c4be5/src/libcmd/installable-flake.cc (L204)) or [`<nixpkgs>`](3b473c4be5/src/libcmd/include/nix/cmd/installable-flake.hh (L87)). Currently, this is done by name for any (locked) reference. For any `nixpkgs` reference lacking a `flake.nix`, `nix develop` thus errors: ``` error (ignored): path '.../flake.nix' does not exist ``` While the registry does not expose info to help check this, flake inputs expose the `flake` boolean. This means that given `inputs.<name>.flake = false;`, we may know in advance that our reference should not be to a flake. This change incorporates this, so that given `inputs.nixpkgs.flake = false;`, `nix develop` will fall back `<nixpkgs>` to use its flake for `bashInteractive`. While Nixpkgs itself of course does expose a flake, this check is relevant in particular for dummy inputs (e.g. inputs using `{ url = "file:/dev/null"; flake = false; }`), which may be overridden by `--override-input` or `.follows`, yet do not expose (flake) code themselves. Signed-off-by: cinereal <cinereal@riseup.net>
7.0 KiB
7.0 KiB