Merge pull request #248701 from doronbehar/nixos/manpages
nixos/install-tools: Add manpages to packages instead of seperating them
This commit is contained in:
commit
62730f2c31
16 changed files with 128 additions and 78 deletions
|
@ -7,6 +7,7 @@ You can quickly check your edits with the following:
|
||||||
|
|
||||||
```ShellSession
|
```ShellSession
|
||||||
$ cd /path/to/nixpkgs
|
$ cd /path/to/nixpkgs
|
||||||
|
$ $EDITOR doc/nixos/manual/... # edit the manual
|
||||||
$ nix-build nixos/release.nix -A manual.x86_64-linux
|
$ nix-build nixos/release.nix -A manual.x86_64-linux
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -14,24 +15,96 @@ If the build succeeds, the manual will be in `./result/share/doc/nixos/index.htm
|
||||||
|
|
||||||
There's also [a convenient development daemon](https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-devmode).
|
There's also [a convenient development daemon](https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-devmode).
|
||||||
|
|
||||||
**Contributing to the man pages**
|
The above instructions don't deal with the appendix of available `configuration.nix` options, and the manual pages related to NixOS. These are built, and written in a different location and in a different format, as explained in the next sections.
|
||||||
|
|
||||||
The man pages are written in [DocBook] which is XML.
|
## Contributing to the `configuration.nix` options documentation {#sec-contributing-options}
|
||||||
|
|
||||||
To see what your edits look like:
|
The documentation for all the different `configuration.nix` options is automatically generated by reading the `description`s of all the NixOS options defined at `nixos/modules/`. If you want to improve such `description`, find it in the `nixos/modules/` directory, and edit it and open a pull request.
|
||||||
|
|
||||||
|
To see how your changes render on the web, run again:
|
||||||
|
|
||||||
|
```ShellSession
|
||||||
|
$ nix-build nixos/release.nix -A manual.x86_64-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
And you'll see the changes to the appendix in the path `result/share/doc/nixos/options.html`.
|
||||||
|
|
||||||
|
You can also build only the `configuration.nix(5)` manual page, via:
|
||||||
|
|
||||||
```ShellSession
|
```ShellSession
|
||||||
$ cd /path/to/nixpkgs
|
$ cd /path/to/nixpkgs
|
||||||
$ nix-build nixos/release.nix -A manpages.x86_64-linux
|
$ nix-build nixos/release.nix -A nixos-configuration-reference-manpage.x86_64-linux
|
||||||
```
|
```
|
||||||
|
|
||||||
You can then read the man page you edited by running
|
And observe the result via:
|
||||||
|
|
||||||
```ShellSession
|
```ShellSession
|
||||||
$ man --manpath=result/share/man nixos-rebuild # Replace nixos-rebuild with the command whose manual you edited
|
$ man --local-file result/share/man/man5/configuration.nix.5
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're on a different architecture that's supported by NixOS (check nixos/release.nix) then replace `x86_64-linux` with the architecture.
|
If you're on a different architecture that's supported by NixOS (check file `nixos/release.nix` on Nixpkgs' repository) then replace `x86_64-linux` with the architecture. `nix-build` will complain otherwise, but should also tell you which architecture you have + the supported ones.
|
||||||
`nix-build` will complain otherwise, but should also tell you which architecture you have + the supported ones.
|
|
||||||
|
|
||||||
[DocBook]: https://en.wikipedia.org/wiki/DocBook
|
## 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
|
||||||
|
```
|
||||||
|
|
|
@ -184,8 +184,8 @@ in rec {
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|
||||||
# Generate the NixOS manpages.
|
# Generate the `man configuration.nix` package
|
||||||
manpages = runCommand "nixos-manpages"
|
nixos-configuration-reference-manpage = runCommand "nixos-configuration-reference-manpage"
|
||||||
{ nativeBuildInputs = [
|
{ nativeBuildInputs = [
|
||||||
buildPackages.installShellFiles
|
buildPackages.installShellFiles
|
||||||
buildPackages.nixos-render-docs
|
buildPackages.nixos-render-docs
|
||||||
|
@ -194,8 +194,6 @@ in rec {
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
# Generate manpages.
|
# Generate manpages.
|
||||||
mkdir -p $out/share/man/man8
|
|
||||||
installManPage ${./manpages}/*
|
|
||||||
mkdir -p $out/share/man/man5
|
mkdir -p $out/share/man/man5
|
||||||
nixos-render-docs -j $NIX_BUILD_CORES options manpage \
|
nixos-render-docs -j $NIX_BUILD_CORES options manpage \
|
||||||
--revision ${lib.escapeShellArg revision} \
|
--revision ${lib.escapeShellArg revision} \
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
# NixOS manpages
|
|
||||||
|
|
||||||
This is the collection of NixOS manpages, excluding `configuration.nix(5)`.
|
|
||||||
|
|
||||||
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 (though minor differences may occur, mandoc and groff seem to have slightly different spacing rules.)
|
|
||||||
|
|
||||||
For previewing edited files, you can just run `man -l path/to/file.8` and you will see it rendered.
|
|
||||||
|
|
||||||
Being written in `mdoc` these manpages use semantic markup. This file provides a guideline on where to apply which of the semantic elements of `mdoc`.
|
|
||||||
|
|
||||||
### Command lines and arguments
|
|
||||||
|
|
||||||
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 ellipses (`...`).
|
|
||||||
- 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` flag 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
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
- Taking `hostname` from an argument become `.Ql result/bin/run- Ns Ar hostname Ns -vm`
|
|
||||||
- Taking `hostname` from a variable otherwise defined becomes `.Ql result/bin/run- Ns Va hostname Ns -vm`
|
|
||||||
|
|
||||||
### Code examples and other commands
|
|
||||||
|
|
||||||
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
|
|
||||||
{
|
|
||||||
options.hostname = "\c
|
|
||||||
.Ar hostname Ns \c
|
|
||||||
";
|
|
||||||
}
|
|
||||||
.Ed
|
|
||||||
```
|
|
|
@ -9,12 +9,19 @@ let
|
||||||
makeProg = args: pkgs.substituteAll (args // {
|
makeProg = args: pkgs.substituteAll (args // {
|
||||||
dir = "bin";
|
dir = "bin";
|
||||||
isExecutable = true;
|
isExecutable = true;
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.installShellFiles
|
||||||
|
];
|
||||||
|
postInstall = ''
|
||||||
|
installManPage ${args.manPage}
|
||||||
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
nixos-build-vms = makeProg {
|
nixos-build-vms = makeProg {
|
||||||
name = "nixos-build-vms";
|
name = "nixos-build-vms";
|
||||||
src = ./nixos-build-vms/nixos-build-vms.sh;
|
src = ./nixos-build-vms/nixos-build-vms.sh;
|
||||||
inherit (pkgs) runtimeShell;
|
inherit (pkgs) runtimeShell;
|
||||||
|
manPage = ./manpages/nixos-build-vms.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
nixos-install = makeProg {
|
nixos-install = makeProg {
|
||||||
|
@ -27,6 +34,7 @@ let
|
||||||
nixos-enter
|
nixos-enter
|
||||||
pkgs.util-linuxMinimal
|
pkgs.util-linuxMinimal
|
||||||
];
|
];
|
||||||
|
manPage = ./manpages/nixos-install.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
nixos-rebuild = pkgs.nixos-rebuild.override { nix = config.nix.package.out; };
|
nixos-rebuild = pkgs.nixos-rebuild.override { nix = config.nix.package.out; };
|
||||||
|
@ -40,6 +48,7 @@ let
|
||||||
btrfs = "${pkgs.btrfs-progs}/bin/btrfs";
|
btrfs = "${pkgs.btrfs-progs}/bin/btrfs";
|
||||||
inherit (config.system.nixos-generate-config) configuration desktopConfiguration;
|
inherit (config.system.nixos-generate-config) configuration desktopConfiguration;
|
||||||
xserverEnabled = config.services.xserver.enable;
|
xserverEnabled = config.services.xserver.enable;
|
||||||
|
manPage = ./manpages/nixos-generate-config.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
inherit (pkgs) nixos-option;
|
inherit (pkgs) nixos-option;
|
||||||
|
@ -57,6 +66,7 @@ let
|
||||||
} // optionalAttrs (config.system.configurationRevision != null) {
|
} // optionalAttrs (config.system.configurationRevision != null) {
|
||||||
configurationRevision = config.system.configurationRevision;
|
configurationRevision = config.system.configurationRevision;
|
||||||
});
|
});
|
||||||
|
manPage = ./manpages/nixos-version.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
nixos-enter = makeProg {
|
nixos-enter = makeProg {
|
||||||
|
@ -66,6 +76,7 @@ let
|
||||||
path = makeBinPath [
|
path = makeBinPath [
|
||||||
pkgs.util-linuxMinimal
|
pkgs.util-linuxMinimal
|
||||||
];
|
];
|
||||||
|
manPage = ./manpages/nixos-enter.8;
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
|
@ -346,7 +346,7 @@ in
|
||||||
system.build.manual = manual;
|
system.build.manual = manual;
|
||||||
|
|
||||||
environment.systemPackages = []
|
environment.systemPackages = []
|
||||||
++ optional cfg.man.enable manual.manpages
|
++ optional cfg.man.enable manual.nixos-configuration-reference-manpage
|
||||||
++ optionals cfg.doc.enable [ manual.manualHTML nixos-help ];
|
++ optionals cfg.doc.enable [ manual.manualHTML nixos-help ];
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,7 @@ in rec {
|
||||||
manualHTML = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualHTML);
|
manualHTML = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualHTML);
|
||||||
manual = manualHTML; # TODO(@oxij): remove eventually
|
manual = manualHTML; # TODO(@oxij): remove eventually
|
||||||
manualEpub = (buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualEpub));
|
manualEpub = (buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manualEpub));
|
||||||
manpages = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.manpages);
|
nixos-configuration-reference-manpage = buildFromConfig ({ ... }: { }) (config: config.system.build.manual.nixos-configuration-reference-manpage);
|
||||||
options = (buildFromConfig ({ ... }: { }) (config: config.system.build.manual.optionsJSON)).x86_64-linux;
|
options = (buildFromConfig ({ ... }: { }) (config: config.system.build.manual.optionsJSON)).x86_64-linux;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
, nix
|
, nix
|
||||||
, lib
|
, lib
|
||||||
, nixosTests
|
, nixosTests
|
||||||
|
, installShellFiles
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
fallback = import ./../../../../nixos/modules/installer/tools/nix-fallback-paths.nix;
|
fallback = import ./../../../../nixos/modules/installer/tools/nix-fallback-paths.nix;
|
||||||
|
@ -20,6 +21,12 @@ substituteAll {
|
||||||
nix_i686_linux = fallback.i686-linux;
|
nix_i686_linux = fallback.i686-linux;
|
||||||
nix_aarch64_linux = fallback.aarch64-linux;
|
nix_aarch64_linux = fallback.aarch64-linux;
|
||||||
path = lib.makeBinPath [ coreutils gnused gnugrep ];
|
path = lib.makeBinPath [ coreutils gnused gnugrep ];
|
||||||
|
nativeBuildInputs = [
|
||||||
|
installShellFiles
|
||||||
|
];
|
||||||
|
postInstall = ''
|
||||||
|
installManPage ${./nixos-rebuild.8}
|
||||||
|
'';
|
||||||
|
|
||||||
# run some a simple installer tests to make sure nixos-rebuild still works for them
|
# run some a simple installer tests to make sure nixos-rebuild still works for them
|
||||||
passthru.tests = {
|
passthru.tests = {
|
||||||
|
|
|
@ -20,8 +20,7 @@ in
|
||||||
inherit (config.system.build)
|
inherit (config.system.build)
|
||||||
nixos-install nixos-generate-config nixos-enter;
|
nixos-install nixos-generate-config nixos-enter;
|
||||||
|
|
||||||
# Required for --help.
|
inherit (config.system.build.manual) nixos-configuration-reference-manpage;
|
||||||
inherit (config.system.build.manual) manpages;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extraOutputsToInstall = ["man"];
|
extraOutputsToInstall = ["man"];
|
||||||
|
|
|
@ -1,14 +1,33 @@
|
||||||
{ lib, stdenv, boost, cmake, pkg-config, nix }:
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, boost
|
||||||
|
, cmake
|
||||||
|
, pkg-config
|
||||||
|
, installShellFiles
|
||||||
|
, nix
|
||||||
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "nixos-option";
|
name = "nixos-option";
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
postInstall = ''
|
||||||
|
installManPage ${./nixos-option.8}
|
||||||
|
'';
|
||||||
|
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
nativeBuildInputs = [ cmake pkg-config ];
|
nativeBuildInputs = [
|
||||||
buildInputs = [ boost nix ];
|
cmake
|
||||||
cmakeFlags = [ "-DNIX_DEV_INCLUDEPATH=${nix.dev}/include/nix" ];
|
pkg-config
|
||||||
|
installShellFiles
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
boost
|
||||||
|
nix
|
||||||
|
];
|
||||||
|
cmakeFlags = [
|
||||||
|
"-DNIX_DEV_INCLUDEPATH=${nix.dev}/include/nix"
|
||||||
|
];
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
license = licenses.lgpl2Plus;
|
license = licenses.lgpl2Plus;
|
||||||
|
|
Loading…
Reference in a new issue