#! /usr/bin/env nix-shell #! nix-shell -I nixpkgs=. -i bash -p delta jq perl set -euo pipefail shopt -s inherit_errexit cat <<'EOF' This script attempts to automatically convert option descriptions from DocBook syntax to markdown. Naturally this process is incomplete and imperfect, so any changes generated by this script MUST be reviewed. Possible problems include: incorrectly replaced tags, badly formatted markdown, DocBook tags this script doesn't recognize remaining in the output and crashing the docs build, incorrect escaping of markdown metacharacters, incorrect unescaping of XML entities—and the list goes on. Always review the generated changes! EOF build-options-json() { nix-build --no-out-link --expr ' let sys = import ./nixos/default.nix { configuration = {}; }; in [ sys.config.system.build.manual.optionsJSON ] ' } git diff --quiet || { echo "Worktree is dirty. Please stash or commit first." exit 1 } echo "Building options.json ..." old_options=$(build-options-json) echo "Applying replacements ..." perl -pi -e ' BEGIN { undef $/; } s,([^`]*?),`$1`,smg; s,([^»]*?),«$1»,smg; s,([^`]*?),{file}`$1`,smg; s,,{option}`$1`,smg; s,([^`]*?),`$1`,smg; s,([^`]*?),{command}`$1`,smg; s,,<$1>,smg; s,(.*?),[$2]($1),smg; s,([^`]*?),`$1`,smg; s,([^*]*?),*$1*,smg; s,\s* \s*(.*?)\s*\s* \s*(.*?)\s*\s* ,{manpage}`$1($2)`,smgx; s,^( +description =),\1 lib.mdDoc,smg; ' "$@" echo "Building options.json again ..." new_options=$(build-options-json) ! cmp -s {$old_options,$new_options}/share/doc/nixos/options.json && { diff -U10 \ <(jq . <$old_options/share/doc/nixos/options.json) \ <(jq . <$new_options/share/doc/nixos/options.json) \ | delta }