diff options
Diffstat (limited to 'users/Profpatsch/lib.nix')
-rw-r--r-- | users/Profpatsch/lib.nix | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/users/Profpatsch/lib.nix b/users/Profpatsch/lib.nix index 5d5fb01294cb..e3d59b7d8beb 100644 --- a/users/Profpatsch/lib.nix +++ b/users/Profpatsch/lib.nix @@ -1,9 +1,11 @@ { depot, pkgs, ... }: let - bins = depot.nix.getBins pkgs.coreutils [ "printf" "echo" "cat" "printenv" ] + bins = depot.nix.getBins pkgs.coreutils [ "printf" "echo" "cat" "printenv" "tee" ] + // depot.nix.getBins pkgs.bash [ "bash" ] // depot.nix.getBins pkgs.fdtools [ "multitee" ] ; + # Print `msg` and and argv to stderr, then execute into argv debugExec = msg: depot.nix.writeExecline "debug-exec" {} [ "if" [ "fdmove" "-c" "1" "2" @@ -13,10 +15,12 @@ let "$@" ]; + # Print stdin to stderr and stdout eprint-stdin = depot.nix.writeExecline "eprint-stdin" {} [ "pipeline" [ bins.multitee "0-1,2" ] "$@" ]; + # Assume the input on stdin is netencode, pretty print it to stderr and forward it to stdout eprint-stdin-netencode = depot.nix.writeExecline "eprint-stdin-netencode" {} [ "pipeline" [ # move stdout to 3 @@ -30,6 +34,7 @@ let "$@" ]; + # print the given environment variable in $1 to stderr, then execute into the rest of argv eprintenv = depot.nix.writeExecline "eprintenv" { readNArgs = 1; } [ "ifelse" [ "fdmove" "-c" "1" "2" bins.printenv "$1" ] [ "$@" ] @@ -37,6 +42,23 @@ let "$@" ]; + # Split stdin into two commands, given by a block and the rest of argv + # + # Example (execline): + # + # pipeline [ echo foo ] + # split-stdin [ fdmove 1 2 foreground [ cat ] echo "bar" ] cat + # + # stdout: foo\n + # stderr: foo\nbar\n + split-stdin = depot.nix.writeExecline "split-stdin" { argMode = "env"; } [ + "pipeline" [ + # this is horrible yes but the quickest way I knew how to implement it + "runblock" "1" bins.bash "-c" ''${bins.tee} >("$@")'' "bash-split-stdin" + ] + "runblock" "-r" "1" + ]; + # remove everything but a few selected environment variables runInEmptyEnv = keepVars: let @@ -53,6 +75,7 @@ in { eprint-stdin eprint-stdin-netencode eprintenv + split-stdin runInEmptyEnv ; } |