builderArgs: let myself = { nixpkgs ? , pkgs ? import nixpkgs {}, rargs, cwd }: builder: with builtins; let resolveLocal = arg: let fullPath = cwd + "/" + arg + ".nix"; recurse = myself { rargs = [ (toString arg) (toString arg) ]; inherit cwd; }; in recurse fullPath; funcPkgs = { __functor = self: arg: resolveLocal arg; } // pkgs; _builder = if (tryEval (import builder)).success then import builder else '' #!/bin/sh ${builder} $1 $2 $out >$out ''; __builder = if isFunction _builder then _builder funcPkgs else _builder; args = { stdenv = pkgs.stdenvNoCC; } // (if isString __builder then { builder = __builder; } else __builder); in (args.deriver or args.stdenv.mkDerivation) ({ name = pkgs.lib.strings.sanitizeDerivationName (builtins.elemAt rargs 0); buildCommand = args.builder; passAsFile = [ "buildCommand" ]; preferLocalBuild = true; allowSubstitutes = false; } // (removeAttrs args [ "builder" "system" "deriver" "stdenv" ])); # myself in myself builderArgs