forked from auxolotl/docs
add nixos options markdown generation
This commit is contained in:
parent
2aa2397775
commit
0b661ae865
|
@ -53,6 +53,7 @@ markdown_extensions:
|
||||||
emoji_index: !!python/name:material.extensions.emoji.twemoji
|
emoji_index: !!python/name:material.extensions.emoji.twemoji
|
||||||
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
||||||
- pymdownx.highlight
|
- pymdownx.highlight
|
||||||
|
- pymdownx.inlinehilite
|
||||||
- pymdownx.snippets
|
- pymdownx.snippets
|
||||||
- pymdownx.superfences
|
- pymdownx.superfences
|
||||||
- pymdownx.tasklist:
|
- pymdownx.tasklist:
|
||||||
|
|
|
@ -19,6 +19,7 @@ stdenvNoCC.mkDerivation {
|
||||||
cp -r ${pkgs.amg.nixpkgs-manual} $out/Nixpkgs/
|
cp -r ${pkgs.amg.nixpkgs-manual} $out/Nixpkgs/
|
||||||
cp -r ${pkgs.amg.aux-wiki} $out/Aux
|
cp -r ${pkgs.amg.aux-wiki} $out/Aux
|
||||||
cp -r ${pkgs.amg.lix-docs} $out/Lix
|
cp -r ${pkgs.amg.lix-docs} $out/Lix
|
||||||
|
cp -r ${pkgs.amg.nixos-options} $out/NixOS
|
||||||
chmod -R u+w $out/Lix
|
chmod -R u+w $out/Lix
|
||||||
pushd $out/Lix
|
pushd $out/Lix
|
||||||
find . -type f -exec perl -pi -e 's/\<div class="warning"\>\n\n/\?\?\? bug\n\n\ \ /g' {} \;
|
find . -type f -exec perl -pi -e 's/\<div class="warning"\>\n\n/\?\?\? bug\n\n\ \ /g' {} \;
|
||||||
|
|
|
@ -41,15 +41,28 @@ let
|
||||||
|
|
||||||
options =
|
options =
|
||||||
(buildFromConfig ({ ... }: { }) (config: config.system.build.manual.optionsJSON)).x86_64-linux;
|
(buildFromConfig ({ ... }: { }) (config: config.system.build.manual.optionsJSON)).x86_64-linux;
|
||||||
|
|
||||||
|
customPython = pkgs.python312.withPackages (ps: [
|
||||||
|
ps.jq
|
||||||
|
ps.rich
|
||||||
|
]);
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
pname = "nixos-options";
|
pname = "nixos-options";
|
||||||
inherit version;
|
inherit version;
|
||||||
|
|
||||||
src = inputs.nixpkgs;
|
src = ./.;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ customPython ];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
${customPython.interpreter} ./gen-options-md.py ${options}/share/doc/nixos/options.json
|
||||||
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir $out
|
mkdir $out
|
||||||
cp -r ${options} $out/options
|
cp -r ./nixos-docs/* $out/
|
||||||
|
|
||||||
|
rm -rf $out/_module.md
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
109
packages/nixos-options/gen-options-md.py
Executable file
109
packages/nixos-options/gen-options-md.py
Executable file
|
@ -0,0 +1,109 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from rich.progress import track
|
||||||
|
import jq
|
||||||
|
|
||||||
|
# Set up logging
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
TWO_LEVEL_PREFIXES = [
|
||||||
|
"boot",
|
||||||
|
"networking",
|
||||||
|
"programs",
|
||||||
|
"security",
|
||||||
|
"services",
|
||||||
|
"systemd",
|
||||||
|
"users",
|
||||||
|
"virtualisation",
|
||||||
|
]
|
||||||
|
|
||||||
|
REMOVE_PREFIXES = [
|
||||||
|
"_module"
|
||||||
|
]
|
||||||
|
|
||||||
|
OUT = "./nixos-docs"
|
||||||
|
|
||||||
|
# Load file specified on command line
|
||||||
|
j = json.load(open(sys.argv[1], 'r'))
|
||||||
|
logger.info("JSON Loaded")
|
||||||
|
|
||||||
|
# Make output directory
|
||||||
|
logger.info("Creating output directory")
|
||||||
|
if not os.path.exists(OUT):
|
||||||
|
os.makedirs(OUT)
|
||||||
|
else:
|
||||||
|
shutil.rmtree(OUT)
|
||||||
|
os.makedirs(OUT)
|
||||||
|
|
||||||
|
|
||||||
|
ALL_PREFIXES = jq.compile("map(.loc[0]) | unique | .[]").input_value(j)
|
||||||
|
|
||||||
|
for p in track(ALL_PREFIXES.all(), description="Creating filetree..."):
|
||||||
|
if p in TWO_LEVEL_PREFIXES:
|
||||||
|
os.makedirs(f"{OUT}/{p}")
|
||||||
|
elif p in REMOVE_PREFIXES:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
f = open(f"{OUT}/{p}.md", "w")
|
||||||
|
f.write(f"{p.title()}\n\n")
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
for k, v in track(j.items(), description="Writing..."):
|
||||||
|
opts = v['loc']
|
||||||
|
|
||||||
|
if (opts[0] in REMOVE_PREFIXES):
|
||||||
|
pass
|
||||||
|
|
||||||
|
desc: str = v["description"]
|
||||||
|
|
||||||
|
default: str | None = None
|
||||||
|
|
||||||
|
example: str | None = None
|
||||||
|
|
||||||
|
optType: str = v["type"]
|
||||||
|
|
||||||
|
if 'default' not in v:
|
||||||
|
pass
|
||||||
|
elif v['default']['_type'] == "literalExpression":
|
||||||
|
default = f"`#!nix {v['default']['text']}`"
|
||||||
|
elif v['default']['_type'] == "literalMD":
|
||||||
|
default = v['default']['text']
|
||||||
|
|
||||||
|
if "example" not in v:
|
||||||
|
pass
|
||||||
|
elif v['example']['_type'] == "literalExpression":
|
||||||
|
example = f"`#!nix {v['example']['text']}`"
|
||||||
|
elif v['example']['_type'] == "literalMD":
|
||||||
|
example = v['example']['text']
|
||||||
|
|
||||||
|
decl: str = f"https://github.com/nixos/nixpkgs/blob/master/{v["declarations"][0]}"
|
||||||
|
|
||||||
|
if (opts[0] not in TWO_LEVEL_PREFIXES):
|
||||||
|
f = open(f"{OUT}/{opts[0]}.md", "a")
|
||||||
|
elif(opts[0] in TWO_LEVEL_PREFIXES):
|
||||||
|
if len(opts) == 2:
|
||||||
|
f = open(f"{OUT}/{opts[0]}/index.md", "a")
|
||||||
|
elif len(opts) > 2:
|
||||||
|
f = open(f"{OUT}/{opts[0]}/{opts[1]}.md", "a")
|
||||||
|
|
||||||
|
heading: str = "-".join(opts)
|
||||||
|
|
||||||
|
f.write(f"## `{k}` {{{heading}}}\n\n")
|
||||||
|
f.write(f"{desc}\n")
|
||||||
|
f.write(f"**Type:** `{optType}`\n\n")
|
||||||
|
if default:
|
||||||
|
f.write(f"### Default {{{heading}-default}}\n")
|
||||||
|
f.write(default)
|
||||||
|
f.write("\n\n")
|
||||||
|
if example:
|
||||||
|
f.write(f"### Example {{{heading}-example}}\n")
|
||||||
|
f.write(example)
|
||||||
|
f.write("\n\n")
|
||||||
|
f.write(f"**Declared by:** <{decl}>\n\n")
|
||||||
|
f.close()
|
Loading…
Reference in a new issue