This allows modules that declare their class to be checked. While that's not most user modules, frameworks can take advantage of this by setting declaring the module class for their users. That way, the mistake of importing a module into the wrong hierarchy can be reported more clearly in some cases.
88 lines
3.1 KiB
Nix
88 lines
3.1 KiB
Nix
{ pkgs ? (import ../.. {}), nixpkgs ? { }}:
|
|
let
|
|
inherit (pkgs) lib;
|
|
inherit (lib) hasPrefix removePrefix;
|
|
|
|
libsets = [
|
|
{ name = "asserts"; description = "assertion functions"; }
|
|
{ name = "attrsets"; description = "attribute set functions"; }
|
|
{ name = "strings"; description = "string manipulation functions"; }
|
|
{ name = "versions"; description = "version string functions"; }
|
|
{ name = "trivial"; description = "miscellaneous functions"; }
|
|
{ name = "lists"; description = "list manipulation functions"; }
|
|
{ name = "debug"; description = "debugging functions"; }
|
|
{ name = "options"; description = "NixOS / nixpkgs option handling"; }
|
|
{ name = "path"; description = "path functions"; }
|
|
{ name = "filesystem"; description = "filesystem functions"; }
|
|
{ name = "sources"; description = "source filtering functions"; }
|
|
{ name = "cli"; description = "command-line serialization functions"; }
|
|
];
|
|
|
|
locationsXml = import ./lib-function-locations.nix { inherit pkgs nixpkgs libsets; };
|
|
functionDocs = import ./lib-function-docs.nix { inherit locationsXml pkgs libsets; };
|
|
version = pkgs.lib.version;
|
|
|
|
epub-xsl = pkgs.writeText "epub.xsl" ''
|
|
<?xml version='1.0'?>
|
|
<xsl:stylesheet
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
version="1.0">
|
|
<xsl:import href="${pkgs.docbook_xsl_ns}/xml/xsl/docbook/epub/docbook.xsl" />
|
|
<xsl:import href="${./parameters.xml}"/>
|
|
</xsl:stylesheet>
|
|
'';
|
|
|
|
xhtml-xsl = pkgs.writeText "xhtml.xsl" ''
|
|
<?xml version='1.0'?>
|
|
<xsl:stylesheet
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
version="1.0">
|
|
<xsl:import href="${pkgs.docbook_xsl_ns}/xml/xsl/docbook/xhtml/docbook.xsl" />
|
|
<xsl:import href="${./parameters.xml}"/>
|
|
</xsl:stylesheet>
|
|
'';
|
|
|
|
# NB: This file describes the Nixpkgs manual, which happens to use module
|
|
# docs infra originally developed for NixOS.
|
|
optionsDoc = pkgs.nixosOptionsDoc {
|
|
inherit (pkgs.lib.evalModules {
|
|
modules = [ ../../pkgs/top-level/config.nix ];
|
|
specialArgs.class = "nixpkgsConfig";
|
|
}) options;
|
|
documentType = "none";
|
|
transformOptions = opt:
|
|
opt // {
|
|
declarations =
|
|
map
|
|
(decl:
|
|
if hasPrefix (toString ../..) (toString decl)
|
|
then
|
|
let subpath = removePrefix "/" (removePrefix (toString ../..) (toString decl));
|
|
in { url = "https://github.com/NixOS/nixpkgs/blob/master/${subpath}"; name = subpath; }
|
|
else decl)
|
|
opt.declarations;
|
|
};
|
|
};
|
|
|
|
in pkgs.runCommand "doc-support" {}
|
|
''
|
|
mkdir result
|
|
(
|
|
cd result
|
|
ln -s ${locationsXml} ./function-locations.xml
|
|
ln -s ${functionDocs} ./function-docs
|
|
ln -s ${optionsDoc.optionsDocBook} ./config-options.docbook.xml
|
|
|
|
ln -s ${pkgs.docbook5}/xml/rng/docbook/docbook.rng ./docbook.rng
|
|
ln -s ${pkgs.docbook_xsl_ns}/xml/xsl ./xsl
|
|
ln -s ${epub-xsl} ./epub.xsl
|
|
ln -s ${xhtml-xsl} ./xhtml.xsl
|
|
|
|
ln -s ${./xmlformat.conf} ./xmlformat.conf
|
|
ln -s ${pkgs.documentation-highlighter} ./highlightjs
|
|
|
|
echo -n "${version}" > ./version
|
|
)
|
|
mv result $out
|
|
''
|