1
0
Fork 0
nixredo/builder.nix

33 lines
1.2 KiB
Nix
Raw Normal View History

builderArgs:
let
myself = { nixpkgs ? <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