{ 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; }; }; }