diff --git a/nixos/doc/manual/development/option-types.section.md b/nixos/doc/manual/development/option-types.section.md
index 9b35e6630144..7864b62605c2 100644
--- a/nixos/doc/manual/development/option-types.section.md
+++ b/nixos/doc/manual/development/option-types.section.md
@@ -4,7 +4,7 @@ Option types are a way to put constraints on the values a module option
can take. Types are also responsible of how values are merged in case of
multiple value definitions.
-## Basic Types {#sec-option-types-basic}
+## Basic types {#sec-option-types-basic}
Basic types are the simplest available types in the module system. Basic
types include multiple string types that mainly differ in how definition
@@ -25,6 +25,11 @@ merging is handled.
: A top-level store path. This can be an attribute set pointing
to a store path, like a derivation or a flake input.
+`types.enum` *`l`*
+
+: One element of the list *`l`*, e.g. `types.enum [ "left" "right" ]`.
+ Multiple definitions cannot be merged.
+
`types.anything`
: A type that accepts any value and recursively merges attribute sets
@@ -95,7 +100,7 @@ merging is handled.
problems.
:::
-Integer-related types:
+### Numeric types {#sec-option-types-numeric}
`types.int`
@@ -118,6 +123,10 @@ Integer-related types:
from 0 to 2^n−1 respectively (e.g. `0`
to `255` for 8 bits).
+`types.ints.between` *`lowest highest`*
+
+: An integer between *`lowest`* and *`highest`* (both inclusive).
+
`types.ints.positive`
: A positive integer (that is > 0).
@@ -127,12 +136,39 @@ Integer-related types:
: A port number. This type is an alias to
`types.ints.u16`.
-String-related types:
+`types.float`
+
+: A floating point number.
+
+`types.number`
+
+: Either a signed integer or a floating point number. No implicit conversion
+ is done between the two types, and multiple equal definitions will only be
+ merged if they have the same type.
+
+`types.numbers.between` *`lowest highest`*
+
+: An integer or floating point number between *`lowest`* and *`highest`* (both inclusive).
+
+`types.numbers.nonnegative`
+
+: A nonnegative integer or floating point number (that is >= 0).
+
+`types.numbers.positive`
+
+: A positive integer or floating point number (that is > 0).
+
+### String types {#sec-option-types-string}
`types.str`
: A string. Multiple definitions cannot be merged.
+`types.separatedString` *`sep`*
+
+: A string. Multiple definitions are concatenated with *`sep`*, e.g.
+ `types.separatedString "|"`.
+
`types.lines`
: A string. Multiple definitions are concatenated with a new line
@@ -144,7 +180,7 @@ String-related types:
`types.envVar`
-: A string. Multiple definitions are concatenated with a collon `":"`.
+: A string. Multiple definitions are concatenated with a colon `":"`.
`types.strMatching`
@@ -152,24 +188,9 @@ String-related types:
definitions cannot be merged. The regular expression is processed
using `builtins.match`.
-## Value Types {#sec-option-types-value}
+## Submodule types {#sec-option-types-submodule}
-Value types are types that take a value parameter.
-
-`types.enum` *`l`*
-
-: One element of the list *`l`*, e.g. `types.enum [ "left" "right" ]`.
- Multiple definitions cannot be merged.
-
-`types.separatedString` *`sep`*
-
-: A string with a custom separator *`sep`*, e.g.
- `types.separatedString "|"`.
-
-`types.ints.between` *`lowest highest`*
-
-: An integer between *`lowest`* and *`highest`* (both inclusive). Useful
- for creating types like `types.port`.
+Submodules are detailed in [Submodule](#section-option-types-submodule).
`types.submodule` *`o`*
@@ -178,7 +199,6 @@ Value types are types that take a value parameter.
value. Submodules are used in composed types to create modular
options. This is equivalent to
`types.submoduleWith { modules = toList o; shorthandOnlyDefinesConfig = true; }`.
- Submodules are detailed in [Submodule](#section-option-types-submodule).
`types.submoduleWith` { *`modules`*, *`specialArgs`* ? {}, *`shorthandOnlyDefinesConfig`* ? false }
@@ -239,7 +259,7 @@ Value types are types that take a value parameter.
more convenient and discoverable than expecting the module user to
type-merge with the `attrsOf submodule` option.
-## Composed Types {#sec-option-types-composed}
+## Composed types {#sec-option-types-composed}
Composed types are types that take a type as parameter. `listOf
int` and `either int str` are examples of composed types.
@@ -496,7 +516,7 @@ Types are mainly characterized by their `check` and `merge` functions.
of strings, and `defs` the list of defined values as a list. It is
possible to override a type merge function for custom needs.
-## Custom Types {#sec-option-types-custom}
+## Custom types {#sec-option-types-custom}
Custom types can be created with the `mkOptionType` function. As type
creation includes some more complex topics such as submodule handling,
diff --git a/nixos/doc/manual/from_md/development/option-types.section.xml b/nixos/doc/manual/from_md/development/option-types.section.xml
index 929d5302ed41..e207b97a46f8 100644
--- a/nixos/doc/manual/from_md/development/option-types.section.xml
+++ b/nixos/doc/manual/from_md/development/option-types.section.xml
@@ -6,7 +6,7 @@
in case of multiple value definitions.
- Basic Types
+ Basic types
Basic types are the simplest available types in the module system.
Basic types include multiple string types that mainly differ in
@@ -49,6 +49,20 @@
+
+
+ types.enum
+ l
+
+
+
+ One element of the list
+ l, e.g.
+ types.enum [ "left" "right" ].
+ Multiple definitions cannot be merged.
+
+
+ types.anything
@@ -150,186 +164,232 @@
-
- Integer-related types:
-
-
-
-
- types.int
-
-
-
- A signed integer.
-
-
-
-
-
- types.ints.{s8, s16, s32}
-
-
-
- Signed integers with a fixed length (8, 16 or 32 bits). They
- go from −2^n/2 to 2^n/2−1 respectively (e.g.
- −128 to 127 for 8
- bits).
-
-
-
-
-
- types.ints.unsigned
-
-
-
- An unsigned integer (that is >= 0).
-
-
-
-
-
- types.ints.{u8, u16, u32}
-
-
-
- Unsigned integers with a fixed length (8, 16 or 32 bits).
- They go from 0 to 2^n−1 respectively (e.g.
- 0 to 255 for 8 bits).
-
-
-
-
-
- types.ints.positive
-
-
-
- A positive integer (that is > 0).
-
-
-
-
-
- types.port
-
-
-
- A port number. This type is an alias to
- types.ints.u16.
-
-
-
-
-
- String-related types:
-
-
-
-
- types.str
-
-
-
- A string. Multiple definitions cannot be merged.
-
-
-
-
-
- types.lines
-
-
-
- A string. Multiple definitions are concatenated with a new
- line "\n".
-
-
-
-
-
- types.commas
-
-
-
- A string. Multiple definitions are concatenated with a comma
- ",".
-
-
-
-
-
- types.envVar
-
-
-
- A string. Multiple definitions are concatenated with a
- collon ":".
-
-
-
-
-
- types.strMatching
-
-
-
- A string matching a specific regular expression. Multiple
- definitions cannot be merged. The regular expression is
- processed using builtins.match.
-
-
-
-
+
+ Numeric types
+
+
+
+ types.int
+
+
+
+ A signed integer.
+
+
+
+
+
+ types.ints.{s8, s16, s32}
+
+
+
+ Signed integers with a fixed length (8, 16 or 32 bits).
+ They go from −2^n/2 to 2^n/2−1 respectively (e.g.
+ −128 to 127 for 8
+ bits).
+
+
+
+
+
+ types.ints.unsigned
+
+
+
+ An unsigned integer (that is >= 0).
+
+
+
+
+
+ types.ints.{u8, u16, u32}
+
+
+
+ Unsigned integers with a fixed length (8, 16 or 32 bits).
+ They go from 0 to 2^n−1 respectively (e.g.
+ 0 to 255 for 8
+ bits).
+
+
+
+
+
+ types.ints.between
+ lowest highest
+
+
+
+ An integer between
+ lowest and
+ highest (both
+ inclusive).
+
+
+
+
+
+ types.ints.positive
+
+
+
+ A positive integer (that is > 0).
+
+
+
+
+
+ types.port
+
+
+
+ A port number. This type is an alias to
+ types.ints.u16.
+
+
+
+
+
+ types.float
+
+
+
+ A floating point number.
+
+
+
+
+
+ types.number
+
+
+
+ Either a signed integer or a floating point number. No
+ implicit conversion is done between the two types, and
+ multiple equal definitions will only be merged if they
+ have the same type.
+
+
+
+
+
+ types.numbers.between
+ lowest highest
+
+
+
+ An integer or floating point number between
+ lowest and
+ highest (both
+ inclusive).
+
+
+
+
+
+ types.numbers.nonnegative
+
+
+
+ A nonnegative integer or floating point number (that is
+ >= 0).
+
+
+
+
+
+ types.numbers.positive
+
+
+
+ A positive integer or floating point number (that is >
+ 0).
+
+
+
+
+
+
+ String types
+
+
+
+ types.str
+
+
+
+ A string. Multiple definitions cannot be merged.
+
+
+
+
+
+ types.separatedString
+ sep
+
+
+
+ A string. Multiple definitions are concatenated with
+ sep, e.g.
+ types.separatedString "|".
+
+
+
+
+
+ types.lines
+
+
+
+ A string. Multiple definitions are concatenated with a new
+ line "\n".
+
+
+
+
+
+ types.commas
+
+
+
+ A string. Multiple definitions are concatenated with a
+ comma ",".
+
+
+
+
+
+ types.envVar
+
+
+
+ A string. Multiple definitions are concatenated with a
+ colon ":".
+
+
+
+
+
+ types.strMatching
+
+
+
+ A string matching a specific regular expression. Multiple
+ definitions cannot be merged. The regular expression is
+ processed using builtins.match.
+
+
+
+
+
-
- Value Types
+
+ Submodule types
- Value types are types that take a value parameter.
+ Submodules are detailed in
+ Submodule.
-
-
- types.enum
- l
-
-
-
- One element of the list
- l, e.g.
- types.enum [ "left" "right" ].
- Multiple definitions cannot be merged.
-
-
-
-
-
- types.separatedString
- sep
-
-
-
- A string with a custom separator
- sep, e.g.
- types.separatedString "|".
-
-
-
-
-
- types.ints.between
- lowest highest
-
-
-
- An integer between
- lowest and
- highest (both
- inclusive). Useful for creating types like
- types.port.
-
-
- types.submodule
@@ -345,8 +405,6 @@
in composed types to create modular options. This is
equivalent to
types.submoduleWith { modules = toList o; shorthandOnlyDefinesConfig = true; }.
- Submodules are detailed in
- Submodule.
@@ -467,7 +525,7 @@
- Composed Types
+ Composed types
Composed types are types that take a type as parameter.
listOf int and
@@ -850,7 +908,7 @@ nixThings = mkOption {
- Custom Types
+ Custom types
Custom types can be created with the
mkOptionType function. As type creation