105 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let cfg = config.documentation; in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    documentation = {
 | 
						|
 | 
						|
      enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = true;
 | 
						|
        description = ''
 | 
						|
          Whether to install documentation of packages from
 | 
						|
          <option>environment.systemPackages</option> into the generated system path.
 | 
						|
 | 
						|
          See "Multiple-output packages" chapter in the nixpkgs manual for more info.
 | 
						|
        '';
 | 
						|
        # which is at ../../../doc/multiple-output.xml
 | 
						|
      };
 | 
						|
 | 
						|
      man.enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = true;
 | 
						|
        description = ''
 | 
						|
          Whether to install manual pages and the <command>man</command> command.
 | 
						|
          This also includes "man" outputs.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      info.enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = true;
 | 
						|
        description = ''
 | 
						|
          Whether to install info pages and the <command>info</command> command.
 | 
						|
          This also includes "info" outputs.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      doc.enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = true;
 | 
						|
        description = ''
 | 
						|
          Whether to install documentation distributed in packages' <literal>/share/doc</literal>.
 | 
						|
          Usually plain text and/or HTML.
 | 
						|
          This also includes "doc" outputs.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      dev.enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = false;
 | 
						|
        description = ''
 | 
						|
          Whether to install documentation targeted at developers.
 | 
						|
          <itemizedlist>
 | 
						|
          <listitem><para>This includes man pages targeted at developers if <option>man.enable</option> is
 | 
						|
                    set (this also includes "devman" outputs).</para></listitem>
 | 
						|
          <listitem><para>This includes info pages targeted at developers if <option>info.enable</option>
 | 
						|
                    is set (this also includes "devinfo" outputs).</para></listitem>
 | 
						|
          <listitem><para>This includes other pages targeted at developers if <option>doc.enable</option>
 | 
						|
                    is set (this also includes "devdoc" outputs).</para></listitem>
 | 
						|
          </itemizedlist>
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
  config = mkIf cfg.enable (mkMerge [
 | 
						|
 | 
						|
    (mkIf cfg.man.enable {
 | 
						|
      environment.systemPackages = [ pkgs.man-db ];
 | 
						|
      environment.pathsToLink = [ "/share/man" ];
 | 
						|
      environment.extraOutputsToInstall = [ "man" ] ++ optional cfg.dev.enable "devman";
 | 
						|
    })
 | 
						|
 | 
						|
    (mkIf cfg.info.enable {
 | 
						|
      environment.systemPackages = [ pkgs.texinfoInteractive ];
 | 
						|
      environment.pathsToLink = [ "/share/info" ];
 | 
						|
      environment.extraOutputsToInstall = [ "info" ] ++ optional cfg.dev.enable "devinfo";
 | 
						|
      environment.extraSetup = ''
 | 
						|
        if [ -w $out/share/info ]; then
 | 
						|
          shopt -s nullglob
 | 
						|
          for i in $out/share/info/*.info $out/share/info/*.info.gz; do
 | 
						|
              ${pkgs.texinfo}/bin/install-info $i $out/share/info/dir
 | 
						|
          done
 | 
						|
        fi
 | 
						|
      '';
 | 
						|
    })
 | 
						|
 | 
						|
    (mkIf cfg.doc.enable {
 | 
						|
      # TODO(@oxij): put it here and remove from profiles?
 | 
						|
      # environment.systemPackages = [ pkgs.w3m ]; # w3m-nox?
 | 
						|
      environment.pathsToLink = [ "/share/doc" ];
 | 
						|
      environment.extraOutputsToInstall = [ "doc" ] ++ optional cfg.dev.enable "devdoc";
 | 
						|
    })
 | 
						|
 | 
						|
  ]);
 | 
						|
 | 
						|
}
 |