at 25.11-pre 3.1 kB view raw
1{ 2 config, 3 pkgs, 4 lib, 5 ... 6}: 7 8let 9 cfg = config.documentation.man.man-db; 10in 11 12{ 13 options = { 14 documentation.man.man-db = { 15 enable = lib.mkEnableOption "man-db as the default man page viewer" // { 16 default = config.documentation.man.enable; 17 defaultText = lib.literalExpression "config.documentation.man.enable"; 18 example = false; 19 }; 20 21 skipPackages = lib.mkOption { 22 type = lib.types.listOf lib.types.package; 23 default = [ ]; 24 internal = true; 25 description = '' 26 Packages to *not* include in the man-db. 27 This can be useful to avoid unnecessary rebuilds due to packages that change frequently, like nixos-version. 28 ''; 29 }; 30 31 manualPages = lib.mkOption { 32 type = lib.types.path; 33 default = pkgs.buildEnv { 34 name = "man-paths"; 35 paths = lib.subtractLists cfg.skipPackages config.environment.systemPackages; 36 pathsToLink = [ "/share/man" ]; 37 extraOutputsToInstall = [ "man" ] ++ lib.optionals config.documentation.dev.enable [ "devman" ]; 38 ignoreCollisions = true; 39 }; 40 defaultText = lib.literalMD "all man pages in {option}`config.environment.systemPackages`"; 41 description = '' 42 The manual pages to generate caches for if {option}`documentation.man.generateCaches` 43 is enabled. Must be a path to a directory with man pages under 44 `/share/man`; see the source for an example. 45 Advanced users can make this a content-addressed derivation to save a few rebuilds. 46 ''; 47 }; 48 49 package = lib.mkOption { 50 type = lib.types.package; 51 default = pkgs.man-db; 52 defaultText = lib.literalExpression "pkgs.man-db"; 53 description = '' 54 The `man-db` derivation to use. Useful to override 55 configuration options used for the package. 56 ''; 57 }; 58 }; 59 }; 60 61 imports = [ 62 (lib.mkRenamedOptionModule 63 [ "documentation" "man" "manualPages" ] 64 [ "documentation" "man" "man-db" "manualPages" ] 65 ) 66 ]; 67 68 config = lib.mkIf cfg.enable { 69 environment.systemPackages = [ cfg.package ]; 70 environment.etc."man_db.conf".text = 71 let 72 manualCache = 73 pkgs.runCommand "man-cache" 74 { 75 nativeBuildInputs = [ cfg.package ]; 76 } 77 '' 78 echo "MANDB_MAP ${cfg.manualPages}/share/man $out" > man.conf 79 mandb -C man.conf -psc >/dev/null 2>&1 80 ''; 81 in 82 '' 83 # Manual pages paths for NixOS 84 MANPATH_MAP /run/current-system/sw/bin /run/current-system/sw/share/man 85 MANPATH_MAP /run/wrappers/bin /run/current-system/sw/share/man 86 87 ${lib.optionalString config.documentation.man.generateCaches '' 88 # Generated manual pages cache for NixOS (immutable) 89 MANDB_MAP /run/current-system/sw/share/man ${manualCache} 90 ''} 91 # Manual pages caches for NixOS 92 MANDB_MAP /run/current-system/sw/share/man /var/cache/man/nixos 93 ''; 94 }; 95}