关于 prelude-docs
这是一项用于在采用 Prelude Nix flake 模块的仓库中配置 Markdown 文档的 Skill,涵盖页面导航、手写内容、选项文档生成和构建验证。
主要功能
- 01配置文档页面树
- 02将 README 设为入口页
- 03按 H2 标题拆分 Markdown
- 04生成 NixOS 选项文档
- 05构建并验证文档包
适用场景
- 01为 Prelude 仓库添加指南
- 02无需复制即可展示依赖文档
- 03根据模块选项生成参考页
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ darkmatter/ prelude --skill prelude-docs安装后在 Claude Code 中输入/prelude-docs确认已加载。
详细介绍
消费者仓库中的 Prelude 文档
将用户的参数视为任务描述(例如“在 Guides 组下添加一个 recipes 页面”),而不是 shell 命令。管理所需的 Markdown 源文件和现有的 prelude.docs.* 配置;保留无关设置。
前提:仓库导入了 prelude.flakeModules.default(参见 prelude-install 技能)。文档查看器没有启用标志——当 prelude.docs.pages 非空时会自动启用,同时安装 docs 命令、其 x docs 分派入口和 d 快捷键。
编写页面
prelude.docs.pages 是按声明顺序排列的导航树。每个节点只能是叶节点、组或生成节点之一:
prelude.docs.pages = [
{ text = ./docs/getting-started.md; } # leaf
{ title = "Guides"; # group: nests, renders no body
children = [ { text = ./docs/guides/a.md; } ]; }
];
- 叶节点
{ text = <markdown path>; }——文件中的第一个 H1 会用作侧边栏标签;可选的title字段可以覆盖它。 - 组
{ title; children; }——仅用于侧边栏嵌套。手动编写的组不应设置text(该字段是 mdSplit 的来源信息,不是正文)。 text接受任何 store 路径,因此外部依赖文档无需 vendoring:{ text = inputs.some-dep + "/docs/api.md"; }会按 flake 固定的版本呈现上游页面。
将 README 用作首页
prelude.docs.rootReadme = ./README.md;
当叶节点的 text 等于 rootReadme 时(路径必须完全匹配,而非仅文件名相同),查看器会将其设为项目主页:显示 prelude.project 的 FIGlet 字标和 HTML 简介,正文则保持原样。若还要让 README 的 H2 章节在侧边栏中拥有各自的条目:
prelude.docs.pages = [
(inputs.prelude.lib.mdSplit ./README.md)
{ text = ./docs/getting-started.md; }
];
prelude.lib.mdSplit(flake 的 lib 输出)会在识别代码围栏的 H2 边界处分割一个 Markdown 文件,生成 { title; text; children; }:先是前言,然后每个 H2 对应一个叶节点。前言叶节点会重命名为项目名称;若其来源信息与 rootReadme 匹配,则会显示 README 主页样式。它接受路径、路径字符串或原始 Markdown。
生成选项文档
仅当项目定义了自己的模块选项时才使用。切勿手动维护选项表——应从求值后的选项树生成:
prelude.docs.nixosOptions = {
inherit (eval) options; # lib.evalModules side-eval, not the live flake-parts
transformOptions = o: o // { declarations = []; }; # any nixosOptionsDoc arg
};
prelude.docs.pages = [ /* … */ { generate = "nixosOptions"; title = "Options"; } ];
- 使用
lib.evalModules { modules = [ … ]; }单独求值选项——闭包捕获实时 flake-parts 选项树可能导致循环依赖和冗余内容。 split = "allLeaves"(默认):嵌套侧边栏,每个末级选项对应一个叶节点。split = "shallow":生成一个完整的pkgs.nixosOptionsDoc页面。- 切勿将
nixosOptions值序列化为 JSON;它会直接传入 nixosOptionsDoc,只有 Markdown store 路径会进入打包内容。
手动编写与生成: 手动编写的叶节点和组是由仓库维护的说明文字;generate 节点则在构建时根据选项定义生成,绝不手动编辑。上游仓库中检入的 docs/reference/options.md 是维护者使用的产物。不要假设下游有 x sync-docs;若存在自己的生成工作流,请遵循该工作流。
验证
仅暂存所需文件,使新引用的文件在 Git 支持的 flake 求值中可见;无需提交。合并上面的示例时,请保留现有文档页面。
在仓库根目录中执行,不要进入开发环境:
nix build .#prelude-docs # evaluates the pages tree and builds the bundle
./result/bin/docs 1 # prints leaf 1 non-interactively
在开发环境(nix develop)中:
docs或x docs——TUI:按数字 1–9 跳转到顶层页面,Tab/Shift-Tab 切换焦点,j/k 滚动,q 退出。docs <page>会打印一个窗口;页面索引从 1 开始,按深度优先顺序排列叶节点(组不算页面)。docs next/docs prev可翻页。通过管道输出时会去除 ANSI 转义码,因此可用于脚本和 CI 日志。
参考(固定到 flake.lock 中的 github:darkmatter/prelude 版本):
https://github.com/darkmatter/prelude — docs/your-own-repo.md(消费者接入说明)、docs/configuration.md,以及 prelude.docs.* 下的 docs/reference/options.md。要编辑目录命令,请参阅 prelude-just 技能;x --list 会显示已安装的命令。