Files
nix-flake/modules/docs.nix
T
greyweather 81e85743de
Build docs with nix and Material for mkDocs / build-docs (push) Successful in 1m33s
move options to separate modules, set up mkDocs generation
2026-09-01 03:08:10 +01:00

79 lines
2.1 KiB
Nix

{ inputs, self, ... }: let
mkDocsDerivation = { pkgs, doBuild ? true }: let
inherit (pkgs) lib stdenv mkdocs python314Packages;
mkOptionsDocFromModule = commandName: module: let
eval = lib.evalModules {
modules = [ module ];
args = { inherit pkgs; };
};
optionsDoc = pkgs.nixosOptionsDoc {
inherit (eval) options;
};
in pkgs.runCommand commandName {} ''
cat ${optionsDoc.optionsCommonMark} >> $out
'';
indexMd = let
rawText = ''
## Hello world
Welcome to the site!
'';
in pkgs.runCommand "index.md" {} ''
echo "${rawText}" >> $out
'';
nixosOptionsMd = mkOptionsDocFromModule "nixos-options.md" self.nixosModules.options;
homeOptionsMd = mkOptionsDocFromModule "home-options.md" self.homeModules.options;
mkDocsConfig = ''
site_name: greyweather's nix flake options
nav:
- Home: 'index.md'
- Options:
- NixOS: 'nixos-options.md'
- Home Manager: 'home-options.md'
theme: material
'';
mkDocsYml = pkgs.runCommand "mkdocs.yml" {} ''
echo "${mkDocsConfig}" >> $out
'';
in stdenv.mkDerivation {
src = self;
name = if doBuild then "docs" else "docs-md";
buildInput = [
mkDocsYml
indexMd
nixosOptionsMd
homeOptionsMd
];
nativeBuildInputs = [
mkdocs
python314Packages.mkdocs-material
python314Packages.pygments
];
buildPhase = ''
mkdir docs-build
cd docs-build
ln -s ${mkDocsYml} "./mkdocs.yml"
mkdir docs
ln -s ${indexMd} "./docs/index.md"
ln -s ${nixosOptionsMd} "./docs/nixos-options.md"
ln -s ${homeOptionsMd} "./docs/home-options.md"
# generate the site
${if doBuild then "mkdocs build" else ""}
'';
installPhase = if doBuild then ''
mv site $out
'' else ''
cp -r . $out
'';
};
in {
perSystem = { pkgs, ... }: {
packages.docs = mkDocsDerivation { inherit pkgs; };
packages.docs-md = mkDocsDerivation { inherit pkgs; doBuild = false; };
};
}