Skip to content

Commit

Permalink
feat: Add individual doc generation script
Browse files Browse the repository at this point in the history
fix: Fix filterOptions.nix and doc generation
  • Loading branch information
k3yss committed Aug 12, 2024
1 parent 142531d commit d1394fa
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 0 deletions.
9 changes: 9 additions & 0 deletions devenv.nix
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,15 @@
EOF
'';
};
scripts."devenv-generate-individual-docs" = {
description = "Generate individual docs of all devenv modules";
exec = ''
mkdir -p docs/reference/autogen
nix build --impure --extra-experimental-features 'flakes nix-command' --show-trace --print-out-paths '.#devenv-generate-individual-docs'
cp -r result/docs/individual-docs/* docs/reference/autogen/
chmod -R u+rwX docs/reference/autogen/
'';
};

pre-commit.hooks = {
nixpkgs-fmt.enable = true;
Expand Down
27 changes: 27 additions & 0 deletions filterOptions.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# https://gitlab.com/rycee/nur-expressions/-/blob/master/doc/default.nix
# https://github.com/molybdenumsoftware/pr-tracker/blob/main/filterOptions.nix
{ concatMapAttrs
, isOption
, ...
}: predicate: options:
let
inherit (builtins) isAttrs;

recurse = path: options:
concatMapAttrs
(
name: value:
let
newPath = path ++ [ name ];
in
if !(isAttrs value)
then { ${name} = value; }
else if !(isOption value)
then { ${name} = recurse newPath value; }
else if predicate newPath value
then { ${name} = value; }
else { }
)
options;
in
recurse [ ] options
79 changes: 79 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,93 @@
{
packages = forAllSystems (system:
let
inherit (pkgs) lib;
pkgs = nixpkgs.legacyPackages.${system};
options = mkDocOptions pkgs;
filterOptions = import ./filterOptions.nix lib;
evaluatedModules = pkgs.lib.evalModules {
modules = [
./src/modules/top-level.nix
];
specialArgs = { inherit pre-commit-hooks pkgs inputs; };
};
generate-key-options = key:
filterOptions
(path: option:
lib.any (lib.hasSuffix "${key}.nix") option.declarations)
evaluatedModules.options;

optionsDocs = optionParameter: pkgs.nixosOptionsDoc {
options = optionParameter;
variablelistId = "options";
transformOptions = options: removeAttrs options [ "declarations" ];
};
in
{
default = self.packages.${system}.devenv;
devenv = mkPackage pkgs;
devenv-docs-options = options.optionsCommonMark;
devenv-docs-options-json = options.optionsJSON;
devenv-generate-individual-docs =
let
inherit (pkgs) lib;
languageOptions = builtins.mapAttrs (key: _: generate-key-options key) evaluatedModules.config.languages;
serviceOptions = builtins.mapAttrs (key: _: generate-key-options key) evaluatedModules.config.services;
processManagersOptions = builtins.mapAttrs (key: _: generate-key-options key) evaluatedModules.config.process-managers;
processedOptions = option: builtins.mapAttrs (key: options: optionsDocs options) option;
in
pkgs.stdenv.mkDerivation {
name = "pr-tracker-nixos-modules-manual";
src = ./.;
buildPhase = ''
languageDir=./docs/individual-docs/languages
serviceDir=./docs/individual-docs/services
processManagerDir=./docs/individual-docs/process-managers
mkdir -p $out/docs/individual-docs/language
mkdir -p $out/docs/individual-docs/service
mkdir -p $out/docs/individual-docs/process-managers
${lib.concatStringsSep "\n" (lib.mapAttrsToList (key: options: ''
content=$(cat ${options.optionsCommonMark})
file=$languageDir/${key}.md
substituteInPlace $file \
--subst-var-by \
AUTOGEN_OPTIONS \
"$content"
cp $file $out/docs/individual-docs/language/${key}.md
'') ( processedOptions languageOptions ))}
${lib.concatStringsSep "\n" (lib.mapAttrsToList (key: options: ''
content=$(cat ${options.optionsCommonMark})
file=$serviceDir/${key}.md
substituteInPlace $file \
--subst-var-by \
AUTOGEN_OPTIONS \
"$content"
cp $file $out/docs/individual-docs/service/${key}.md
'') ( processedOptions serviceOptions ))}
${lib.concatStringsSep "\n" (lib.mapAttrsToList (key: options: ''
content=$(cat ${options.optionsCommonMark})
file=$processManagerDir/${key}.md
substituteInPlace $file \
--subst-var-by \
AUTOGEN_OPTIONS \
"$content"
cp $file $out/docs/individual-docs/process-managers/${key}.md
'') ( processedOptions processManagersOptions))}
'';
};
});

modules = ./src/modules;
Expand Down

0 comments on commit d1394fa

Please sign in to comment.