query
On this page

showOption

lib.options.showOption

Docs pulled from | This Revision | about 3 hours ago


Convert an option, described as a list of the option parts to a human-readable version.

Inputs

parts

1. Function argument

Examples

showOption usage example

(showOption ["foo" "bar" "baz"]) == "foo.bar.baz"
  (showOption ["foo" "bar.baz" "tux"]) == "foo.\"bar.baz\".tux"
  (showOption ["windowManager" "2bwm" "enable"]) == "windowManager.\"2bwm\".enable"

Placeholders will not be quoted as they are not actual values:
  (showOption ["foo" "*" "bar"]) == "foo.*.bar"
  (showOption ["foo" "<name>" "bar"]) == "foo.<name>.bar"
  (showOption ["foo" "<myPlaceholder>" "bar"]) == "foo.<myPlaceholder>.bar"

Noogle detected

Aliases

Implementation

The following is the current implementation of this function.

showOption = parts: let
    # If the part is a named placeholder of the form "<...>" don't escape it.
    # It may cause misleading escaping if somebody uses literally "<...>" in their option names.
    # This is the trade-off to allow for placeholders in option names.
    isNamedPlaceholder = builtins.match "<(.*)>";
    escapeOptionPart = part:
      if part == "*" || isNamedPlaceholder part != null
        then part
        else lib.strings.escapeNixIdentifier part;
    in (concatStringsSep ".") (map escapeOptionPart parts);