Make nix-build args copy-pastable via `set -x`

A reproduce script includes a logline that may resemble:

> using these flags: –arg nixpkgs { outPath = /tmp/build-137689173/nixpkgs/source; rev = "fdc872fa200a32456f12cc849d33b1fdbd6a933c"; shortRev = "fdc872f"; revCount = 273100; } -I nixpkgs=/tmp/build-137689173/nixpkgs/source –arg officialRelease false –option extra-binary-caches https://hydra.nixos.org/ –option system x86_64-linux /tmp/build-137689173/nixpkgs/source/pkgs/top-level/release.nix -A

These are passed along to nix-build and that's fine and dandy, but you can't just copy-paste this as is, as the {} introduces a syntax error and the value accompanying -A is ''.

A very naive approach is to just printf "%q" the individual args, which makes them safe to copy-paste. Unfortunately, this looks awful due to the liberal usage of slashes:

$ printf "%q" '{ outPath = /tmp/build-137689173/nixpkgs/source; rev = "fdc872fa200a32456f12cc849d33b1fdbd6a933c"; shortRev = "fdc872f"; revCount = 273100; }'
\{\ outPath\ =\ /tmp/build-137689173/nixpkgs/source\;\ rev\ =\ \"fdc872fa200a32456f12cc849d33b1fdbd6a933c\"\;\ shortRev\ =\ \"fdc872f\"\;\ revCount\ =\ 273100\;\ \}

Alternatively, if we just use set -x before we execute nix-build, we'll get the whole invocation in a friendly, copy-pastable format that nicely displays {}-enclosed content and preserves the empty arg following -A:

running nix-build...
using this invocation: 
+ nix-build --arg nixpkgs '{ outPath = /tmp/build-138165173/nixpkgs/source; rev = "e0e4484f2c028d2269f5ebad0660a51bbe46caa4"; shortRev = "e0e4484"; revCount = 274008; }' -I nixpkgs=/tmp/build-138165173/nixpkgs/source --arg officialRelease false --option extra-binary-caches https://hydra.nixos.org/ --option system x86_64-linux /tmp/build-138165173/nixpkgs/source/pkgs/top-level/release.nix -A ''

Created by  Josh McSavaney  on March 6, 2021
YQ6ITVPAZPBMBBVCKQND5XFGI2N4Y4HS6AZ6I2LDBBGXSGOZHEPQC
Change contents