diff --git a/doc/builders/special.xml b/doc/builders/special.xml
index 09115751d6a7..8902ce5c8132 100644
--- a/doc/builders/special.xml
+++ b/doc/builders/special.xml
@@ -5,6 +5,6 @@
This chapter describes several special builders.
-
+
diff --git a/doc/builders/special/fhs-environments.section.md b/doc/builders/special/fhs-environments.section.md
new file mode 100644
index 000000000000..512a31cae0f1
--- /dev/null
+++ b/doc/builders/special/fhs-environments.section.md
@@ -0,0 +1,45 @@
+# buildFHSUserEnv {#sec-fhs-environments}
+
+`buildFHSUserEnv` provides a way to build and run FHS-compatible lightweight sandboxes. It creates an isolated root with bound `/nix/store`, so its footprint in terms of disk space needed is quite small. This allows one to run software which is hard or unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions, games distributed as tarballs, software with integrity checking and/or external self-updated binaries. It uses Linux namespaces feature to create temporary lightweight environments which are destroyed after all child processes exit, without root user rights requirement. Accepted arguments are:
+
+- `name`
+ Environment name.
+- `targetPkgs`
+ Packages to be installed for the main host's architecture (i.e. x86_64 on x86_64 installations). Along with libraries binaries are also installed.
+- `multiPkgs`
+ Packages to be installed for all architectures supported by a host (i.e. i686 and x86_64 on x86_64 installations). Only libraries are installed by default.
+- `extraBuildCommands`
+ Additional commands to be executed for finalizing the directory structure.
+- `extraBuildCommandsMulti`
+ Like `extraBuildCommands`, but executed only on multilib architectures.
+- `extraOutputsToInstall`
+ Additional derivation outputs to be linked for both target and multi-architecture packages.
+- `extraInstallCommands`
+ Additional commands to be executed for finalizing the derivation with runner script.
+- `runScript`
+ A command that would be executed inside the sandbox and passed all the command line arguments. It defaults to `bash`.
+
+One can create a simple environment using a `shell.nix` like that:
+
+```nix
+{ pkgs ? import {} }:
+
+(pkgs.buildFHSUserEnv {
+ name = "simple-x11-env";
+ targetPkgs = pkgs: (with pkgs;
+ [ udev
+ alsaLib
+ ]) ++ (with pkgs.xorg;
+ [ libX11
+ libXcursor
+ libXrandr
+ ]);
+ multiPkgs = pkgs: (with pkgs;
+ [ udev
+ alsaLib
+ ]);
+ runScript = "bash";
+}).env
+```
+
+Running `nix-shell` would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change `runScript` to the application path, e.g. `./bin/start.sh` -- relative paths are supported.
diff --git a/doc/builders/special/fhs-environments.xml b/doc/builders/special/fhs-environments.xml
deleted file mode 100644
index e7b81e97a23f..000000000000
--- a/doc/builders/special/fhs-environments.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-
- buildFHSUserEnv
-
-
- buildFHSUserEnv provides a way to build and run FHS-compatible lightweight sandboxes. It creates an isolated root with bound /nix/store, so its footprint in terms of disk space needed is quite small. This allows one to run software which is hard or unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions, games distributed as tarballs, software with integrity checking and/or external self-updated binaries. It uses Linux namespaces feature to create temporary lightweight environments which are destroyed after all child processes exit, without root user rights requirement. Accepted arguments are:
-
-
-
-
-
- name
-
-
-
- Environment name.
-
-
-
-
-
- targetPkgs
-
-
-
- Packages to be installed for the main host's architecture (i.e. x86_64 on x86_64 installations). Along with libraries binaries are also installed.
-
-
-
-
-
- multiPkgs
-
-
-
- Packages to be installed for all architectures supported by a host (i.e. i686 and x86_64 on x86_64 installations). Only libraries are installed by default.
-
-
-
-
-
- extraBuildCommands
-
-
-
- Additional commands to be executed for finalizing the directory structure.
-
-
-
-
-
- extraBuildCommandsMulti
-
-
-
- Like extraBuildCommands, but executed only on multilib architectures.
-
-
-
-
-
- extraOutputsToInstall
-
-
-
- Additional derivation outputs to be linked for both target and multi-architecture packages.
-
-
-
-
-
- extraInstallCommands
-
-
-
- Additional commands to be executed for finalizing the derivation with runner script.
-
-
-
-
-
- runScript
-
-
-
- A command that would be executed inside the sandbox and passed all the command line arguments. It defaults to bash.
-
-
-
-
-
-
- One can create a simple environment using a shell.nix like that:
-
-
- {} }:
-
-(pkgs.buildFHSUserEnv {
- name = "simple-x11-env";
- targetPkgs = pkgs: (with pkgs;
- [ udev
- alsaLib
- ]) ++ (with pkgs.xorg;
- [ libX11
- libXcursor
- libXrandr
- ]);
- multiPkgs = pkgs: (with pkgs;
- [ udev
- alsaLib
- ]);
- runScript = "bash";
-}).env
-]]>
-
-
- Running nix-shell would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change runScript to the application path, e.g. ./bin/start.sh -- relative paths are supported.
-
-