diff options
author | Silvan Mosberger <contact@infinisil.com> | 2020-09-16 20:05:07 +0200 |
---|---|---|
committer | Silvan Mosberger <contact@infinisil.com> | 2020-09-21 18:24:50 +0200 |
commit | 7c20e68f6be7b7421d8717cc8d0ad1dadef76c67 (patch) | |
tree | 557afb0ec110819bfa7150ad916ed9bee80c1406 | |
parent | 2ff7c3e2e1982fd3db4f8f7725143f0645682a54 (diff) |
lib/options: Introduce showDefs
For pretty-printing definitions, including file and values
-rw-r--r-- | lib/options.nix | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/options.nix b/lib/options.nix index 0494a597ab80..73856573a5d1 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -213,6 +213,24 @@ rec { else escaped; in (concatStringsSep ".") (map escapeOptionPart parts); showFiles = files: concatStringsSep " and " (map (f: "`${f}'") files); + + showDefs = defs: concatMapStrings (def: + let + # Pretty print the value for display, if successful + prettyEval = builtins.tryEval (lib.generators.toPretty {} def.value); + # Split it into its lines + lines = filter (v: ! isList v) (builtins.split "\n" prettyEval.value); + # Only display the first 5 lines, and indent them for better visibility + value = concatStringsSep "\n " (take 5 lines ++ optional (length lines > 5) "..."); + result = + # Don't print any value if evaluating the value strictly fails + if ! prettyEval.success then "" + # Put it on a new line if it consists of multiple + else if length lines > 1 then ":\n " + value + else ": " + value; + in "\n- In `${def.file}'${result}" + ) defs; + unknownModule = "<unknown-file>"; } |