diff --git a/nixos/doc/manual/configuration/config-syntax.xml b/nixos/doc/manual/configuration/config-syntax.xml
index 430ecb4d7918..d1351ff934e5 100644
--- a/nixos/doc/manual/configuration/config-syntax.xml
+++ b/nixos/doc/manual/configuration/config-syntax.xml
@@ -21,4 +21,5 @@ xlink:href="https://nixos.org/nix/manual/#chap-writing-nix-expressions">Nix
+
diff --git a/nixos/doc/manual/configuration/summary.section.md b/nixos/doc/manual/configuration/summary.section.md
new file mode 100644
index 000000000000..8abbbe257fd9
--- /dev/null
+++ b/nixos/doc/manual/configuration/summary.section.md
@@ -0,0 +1,46 @@
+# Syntax Summary {#sec-nix-syntax-summary}
+
+Below is a summary of the most important syntactic constructs in the Nix
+expression language. It's not complete. In particular, there are many
+other built-in functions. See the [Nix
+manual](https://nixos.org/nix/manual/#chap-writing-nix-expressions) for
+the rest.
+
+| Example | Description |
+|-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------|
+| *Basic values* | |
+| `"Hello world"` | A string |
+| `"${pkgs.bash}/bin/sh"` | A string containing an expression (expands to `"/nix/store/hash-bash-version/bin/sh"`) |
+| `true`, `false` | Booleans |
+| `123` | An integer |
+| `./foo.png` | A path (relative to the containing Nix expression) |
+| *Compound values* | |
+| `{ x = 1; y = 2; }` | A set with attributes named `x` and `y` |
+| `{ foo.bar = 1; }` | A nested set, equivalent to `{ foo = { bar = 1; }; }` |
+| `rec { x = "foo"; y = x + "bar"; }` | A recursive set, equivalent to `{ x = "foo"; y = "foobar"; }` |
+| `[ "foo" "bar" ]` | A list with two elements |
+| *Operators* | |
+| `"foo" + "bar"` | String concatenation |
+| `1 + 2` | Integer addition |
+| `"foo" == "f" + "oo"` | Equality test (evaluates to `true`) |
+| `"foo" != "bar"` | Inequality test (evaluates to `true`) |
+| `!true` | Boolean negation |
+| `{ x = 1; y = 2; }.x` | Attribute selection (evaluates to `1`) |
+| `{ x = 1; y = 2; }.z or 3` | Attribute selection with default (evaluates to `3`) |
+| `{ x = 1; y = 2; } // { z = 3; }` | Merge two sets (attributes in the right-hand set taking precedence) |
+| *Control structures* | |
+| `if 1 + 1 == 2 then "yes!" else "no!"` | Conditional expression |
+| `assert 1 + 1 == 2; "yes!"` | Assertion check (evaluates to `"yes!"`). See [](#sec-assertions) for using assertions in modules |
+| `let x = "foo"; y = "bar"; in x + y` | Variable definition |
+| `with pkgs.lib; head [ 1 2 3 ]` | Add all attributes from the given set to the scope (evaluates to `1`) |
+| *Functions (lambdas)* | |
+| `x: x + 1` | A function that expects an integer and returns it increased by 1 |
+| `(x: x + 1) 100` | A function call (evaluates to 101) |
+| `let inc = x: x + 1; in inc (inc (inc 100))` | A function bound to a variable and subsequently called by name (evaluates to 103) |
+| `{ x, y }: x + y` | A function that expects a set with required attributes `x` and `y` and concatenates them |
+| `{ x, y ? "bar" }: x + y` | A function that expects a set with required attribute `x` and optional `y`, using `"bar"` as default value for `y` |
+| `{ x, y, ... }: x + y` | A function that expects a set with required attributes `x` and `y` and ignores any other attributes |
+| `{ x, y } @ args: x + y` | A function that expects a set with required attributes `x` and `y`, and binds the whole set to `args` |
+| *Built-in functions* | |
+| `import ./foo.nix` | Load and return Nix expression in given file |
+| `map (x: x + x) [ 1 2 3 ]` | Apply a function to every element of a list (evaluates to `[ 2 4 6 ]`) |
diff --git a/nixos/doc/manual/configuration/summary.xml b/nixos/doc/manual/configuration/summary.xml
deleted file mode 100644
index 289face16de9..000000000000
--- a/nixos/doc/manual/configuration/summary.xml
+++ /dev/null
@@ -1,227 +0,0 @@
-
- Syntax Summary
-
-
- Below is a summary of the most important syntactic constructs in the Nix
- expression language. It’s not complete. In particular, there are many other
- built-in functions. See the
- Nix
- manual for the rest.
-
-
-
-
-
-
-
-
- Example
- Description
-
-
-
-
- Basic values
-
-
-
- "Hello world"
-
- A string
-
-
- "${pkgs.bash}/bin/sh"
-
- A string containing an expression (expands to "/nix/store/hash-bash-version/bin/sh")
-
-
- true, false
-
- Booleans
-
-
- 123
-
- An integer
-
-
- ./foo.png
-
- A path (relative to the containing Nix expression)
-
-
- Compound values
-
-
-
- { x = 1; y = 2; }
-
- A set with attributes named x and y
-
-
-
- { foo.bar = 1; }
-
- A nested set, equivalent to { foo = { bar = 1; }; }
-
-
-
- rec { x = "foo"; y = x + "bar"; }
-
- A recursive set, equivalent to { x = "foo"; y = "foobar"; }
-
-
-
- [ "foo" "bar" ]
-
- A list with two elements
-
-
- Operators
-
-
-
- "foo" + "bar"
-
- String concatenation
-
-
- 1 + 2
-
- Integer addition
-
-
- "foo" == "f" + "oo"
-
- Equality test (evaluates to true)
-
-
- "foo" != "bar"
-
- Inequality test (evaluates to true)
-
-
- !true
-
- Boolean negation
-
-
- { x = 1; y = 2; }.x
-
- Attribute selection (evaluates to 1)
-
-
- { x = 1; y = 2; }.z or 3
-
- Attribute selection with default (evaluates to 3)
-
-
- { x = 1; y = 2; } // { z = 3; }
-
- Merge two sets (attributes in the right-hand set taking precedence)
-
-
- Control structures
-
-
-
- if 1 + 1 == 2 then "yes!" else "no!"
-
- Conditional expression
-
-
- assert 1 + 1 == 2; "yes!"
-
- Assertion check (evaluates to "yes!"). See for using assertions in modules
-
-
- let x = "foo"; y = "bar"; in x + y
-
- Variable definition
-
-
- with pkgs.lib; head [ 1 2 3 ]
-
- Add all attributes from the given set to the scope
- (evaluates to 1)
-
-
- Functions (lambdas)
-
-
-
- x: x + 1
-
- A function that expects an integer and returns it increased by 1
-
-
- (x: x + 1) 100
-
- A function call (evaluates to 101)
-
-
- let inc = x: x + 1; in inc (inc (inc 100))
-
- A function bound to a variable and subsequently called by name (evaluates to 103)
-
-
- { x, y }: x + y
-
- A function that expects a set with required attributes
- x and y and concatenates
- them
-
-
- { x, y ? "bar" }: x + y
-
- A function that expects a set with required attribute
- x and optional y, using
- "bar" as default value for
- y
-
-
-
- { x, y, ... }: x + y
-
- A function that expects a set with required attributes
- x and y and ignores any
- other attributes
-
-
- { x, y } @ args: x + y
-
- A function that expects a set with required attributes
- x and y, and binds the
- whole set to args
-
-
-
- Built-in functions
-
-
-
- import ./foo.nix
-
- Load and return Nix expression in given file
-
-
- map (x: x + x) [ 1 2 3 ]
-
- Apply a function to every element of a list (evaluates to [ 2 4 6 ])
-
-
-
-
-
-
diff --git a/nixos/doc/manual/from_md/configuration/summary.section.xml b/nixos/doc/manual/from_md/configuration/summary.section.xml
new file mode 100644
index 000000000000..96a178c4930e
--- /dev/null
+++ b/nixos/doc/manual/from_md/configuration/summary.section.xml
@@ -0,0 +1,332 @@
+
+ Syntax Summary
+
+ Below is a summary of the most important syntactic constructs in the
+ Nix expression language. It’s not complete. In particular, there are
+ many other built-in functions. See the
+ Nix
+ manual for the rest.
+
+
+
+
+
+
+
+
+ Example
+
+
+ Description
+
+
+
+
+
+
+ Basic values
+
+
+
+
+
+
+ "Hello world"
+
+
+ A string
+
+
+
+
+ "${pkgs.bash}/bin/sh"
+
+
+ A string containing an expression (expands to
+ "/nix/store/hash-bash-version/bin/sh")
+
+
+
+
+ true, false
+
+
+ Booleans
+
+
+
+
+ 123
+
+
+ An integer
+
+
+
+
+ ./foo.png
+
+
+ A path (relative to the containing Nix expression)
+
+
+
+
+ Compound values
+
+
+
+
+
+
+ { x = 1; y = 2; }
+
+
+ A set with attributes named x and
+ y
+
+
+
+
+ { foo.bar = 1; }
+
+
+ A nested set, equivalent to
+ { foo = { bar = 1; }; }
+
+
+
+
+ rec { x = "foo"; y = x + "bar"; }
+
+
+ A recursive set, equivalent to
+ { x = "foo"; y = "foobar"; }
+
+
+
+
+ [ "foo" "bar" ]
+
+
+ A list with two elements
+
+
+
+
+ Operators
+
+
+
+
+
+
+ "foo" + "bar"
+
+
+ String concatenation
+
+
+
+
+ 1 + 2
+
+
+ Integer addition
+
+
+
+
+ "foo" == "f" + "oo"
+
+
+ Equality test (evaluates to true)
+
+
+
+
+ "foo" != "bar"
+
+
+ Inequality test (evaluates to true)
+
+
+
+
+ !true
+
+
+ Boolean negation
+
+
+
+
+ { x = 1; y = 2; }.x
+
+
+ Attribute selection (evaluates to 1)
+
+
+
+
+ { x = 1; y = 2; }.z or 3
+
+
+ Attribute selection with default (evaluates to
+ 3)
+
+
+
+
+ { x = 1; y = 2; } // { z = 3; }
+
+
+ Merge two sets (attributes in the right-hand set taking
+ precedence)
+
+
+
+
+ Control structures
+
+
+
+
+
+
+ if 1 + 1 == 2 then "yes!" else "no!"
+
+
+ Conditional expression
+
+
+
+
+ assert 1 + 1 == 2; "yes!"
+
+
+ Assertion check (evaluates to
+ "yes!"). See
+ for using assertions in
+ modules
+
+
+
+
+ let x = "foo"; y = "bar"; in x + y
+
+
+ Variable definition
+
+
+
+
+ with pkgs.lib; head [ 1 2 3 ]
+
+
+ Add all attributes from the given set to the scope
+ (evaluates to 1)
+
+
+
+
+ Functions (lambdas)
+
+
+
+
+
+
+ x: x + 1
+
+
+ A function that expects an integer and returns it increased
+ by 1
+
+
+
+
+ (x: x + 1) 100
+
+
+ A function call (evaluates to 101)
+
+
+
+
+ let inc = x: x + 1; in inc (inc (inc 100))
+
+
+ A function bound to a variable and subsequently called by
+ name (evaluates to 103)
+
+
+
+
+ { x, y }: x + y
+
+
+ A function that expects a set with required attributes
+ x and y and
+ concatenates them
+
+
+
+
+ { x, y ? "bar" }: x + y
+
+
+ A function that expects a set with required attribute
+ x and optional y,
+ using "bar" as default value
+ for y
+
+
+
+
+ { x, y, ... }: x + y
+
+
+ A function that expects a set with required attributes
+ x and y and ignores
+ any other attributes
+
+
+
+
+ { x, y } @ args: x + y
+
+
+ A function that expects a set with required attributes
+ x and y, and binds the
+ whole set to args
+
+
+
+
+ Built-in functions
+
+
+
+
+
+
+ import ./foo.nix
+
+
+ Load and return Nix expression in given file
+
+
+
+
+ map (x: x + x) [ 1 2 3 ]
+
+
+ Apply a function to every element of a list (evaluates to
+ [ 2 4 6 ])
+
+
+
+
+
+