Home Explore Blog Models CI



nixpkgs

3rd chunk of `nixos/doc/manual/contributing-to-this-manual.chapter.md`
26c6e6e6967a21055be09ed967008ca3d42d795e18a0f0de0000000100000c56
## Contributing to `nixos-*` tools' manpages {#sec-contributing-nixos-tools}

The manual pages for the tools available in the installation image can be found in Nixpkgs by running (e.g for `nixos-rebuild`):

```ShellSession
$ git ls | grep nixos-rebuild.8
```

Man pages are written in [`mdoc(7)` format](https://mandoc.bsd.lv/man/mdoc.7.html) and should be portable between mandoc and groff for rendering (except for minor differences, notably different spacing rules.)

For a preview, run `man --local-file path/to/file.8`.

Being written in `mdoc`, these manpages use semantic markup. This following subsections provides a guideline on where to apply which semantic elements.

### Command lines and arguments {#ssec-contributing-nixos-tools-cli-and-args}

In any manpage, commands, flags and arguments to the *current* executable should be marked according to their semantics. Commands, flags and arguments passed to *other* executables should not be marked like this and should instead be considered as code examples and marked with `Ql`.

- Use `Fl` to mark flag arguments, `Ar` for their arguments.
- Repeating arguments should be marked by adding an ellipsis (spelled with periods, `...`).
- Use `Cm` to mark literal string arguments, e.g. the `boot` command argument passed to `nixos-rebuild`.
- Optional flags or arguments should be marked with `Op`. This includes optional repeating arguments.
- Required flags or arguments should not be marked.
- Mutually exclusive groups of arguments should be enclosed in curly brackets, preferably created with `Bro`/`Brc` blocks.

When an argument is used in an example it should be marked up with `Ar` again to differentiate it from a constant. For example, a command with a `--host name` option that calls ssh to retrieve the host's local time would signify this thusly:
```
This will run
.Ic ssh Ar name Ic time
to retrieve the remote time.
```

### Paths, NixOS options, environment variables {#ssec-contributing-nixos-tools-options-and-environment}

Constant paths should be marked with `Pa`, NixOS options with `Va`, and environment variables with `Ev`.

Generated paths, e.g. `result/bin/run-hostname-vm` (where `hostname` is a variable or arguments) should be marked as `Ql` inline literals with their variable components marked appropriately.

 - When `hostname` refers to an argument, it becomes `.Ql result/bin/run- Ns Ar hostname Ns -vm`
 - When `hostname` refers to a variable, it becomes `.Ql result/bin/run- Ns Va hostname Ns -vm`

### Code examples and other commands {#ssec-contributing-nixos-tools-code-examples}

In free text names and complete invocations of other commands (e.g. `ssh` or `tar -xvf src.tar`) should be marked with `Ic`, fragments of command lines should be marked with `Ql`.

Larger code blocks or those that cannot be shown inline should use indented literal display block markup for their contents, i.e.

```
.Bd -literal -offset indent
...
.Ed
```

Contents of code blocks may be marked up further, e.g. if they refer to arguments that will be substituted into them:

```
.Bd -literal -offset indent
{
  config.networking.hostname = "\c
.Ar hostname Ns \c
";
}
.Ed
```

Title: Guidelines for Semantic Markup in NixOS Tool Manpages (mdoc(7))
Summary
This section details the contribution guidelines for `nixos-*` tools' manpages, which are written in `mdoc(7)` format and aim for portability. It outlines how to use semantic markup for various elements: commands, flags (`Fl`), arguments (`Ar`), literal strings (`Cm`), and optional (`Op`) or mutually exclusive argument groups for the *current* executable. It also covers marking paths (`Pa`), NixOS options (`Va`), and environment variables (`Ev`), distinguishing between constant and generated forms. Finally, it specifies using `Ic` for full command invocations, `Ql` for command fragments, and indented literal display blocks (`.Bd -literal -offset indent`) for larger code examples, with provisions for further internal markup.