![Eelco Dolstra](/assets/img/avatar_default.png)
Nix search path lookups like <nixpkgs> are now desugared to ‘findFile
nixPath <nixpkgs>’, where ‘findFile’ is a new primop. Thus you can
override the search path simply by saying
let
nixPath = [ { prefix = "nixpkgs"; path = "/my-nixpkgs"; } ];
in ... <nixpkgs> ...
In conjunction with ‘scopedImport’ (commit
c273c15cb1
), the Nix search path can be
propagated across imports, e.g.
let
overrides = {
nixPath = [ ... ] ++ builtins.nixPath;
import = fn: scopedImport overrides fn;
scopedImport = attrs: fn: scopedImport (overrides // attrs) fn;
builtins = builtins // overrides;
};
in scopedImport overrides ./nixos
12 lines
389 B
Nix
12 lines
389 B
Nix
with import ./lib.nix;
|
|
with builtins;
|
|
|
|
assert pathExists <nix/buildenv.nix>;
|
|
|
|
assert length nixPath == 6;
|
|
assert length (filter (x: x.prefix == "nix") nixPath) == 1;
|
|
assert length (filter (x: baseNameOf x.path == "dir4") nixPath) == 1;
|
|
|
|
import <a.nix> + import <b.nix> + import <c.nix> + import <dir5/c.nix>
|
|
+ (let nixPath = [ { path = ./dir1; } { path = ./dir2; } ]; in import <a.nix>)
|