Option documentation¶
As you start creating option declarations, it is important to document them.
In addition to type
and default
, there are two other attributes available that will appear in generated documentation, description
and example
.
In options.nix
, we have a option declared, name
, and we have set the attributes for description
and example
.
{lib, ...}: {
options = {
name = lib.mkOption {
type = lib.types.str;
default = "";
description = "A name for a user.";
example = "Boaty McBoatface";
};
};
}
To generate documentation, we will use another function from nixpkgs, nixosOptionsDoc
.
In docs.nix
, we evaluate our modules with evalModules
as we have done previously.
That is passed to the nixosOptionsDoc
function as the options
attribute.
nixosOptionsDoc
produces documentation in many forms: JSON, AsciiDoc, and CommonMark.
For this lesson, we will look at CommonMark.
{
nixpkgs ?
builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/tarball/aa94fc78b0a49ed2a4a69b6f5082a1b286dd392d";
sha256 = "1gkm7r07aqiyfgr32bzjmhvgsd543m2g3m43janmb6z1hz17ks1n";
},
pkgs ? import nixpkgs {},
}: let
evalOptions = (
pkgs.lib.evalModules {
modules = [
./options.nix
];
}
);
optionsDoc = (
pkgs.nixosOptionsDoc
{
options = builtins.removeAttrs evalOptions.options ["_module"];
}
);
in
optionsDoc.optionsCommonMark
We have a build-docs.sh
script to help us build the docs.
nix build -f docs.nix
If we run the script, we will produce an output in result
that renders as follows.
name¶
A name for a user.
Type: string
Default:
""
Example:
"Boaty McBoatface"
Declared by: - /nix/store/acw2whabr474qk89dfb6mlsjlpk89n8m-source/option-documentation/options.nix