2015-08-28 20:09:54 +02:00
|
|
|
{ lib, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
rec {
|
|
|
|
escape =
|
|
|
|
let
|
2017-06-18 15:36:18 +02:00
|
|
|
isSafeChar = testString "[-+./0-9:=A-Z_a-z]";
|
2015-08-28 20:09:54 +02:00
|
|
|
in
|
2017-09-19 20:42:27 +02:00
|
|
|
x:
|
|
|
|
if x == "" then "''"
|
|
|
|
else stringAsChars (c:
|
|
|
|
if isSafeChar c then c
|
|
|
|
else if c == "\n" then "'\n'"
|
|
|
|
else "\\${c}"
|
|
|
|
) x;
|
2015-08-28 20:11:03 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# shell script generators
|
|
|
|
#
|
|
|
|
|
|
|
|
# example: "${cat (toJSON { foo = "bar"; })} | jq -r .foo"
|
|
|
|
cat = s: "printf '%s' ${escape s}";
|
2015-08-28 20:09:54 +02:00
|
|
|
}
|