diff --git a/maintainers/scripts/mdize-module.sh b/maintainers/scripts/mdize-module.sh
new file mode 100755
index 00000000000..e2d2e5467aa
--- /dev/null
+++ b/maintainers/scripts/mdize-module.sh
@@ -0,0 +1,83 @@
+#! /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!
+
+Some known limitations:
+ - Does not transform literalDocBook items
+ - Replacements can occur in non-option code, such as string literals
+
+
+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
+}