import fs from "node:fs"; function renderOptions(options) { const blocks = Object.keys(options).map((key) => { const opt = options[key]; const name = key.split(".").slice(2).join("."); const lines = []; lines.push(`## ${name}`); lines.push(`*Description:* ${opt.description}\n`); lines.push(`*Type:* ${opt.type}\n`); if (opt.default) { lines.push(`*Default:* \`${opt.default.text}\`\n`); } if (opt.example) { lines.push(`*Example:* \`${opt.example.text}\`\n`); } return lines.join("\n"); }); return [ `# NixOS module options | |All options must be under \`services.headplane\`. | |For example: \`settings.headscale.config_path\` becomes \`services.headplane.settings.headscale.config_path\`.` .split("|") .map((s) => s.replace(/\n\s+/g, "")) .join("\n"), ] .concat(blocks) .join("\n\n"); } const filename = process.argv[2]; const file = fs.readFileSync(filename); const json = JSON.parse(file); console.log(renderOptions(json));