about summary refs log tree commit diff
path: root/pkgs/profpatsch/execline
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2020-01-26 22:50:52 +0100
committerProfpatsch <mail@profpatsch.de>2020-01-26 22:52:30 +0100
commit905248dcb80e56903a0a8cbe13f8966a4b940330 (patch)
treeea8898afe48a448afe4521bfba6b067b7a4de0eb /pkgs/profpatsch/execline
parent057b0a46b542267dc4c8a3a61427923bb2797a50 (diff)
pkgs/profpatsch/write-execline: add all argparsing commands
In some cases (especially with `runblock`), the arguments need to be
accessible as environment variables, so we need a way to pass that to
execline.
Diffstat (limited to 'pkgs/profpatsch/execline')
-rw-r--r--pkgs/profpatsch/execline/write-execline.nix22
1 files changed, 20 insertions, 2 deletions
diff --git a/pkgs/profpatsch/execline/write-execline.nix b/pkgs/profpatsch/execline/write-execline.nix
index f83aa2ed..23c96454 100644
--- a/pkgs/profpatsch/execline/write-execline.nix
+++ b/pkgs/profpatsch/execline/write-execline.nix
@@ -5,8 +5,26 @@ let
   # Write a list of execline argv parameters to an execline script.
   # Everything is escaped correctly.
   # TODO upstream into nixpkgs
-  writeExeclineCommon = writer: name: { readNArgs ? 0 }: argList: writer name ''
-    #!${pkgs.execline}/bin/execlineb -Ws${toString readNArgs}
+  writeExeclineCommon = writer: name: {
+     # "var": substitute readNArgs variables and start $@ from the (readNArgs+1)th argument
+     # "var-full": substitute readNArgs variables and start $@ from $0
+     # "env": don’t substitute, set # and 0…n environment vaariables, where n=$#
+     # "none": don’t substitute or set any positional arguments
+     # "env-no-push": like "env", but bypass the push-phase. Not recommended.
+     argMode ? "var",
+     # Number of arguments to be substituted as variables (passed to "var"/"-s" or "var-full"/"-S"
+     readNArgs ? 0,
+  }: argList:
+   let
+     env =
+       if      argMode == "var" then "s${toString readNArgs}"
+       else if argMode == "var-full" then "S${toString readNArgs}"
+       else if argMode == "env" then ""
+       else if argMode == "none" then "P"
+       else if argMode == "env-no-push" then "p"
+       else abort ''"${toString argMode}" is not a valid argMode, use one of "var", "var-full", "env", "none", "env-no-push".'';
+   in writer name ''
+    #!${pkgs.execline}/bin/execlineb -W${env}
     ${escape.escapeExecline argList}
   '';
   writeExecline = writeExeclineCommon pkgs.writeScript;