42 lines
892 B
Nix
42 lines
892 B
Nix
|
/*
|
||
|
A basic documentation generating module.
|
||
|
Declares and defines a `docs` option, suitable for making assertions about
|
||
|
the extraction "phase" of documentation generation.
|
||
|
*/
|
||
|
{ lib, options, ... }:
|
||
|
|
||
|
let
|
||
|
inherit (lib)
|
||
|
head
|
||
|
length
|
||
|
mkOption
|
||
|
types
|
||
|
;
|
||
|
|
||
|
traceListSeq = l: v: lib.foldl' (a: b: lib.traceSeq b a) v l;
|
||
|
|
||
|
in
|
||
|
|
||
|
{
|
||
|
options.docs = mkOption {
|
||
|
type = types.lazyAttrsOf types.raw;
|
||
|
description = ''
|
||
|
All options to be rendered, without any visibility filtering applied.
|
||
|
'';
|
||
|
};
|
||
|
config.docs =
|
||
|
lib.zipAttrsWith
|
||
|
(name: values:
|
||
|
if length values > 1 then
|
||
|
traceListSeq values
|
||
|
abort "Multiple options with the same name: ${name}"
|
||
|
else
|
||
|
assert length values == 1;
|
||
|
head values
|
||
|
)
|
||
|
(map
|
||
|
(opt: { ${opt.name} = opt; })
|
||
|
(lib.optionAttrSetToDocList options)
|
||
|
);
|
||
|
}
|