summary refs log tree commit diff
path: root/modules/services/misc/nixos-manual.nix
blob: f463a91998e25824a5221a6399e7e24d42c0b913 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# 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, pkgs, options, ... }:

with pkgs.lib;

let

  cfg = config.services.nixosManual;

  manual = import ../../../doc/manual {
    inherit (cfg) revision;
    inherit pkgs options;
  };
    
in

{

  options = {

    services.nixosManual.enable = mkOption {
      default = true;
      description = ''
        Whether to build the NixOS manual pages.
      '';
    };

    services.nixosManual.showManual = mkOption {
      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 {
      default = "${pkgs.w3m}/bin/w3m";
      description = ''
        Browser used to show the manual.
      '';
    };

    services.nixosManual.revision = mkOption {
      default = "local";
      type = types.uniq types.string;
      description = ''
        Revision of the targeted source file.  This value can either be
        <literal>"local"</literal>, <literal>"HEAD"</literal> or any
        revision number embedded in a string.
      '';
    };

  };


  config = mkIf cfg.enable {

    system.build.manual = manual;

    environment.systemPackages = [ manual.manpages ];

    boot.extraTTYs = mkIf cfg.showManual ["tty${cfg.ttyNumber}"];

    jobs = mkIf cfg.showManual
      { nixosManual = 
        { name = "nixos-manual";

          description = "NixOS manual";

          startOn = "started udev";

          exec =
            ''
              ${cfg.browser} ${manual.manual}/share/doc/nixos/manual.html \
                < /dev/tty${toString cfg.ttyNumber} > /dev/tty${toString cfg.ttyNumber} 2>&1
            '';
        };
      };

    services.ttyBackgrounds.specificThemes = mkIf cfg.showManual 
      [ { tty = "tty${cfg.ttyNumber}";
          theme = pkgs.themes "green";
        }
      ];

    services.mingetty.helpLine = mkIf cfg.showManual
      "\nPress <Alt-F${toString cfg.ttyNumber}> for the NixOS manual.";
      
  };

}