diff --git a/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua b/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
index 1c745393a04b..5c1b034d0792 100644
--- a/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
+++ b/doc/build-aux/pandoc-filters/docbook-writer/rst-roles.lua
@@ -31,6 +31,10 @@ function Code(elem)
tag = 'command'
elseif elem.attributes['role'] == 'option' then
tag = 'option'
+ elseif elem.attributes['role'] == 'var' then
+ tag = 'varname'
+ elseif elem.attributes['role'] == 'env' then
+ tag = 'envar'
end
if tag ~= nil then
diff --git a/doc/contributing/contributing-to-documentation.chapter.md b/doc/contributing/contributing-to-documentation.chapter.md
index db16f13b474b..81482523cd0e 100644
--- a/doc/contributing/contributing-to-documentation.chapter.md
+++ b/doc/contributing/contributing-to-documentation.chapter.md
@@ -58,8 +58,10 @@ Additional syntax extensions are available, though not all extensions can be use
A few markups for other kinds of literals are also available:
- `` {command}`rm -rfi` `` turns into {command}`rm -rfi`
- - `` {option}`networking.useDHCP` `` turns into {option}`networking.useDHCP`
+ - `` {env}`XDG_DATA_DIRS` `` turns into {env}`XDG_DATA_DIRS`
- `` {file}`/etc/passwd` `` turns into {file}`/etc/passwd`
+ - `` {option}`networking.useDHCP` `` turns into {option}`networking.useDHCP`
+ - `` {var}`/etc/passwd` `` turns into {var}`/etc/passwd`
These literal kinds are used mostly in NixOS option documentation.
diff --git a/nixos/lib/make-options-doc/mergeJSON.py b/nixos/lib/make-options-doc/mergeJSON.py
index c7577e41e2d2..1a1af11337e7 100644
--- a/nixos/lib/make-options-doc/mergeJSON.py
+++ b/nixos/lib/make-options-doc/mergeJSON.py
@@ -114,6 +114,10 @@ class Renderer(mistune.renderers.BaseRenderer):
return f""
def file(self, text):
return f"{escape(text)}"
+ def var(self, text):
+ return f"{escape(text)}"
+ def env(self, text):
+ return f"{escape(text)}"
def manpage(self, page, section):
title = f"{escape(page)}"
vol = f"{escape(section)}"
@@ -136,6 +140,20 @@ def p_file(md):
md.inline.register_rule('file', FILE_PATTERN, parse)
md.inline.rules.append('file')
+def p_var(md):
+ VAR_PATTERN = r'\{var\}`(.*?)`'
+ def parse(self, m, state):
+ return ('var', m.group(1))
+ md.inline.register_rule('var', VAR_PATTERN, parse)
+ md.inline.rules.append('var')
+
+def p_env(md):
+ ENV_PATTERN = r'\{env\}`(.*?)`'
+ def parse(self, m, state):
+ return ('env', m.group(1))
+ md.inline.register_rule('env', ENV_PATTERN, parse)
+ md.inline.rules.append('env')
+
def p_option(md):
OPTION_PATTERN = r'\{option\}`(.*?)`'
def parse(self, m, state):
@@ -162,7 +180,7 @@ def p_admonition(md):
md.block.rules.append('admonition')
md = mistune.create_markdown(renderer=Renderer(), plugins=[
- p_command, p_file, p_option, p_manpage, p_admonition
+ p_command, p_file, p_var, p_env, p_option, p_manpage, p_admonition
])
# converts in-place!