maomaowm/.github/scripts/generate-nix-options-docs.py
Ruixi-rebirth d7c5b603eb refactor(docs): switch to nixos-render-docs for nix options generation
- Use nixos-render-docs commonmark as the rendering engine
- Add GitHub source links (Declared by) for each option
- Fix installation.md links pointing to /docs/nix-module -> /docs/nix-options
2026-05-13 11:06:59 +08:00

48 lines
1.6 KiB
Python
Executable file

#!/usr/bin/env python3
# Post-processes nixos-render-docs commonmark output into a single docs page.
# Input: two pre-rendered .md files (NixOS and HM), produced by nixos-render-docs.
# Steps: strip internal _module.args section, promote ## headings to ###.
import re
import sys
HEADER = (
"---\n"
"title: Nix Module Options\n"
"description: NixOS and Home Manager configuration options for mangowm.\n"
"---\n\n"
"> **Note:** This document is automatically generated from the Nix module source code.\n\n"
)
SECTIONS = [
("NixOS", "**System-level options via `programs.mango`.**"),
("Home Manager", "**Configure mangowm declaratively via `wayland.windowManager.mango`.**"),
]
def process(md):
# Remove internal _module.args option injected by the module system
md = re.sub(r'## _module\\\.args.*?(?=\n## |\Z)', '', md, flags=re.DOTALL)
# Promote option headings (##) to subheadings (###) under the section (##)
md = re.sub(r'^## ', '### ', md, flags=re.MULTILINE)
return md.strip()
def main():
if len(sys.argv) != 4:
sys.exit("Usage: generate-nix-options-docs.py <nixos.md> <hm.md> <output.md>")
nixos_md, hm_md, output_md = sys.argv[1:4]
with open(output_md, 'w', encoding='utf-8') as out:
out.write(HEADER)
for path, (title, subtitle) in zip([nixos_md, hm_md], SECTIONS):
with open(path, 'r', encoding='utf-8') as f:
md = f.read()
out.write(f"## {title}\n\n{subtitle}\n\n")
out.write(process(md))
out.write('\n\n')
print(f"Written {title} section.")
if __name__ == "__main__":
main()