vuls: init at 0.27.0
[NixPkgs.git] / lib / tests / modules / docs.nix
blob225aa7eac1de86d427cc503396be033614826ec2
1 /*
2   A basic documentation generating module.
3   Declares and defines a `docs` option, suitable for making assertions about
4   the extraction "phase" of documentation generation.
5  */
6 { lib, options, ... }:
8 let
9   inherit (lib)
10     head
11     length
12     mkOption
13     types
14   ;
16   traceListSeq = l: v: lib.foldl' (a: b: lib.traceSeq b a) v l;
21   options.docs = mkOption {
22     type = types.lazyAttrsOf types.raw;
23     description = ''
24       All options to be rendered, without any visibility filtering applied.
25     '';
26   };
27   config.docs =
28     lib.zipAttrsWith
29       (name: values:
30         if length values > 1 then
31           traceListSeq values
32           abort "Multiple options with the same name: ${name}"
33         else
34           assert length values == 1;
35           head values
36       )
37       (map
38         (opt: { ${opt.name} = opt; })
39         (lib.optionAttrSetToDocList options)
40       );