summaryrefslogtreecommitdiffstats
path: root/lib/shell.nix
blob: 5be8d675924c82eedc29325ea1820d29c4dc6454 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{ lib, ... }:

with lib;

rec {
  escape =
    let
      isSafeChar = testString "[-+./0-9:=A-Z_a-z]";
    in
      x:
        if x == "" then "''"
        else stringAsChars (c:
          if isSafeChar c then c
          else if c == "\n" then "'\n'"
          else "\\${c}"
        ) x;

  #
  # shell script generators
  #

  # example: "${cat (toJSON { foo = "bar"; })} | jq -r .foo"
  cat = s: "printf '%s' ${escape s}";
}