Skip to content

lib.cli: command-line serialization functions

lib.cli.toGNUCommandLineShell

Automatically convert an attribute set to command-line options.

This helps protect against malformed command lines and also to reduce boilerplate related to command-line construction for simple use cases.

toGNUCommandLineShell returns an escaped shell string.

Inputs

options

: How to format the arguments, see toGNUCommandLine

attrs

: The attributes to transform into arguments.

Examples

lib.cli.toGNUCommandLineShell usage example

cli.toGNUCommandLineShell {} {
  data = builtins.toJSON { id = 0; };
  X = "PUT";
  retry = 3;
  retry-delay = null;
  url = [ "https://example.com/foo" "https://example.com/bar" ];
  silent = false;
  verbose = true;
}
=> "'-X' 'PUT' '--data' '{\"id\":0}' '--retry' '3' '--url' 'https://example.com/foo' '--url' 'https://example.com/bar' '--verbose'";

Located at lib/cli.nix:43 in <nixpkgs>.

lib.cli.toGNUCommandLine

Automatically convert an attribute set to a list of command-line options.

toGNUCommandLine returns a list of string arguments.

Inputs

options

: How to format the arguments, see below.

attrs

: The attributes to transform into arguments.

Options

mkOptionName

: How to string-format the option name; By default one character is a short option (-), more than one characters a long option (--).

mkBool

: How to format a boolean value to a command list; By default it’s a flag option (only the option name if true, left out completely if false).

mkList

: How to format a list value to a command list; By default the option name is repeated for each value and mkOption is applied to the values themselves.

mkOption

: How to format any remaining value to a command list; On the toplevel, booleans and lists are handled by mkBool and mkList, though they can still appear as values of a list. By default, everything is printed verbatim and complex types are forbidden (lists, attrsets, functions). null values are omitted.

optionValueSeparator

: How to separate an option from its flag; By default, there is no separator, so option -c and value 5 would become ["-c" "5"]. This is useful if the command requires equals, for example, -c=5.

Examples

lib.cli.toGNUCommandLine usage example

cli.toGNUCommandLine {} {
  data = builtins.toJSON { id = 0; };
  X = "PUT";
  retry = 3;
  retry-delay = null;
  url = [ "https://example.com/foo" "https://example.com/bar" ];
  silent = false;
  verbose = true;
}
=> [
  "-X" "PUT"
  "--data" "{\"id\":0}"
  "--retry" "3"
  "--url" "https://example.com/foo"
  "--url" "https://example.com/bar"
  "--verbose"
]

Located at lib/cli.nix:119 in <nixpkgs>.