diff options
-rw-r--r-- | users/sterni/nix/build/toPlainText/default.nix | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/users/sterni/nix/build/toPlainText/default.nix b/users/sterni/nix/build/toPlainText/default.nix new file mode 100644 index 000000000000..c59e372d3b50 --- /dev/null +++ b/users/sterni/nix/build/toPlainText/default.nix @@ -0,0 +1,56 @@ +{ pkgs, depot, lib, ... }: + +{ fmt ? null +, passthru ? { } +, ... +}@args: + +let + inherit (depot.nix) getBins utils; + + bins = getBins pkgs.lowdown [ + "lowdown" + ] // getBins pkgs.mandoc [ + "mandoc" + ] // getBins pkgs.gnused [ + "sed" + ]; + + actions = { + mdoc = '' + ${bins.mandoc} -T utf8 "${thing}" > "$out" + ''; + + # Use lowdown's terminal target, but strip all ANSI SGR escape sequences + markdown = '' + ${bins.lowdown} -Tterm "${thing}" \ + | ${bins.sed} -e 's|\\x1b\\[[;0-9]*m||g' \ + > "$out" + ''; + + plain = '' + cp --reflink=auto "${thing}" "$out" + ''; + }; + + thingType = builtins.head ( + builtins.filter (x: x != null) ( + builtins.map (t: if args ? ${t} then t else null) ( + builtins.attrNames actions + ) + ) + ); + + thing = args.${thingType}; + name = args.name or utils.storePathName thing; +in + +pkgs.runCommand name +{ + inherit passthru; +} + ( + actions.${thingType} + lib.optionalString (fmt != null) '' + fmt -w "${lib.escapeShellArg (toString fmt)}" "$out" + '' + ) |