diff options
Diffstat (limited to 'pkgs/profpatsch/execline/run-execline.nix')
-rw-r--r-- | pkgs/profpatsch/execline/run-execline.nix | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/pkgs/profpatsch/execline/run-execline.nix b/pkgs/profpatsch/execline/run-execline.nix index 40915f25..61c8c2e6 100644 --- a/pkgs/profpatsch/execline/run-execline.nix +++ b/pkgs/profpatsch/execline/run-execline.nix @@ -1,7 +1,12 @@ -{ stdenv, importasCommand, execlinebCommand }: +{ stdenv, importasCommand, execCommand, redirfdCommand, execlinebCommand }: { name -# the execline script +# the execline script as string , execline +# a string to pass as stdin to the execline script +, stdin ? "" +# a program wrapping the acutal execline invocation; +# should be in Bernstein-chaining style +, builderWrapper ? execCommand # additional arguments to pass to the derivation , derivationArgs ? {} }: @@ -18,20 +23,41 @@ derivation (derivationArgs // { # okay, `builtins.toFile` does not accept strings # that reference drv outputs. This means we need - # to pass the script as envvar; + # to pass the script and stdin as envvar; # this might clash with another passed envar, # so we give it a long & unique name _runExeclineScript = execline; - passAsFile = [ "_runExeclineScript" ] - ++ derivationArgs.passAsFile or []; + _runExeclineStdin = stdin; + passAsFile = [ + "_runExeclineScript" + "_runExeclineStdin" + ] ++ derivationArgs.passAsFile or []; + + # the default, exec acts as identity executable + builder = builderWrapper; - builder = importasCommand; args = [ + importasCommand # import script file as $script "-ui" # drop the envvar afterwards "script" # substitution name "_runExeclineScriptPath" # passed script file + + # TODO: can we scrap stdin via builderWrapper? + importasCommand # do the same for $stdin + "-ui" + "stdin" + "_runExeclineStdinPath" + + redirfdCommand # now we + "-r" # read the file + "0" # into the stdin of execlineb + "$stdin" # that was given via stdin + execlinebCommand # the actual invocation - "-P" # ignore command line arguments + # TODO: depending on the use-case, -S0 might not be enough + # in all use-cases, then a wrapper for execlineb arguments + # should be added (-P, -S, -s). + "-S0" # set $@ inside the execline script "-W" # die on syntax error "$script" # substituted by importas ]; |