tvl-depot/users/sterni/nix/build/manPages/default.nix
sterni 57a9874588 chore(nix): move buildManPages to //users/sterni
It's only used in my user directory and I don't feel it's generally
useful. There's so little to interpolate you may as well just check them
in.

Change-Id: I31dc9917c2b281c7d68388e1a32c8ef5179621df
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12873
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
2024-12-31 09:03:38 +00:00

103 lines
1.8 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;
}