tvl-depot/nix/writeExecline/default.nix
Vincent Ambo aa122cbae7 style: format entire depot with nixpkgs-fmt
This CL can be used to compare the style of nixpkgs-fmt against other
formatters (nixpkgs, alejandra).

Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
Reviewed-by: lukegb <lukegb@tvl.fyi>
Reviewed-by: wpcarro <wpcarro@gmail.com>
Reviewed-by: Profpatsch <mail@profpatsch.de>
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Reviewed-by: tazjin <tazjin@tvl.su>
Reviewed-by: cynthia <cynthia@tvl.fyi>
Reviewed-by: edef <edef@edef.eu>
Reviewed-by: eta <tvl@eta.st>
Reviewed-by: grfn <grfn@gws.fyi>
2022-01-31 16:11:53 +00:00

39 lines
1.3 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ pkgs, depot, ... }:
# Write an execline script, represented as nested nix lists.
# Everything is escaped correctly.
# https://skarnet.org/software/execline/
# TODO(Profpatsch) upstream into nixpkgs
name:
{
# "var": substitute readNArgs variables and start $@
# from the (readNArgs+1)th argument
# "var-full": substitute readNArgs variables and start $@ from $0
# "env": dont substitute, set # and 0…n environment vaariables, where n=$#
# "none": dont 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
,
}:
# Nested list of lists of commands.
# Inner lists are translated to execline blocks.
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
depot.nix.writeScript name ''
#!${pkgs.execline}/bin/execlineb -W${env}
${depot.nix.escapeExecline argList}
''