If one sets the nix.channel.enable option to false on NixOS, then nix-instantiate
(and other similar commands) no longer properly handle $NIX_PATH
(but strangely, -I
still works). For example,
NIX_PATH="hi=bye" nix-instantiate --eval -E "builtins.nixPath"
evaluates to
[ ]
but
nix-instantiate -I "hi=bye" --eval -E "builtins.nixPath"
evaluates to
[ { path = "bye"; prefix = "hi"; } ]
I read nix-channel.nix and the Nix Pill on Nix Search Paths but I’m still not quite sure why this happens. The changes to NIX_PATH
/nix.nixPath
/nix.settings.nix-path
shouldn’t matter when the environmental variable is overwritten since the environmental variable should take priority, so I think it must be a side effect of not having a nix-channel
binary.
Does anyone know why disabling channels prevents $NIX_PATH
from resolving correctly and why $NIX_PATH
and -I
behave differently? Thanks!
(I discovered this while filing an issue about nix-info but I think it is of independent interest.)