buildArgs@{ lib ? import ./lib.nix {}, nixpkgs ? , pkgs ? import nixpkgs {} }: let inherit (lib) searchPath whichdo d1 d2; resolve = path: let builder = (whichdo path); in if builder == "" then throw "No rule to build ${path}" else runBuilder (d1 path builder) (d2 path builder) builder; runBuilder = d1: d2: builder: with pkgs.lib; with builtins; let # Funktionalise pkgs; our main entry point to resolve default*nix build scripts. funcPkgs = { __functor = self: arg: resolve arg; } // pkgs; _builder = if (tryEval (let # Needs to be done as nix chokes on empty files rn. content = readFile builder; in assert content != "" && (! (hasPrefix "#!" content)); import builder)).success then import builder else '' #!/bin/sh ${/. + builder} $d1 $d2 $out >$out ''; __builder = if isFunction _builder then _builder funcPkgs else _builder; args = { stdenv = pkgs.stdenvNoCC; } // (if isString __builder then { builder = __builder; } else __builder); drv = (args.deriver or args.stdenv.mkDerivation) ({ name = pkgs.lib.strings.sanitizeDerivationName d1; buildCommand = args.builder; passAsFile = [ "buildCommand" ]; preferLocalBuild = true; allowSubstitutes = false; inherit d1 d2; } // (removeAttrs args [ "builder" "system" "deriver" "stdenv" ])); in drv; # myself in resolve