tvl-depot/nix/buildManPages/default.nix
sterni 8d4b2f3d54 refactor(sterni): use pkgs over third_party to import from nixpkgs
This should ease migrating to a distinction between depot.third_party
and pkgs (as in nixpkgs) in the future.

Ref cl/2910, b/108.

Change-Id: I53a854071fddd7c0d0526cc4c5b16998202082c6
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2913
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
2021-04-10 11:40:18 +00:00

76 lines
1.5 KiB
Nix

{ depot, pkgs, lib, ... }:
let
inherit (pkgs)
gzip
mandoc
coreutils
;
inherit (depot.nix)
runExecline
getBins
;
bins = getBins mandoc [ "mandoc" ]
// getBins gzip [ "gzip" ]
// getBins coreutils [ "mkdir" "ln" "cp" ]
;
defaultGzip = true;
basename = gzip: { name, section, ... }:
"${name}.${toString section}${lib.optionalString gzip ".gz"}";
manDir = { section, ... }:
"\${out}/share/man/man${toString section}";
target = gzip: args:
"${manDir args}/${basename gzip args}";
buildManPage =
{ requireLint ? false
, gzip ? defaultGzip
, ...
}:
{ content
, ...
}@page: let
source = builtins.toFile (basename false page) content;
in runExecline (basename gzip page) {} ([
(if requireLint then "if" else "foreground") [
bins.mandoc "-mdoc" "-T" "lint" source
]
"importas" "out" "out"
] ++ (if gzip then [
"redirfd" "-w" "1" "$out"
bins.gzip "-c" source
] else [
bins.cp "--reflink=auto" source "$out"
]));
buildManPages =
name:
{ derivationArgs ? {}
, gzip ? defaultGzip
, ...
}@args:
pages:
runExecline "${name}-man-pages" {
inherit derivationArgs;
} ([
"importas" "out" "out"
] ++ lib.concatMap ({ name, section, content }@page: [
"if" [ bins.mkdir "-p" (manDir page) ]
"if" [
bins.ln "-s"
(buildManPage args page)
(target gzip page)
]
]) pages);
in {
__functor = _: buildManPages;
single = buildManPage;
}