29027fd1e1
Using pkgs.lib on the spine of module evaluation is problematic because the pkgs argument depends on the result of module evaluation. To prevent an infinite recursion, pkgs and some of the modules are evaluated twice, which is inefficient. Using ‘with lib’ prevents this problem.
120 lines
2.9 KiB
Nix
120 lines
2.9 KiB
Nix
# This module includes the NixOS man-pages in the system environment,
|
|
# and optionally starts a browser that shows the NixOS manual on one
|
|
# of the virtual consoles. The latter is useful for the installation
|
|
# CD.
|
|
|
|
{ config, lib, pkgs, baseModules, ... } @ extraArgs:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.services.nixosManual;
|
|
|
|
versionModule =
|
|
{ system.nixosVersionSuffix = config.system.nixosVersionSuffix;
|
|
system.nixosRevision = config.system.nixosRevision;
|
|
};
|
|
|
|
eval = evalModules {
|
|
modules = [ versionModule ] ++ baseModules;
|
|
args = (removeAttrs extraArgs ["config" "options"]) // { modules = [ ]; };
|
|
};
|
|
|
|
manual = import ../../../doc/manual {
|
|
inherit pkgs;
|
|
version = config.system.nixosVersion;
|
|
revision = config.system.nixosRevision;
|
|
options = eval.options;
|
|
};
|
|
|
|
entry = "${manual.manual}/share/doc/nixos/manual.html";
|
|
|
|
help = pkgs.writeScriptBin "nixos-help"
|
|
''
|
|
#! ${pkgs.stdenv.shell} -e
|
|
browser="$BROWSER"
|
|
if [ -z "$browser" ]; then
|
|
browser="$(type -P xdg-open || true)"
|
|
if [ -z "$browser" ]; then
|
|
browser="$(type -P w3m || true)"
|
|
if [ -z "$browser" ]; then
|
|
echo "$0: unable to start a web browser; please set \$BROWSER"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
exec "$browser" ${entry}
|
|
'';
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options = {
|
|
|
|
services.nixosManual.enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = ''
|
|
Whether to build the NixOS manual pages.
|
|
'';
|
|
};
|
|
|
|
services.nixosManual.showManual = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
Whether to show the NixOS manual on one of the virtual
|
|
consoles.
|
|
'';
|
|
};
|
|
|
|
services.nixosManual.ttyNumber = mkOption {
|
|
default = "8";
|
|
description = ''
|
|
Virtual console on which to show the manual.
|
|
'';
|
|
};
|
|
|
|
services.nixosManual.browser = mkOption {
|
|
type = types.path;
|
|
default = "${pkgs.w3m}/bin/w3m";
|
|
description = ''
|
|
Browser used to show the manual.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
system.build.manual = manual;
|
|
|
|
environment.systemPackages = [ manual.manpages help ];
|
|
|
|
boot.extraTTYs = mkIf cfg.showManual ["tty${cfg.ttyNumber}"];
|
|
|
|
systemd.services = optionalAttrs cfg.showManual
|
|
{ "nixos-manual" =
|
|
{ description = "NixOS Manual";
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig =
|
|
{ ExecStart = "${cfg.browser} ${entry}";
|
|
StandardInput = "tty";
|
|
StandardOutput = "tty";
|
|
TTYPath = "/dev/tty${cfg.ttyNumber}";
|
|
TTYReset = true;
|
|
TTYVTDisallocate = true;
|
|
Restart = "always";
|
|
};
|
|
};
|
|
};
|
|
|
|
services.mingetty.helpLine = mkIf cfg.showManual
|
|
"\nPress <Alt-F${toString cfg.ttyNumber}> for the NixOS manual.";
|
|
|
|
};
|
|
|
|
}
|