nixos-config/docs/default.nix
Gabriel Arazas 3556cc0ed5
docs/manpage: init prototype
Considered broken for now since it cannot be easily built.
2024-09-04 20:10:03 +08:00

144 lines
4.1 KiB
Nix

{ pkgs ? import <nixpkgs> { overlays = [ (import ../overlays).default ]; } }:
let
inherit (pkgs) lib nixosOptionsDoc;
mkOptionsDoc = args@{ class, modules, includeModuleSystemArguments ? false, ... }:
let
modulesEval =
if class == "nixos"
then lib.evalModules {
modules = modules ++ lib.singleton {
imports = [
"${pkgs.path}/nixos/modules/misc/extra-arguments.nix"
# One of the modules requires this to be included.
"${pkgs.path}/nixos/modules/config/xdg/mime.nix"
];
_module.check = false;
_module.args.pkgs = pkgs;
fileSystems."/".device = "nodev";
};
}
else if class == "homeManager"
then
let
hmLib = import <home-manager/lib/stdlib-extended.nix> lib;
in
lib.evalModules {
modules = modules ++ lib.singleton {
_module.check = false;
_module.args.pkgs = pkgs;
lib = hmLib.hm;
};
}
else if class == "wrapperManager" then
let
wrapper-manager = import ../subprojects/wrapper-manager-fds { };
in
wrapper-manager.lib.eval {
inherit pkgs;
modules = modules ++ lib.singleton {
_module.check = false;
};
}
else
lib.evalModules {
modules = modules ++ lib.singleton {
_module.check = false;
_module.args.pkgs = pkgs;
};
};
inherit (modulesEval) options;
in
nixosOptionsDoc ({
options =
if includeModuleSystemArguments
then options
else builtins.removeAttrs options [ "_module" ];
}
// builtins.removeAttrs args [ "modules" "class" "includeModuleSystemArguments" ]);
mkManpage = { optionsJSON, asciidocHeader }:
pkgs.runCommand "wrapper-manager-reference-manpage"
{
nativeBuildInputs = with pkgs; [
nixos-render-docs
asciidoctor
];
}
''
mkdir -p $out/share/man/man5
asciidoctor --attribute is-wider-scoped --backend manpage \
${asciidocHeader} --out-file header.5
nixos-render-docs options manpage --revision ${pkgs.lib.version} \
--header ./header.5 --footer ${./manpages/footer.5} \
${optionsJSON}/share/doc/nixos/options.json \
$out/share/man/man5/wrapper-manager.nix.5
'';
in
{
nixos = rec {
optionsDoc = mkOptionsDoc {
modules = [ ../modules/nixos ../modules/nixos/_private ];
class = "nixos";
};
outputs.manpage = mkManpage {
inherit (optionsDoc) optionsJSON;
asciidocHeader = ./manpages/nixos-header.adoc;
};
};
home-manager = rec {
optionsDoc = mkOptionsDoc {
modules = [ ../modules/home-manager ../modules/home-manager/_private ];
class = "homeManager";
};
outputs.manpage = mkManpage {
inherit (optionsDoc) optionsJSON;
asciidocHeader = ./manpages/home-manager-header.adoc;
};
};
nixvim = rec {
optionsDoc = mkOptionsDoc {
modules = [ ../modules/nixvim ../modules/nixvim/_private ];
class = "nixvim";
};
outputs.manpage = mkManpage {
inherit (optionsDoc) optionsJSON;
asciidocHeader = ./manpages/nixvim-header.adoc;
};
};
wrapper-manager = rec {
optionsDoc = mkOptionsDoc {
modules = [ ../modules/wrapper-manager ../modules/wrapper-manager/_private ];
class = "wrapperManager";
};
outputs.manpage = mkManpage {
inherit (optionsDoc) optionsJSON;
asciidocHeader = ./manpages/wrapper-manager-header.adoc;
};
};
flake-parts = rec {
optionsDoc = mkOptionsDoc {
modules = [ ../modules/flake-parts ];
class = "flakeParts";
};
outputs.manpage = mkManpage {
inherit (optionsDoc) optionsJSON;
asciidocHeader = ./manpages/flake-parts-header.adoc;
};
};
website = pkgs.callPackage ./website/package.nix { };
}