about summary refs log tree commit diff
path: root/pkgs/tools/text
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/text')
-rw-r--r--pkgs/tools/text/a2ps/default.nix2
-rw-r--r--pkgs/tools/text/align/default.nix2
-rw-r--r--pkgs/tools/text/amber/default.nix2
-rw-r--r--pkgs/tools/text/anew/default.nix2
-rw-r--r--pkgs/tools/text/angle-grinder/default.nix6
-rw-r--r--pkgs/tools/text/ascii/default.nix25
-rw-r--r--pkgs/tools/text/autocorrect/default.nix2
-rw-r--r--pkgs/tools/text/bashblog/default.nix4
-rw-r--r--pkgs/tools/text/boxes/default.nix2
-rw-r--r--pkgs/tools/text/cconv/default.nix2
-rw-r--r--pkgs/tools/text/choose/default.nix2
-rw-r--r--pkgs/tools/text/chroma/default.nix2
-rw-r--r--pkgs/tools/text/clima/default.nix2
-rw-r--r--pkgs/tools/text/cmigemo/default.nix2
-rw-r--r--pkgs/tools/text/comrak/default.nix2
-rw-r--r--pkgs/tools/text/convertlit/default.nix2
-rw-r--r--pkgs/tools/text/crowdin-cli/default.nix2
-rw-r--r--pkgs/tools/text/csvdiff/default.nix2
-rw-r--r--pkgs/tools/text/csview/default.nix2
-rw-r--r--pkgs/tools/text/d2/default.nix2
-rw-r--r--pkgs/tools/text/diffsitter/default.nix2
-rw-r--r--pkgs/tools/text/difftastic/Cargo.lock1263
-rw-r--r--pkgs/tools/text/difftastic/default.nix19
-rw-r--r--pkgs/tools/text/diffutils/default.nix4
-rw-r--r--pkgs/tools/text/epub2txt2/default.nix6
-rw-r--r--pkgs/tools/text/fanficfare/default.nix6
-rw-r--r--pkgs/tools/text/fastmod/default.nix2
-rw-r--r--pkgs/tools/text/frawk/default.nix2
-rw-r--r--pkgs/tools/text/frogmouth/default.nix2
-rw-r--r--pkgs/tools/text/gawk/default.nix5
-rw-r--r--pkgs/tools/text/glogg/default.nix2
-rw-r--r--pkgs/tools/text/gnugrep/default.nix5
-rw-r--r--pkgs/tools/text/gnused/default.nix4
-rw-r--r--pkgs/tools/text/goawk/default.nix2
-rw-r--r--pkgs/tools/text/grin/default.nix2
-rw-r--r--pkgs/tools/text/groff/default.nix2
-rw-r--r--pkgs/tools/text/gucci/default.nix2
-rw-r--r--pkgs/tools/text/hck/default.nix2
-rw-r--r--pkgs/tools/text/hcledit/default.nix2
-rw-r--r--pkgs/tools/text/highlight/default.nix4
-rw-r--r--pkgs/tools/text/html-tidy/default.nix2
-rw-r--r--pkgs/tools/text/ispell/default.nix2
-rw-r--r--pkgs/tools/text/jen/default.nix2
-rw-r--r--pkgs/tools/text/jotdown/default.nix2
-rw-r--r--pkgs/tools/text/jumanpp/default.nix2
-rw-r--r--pkgs/tools/text/languagetool/default.nix2
-rw-r--r--pkgs/tools/text/link-grammar/default.nix2
-rw-r--r--pkgs/tools/text/mark/default.nix2
-rw-r--r--pkgs/tools/text/markdownlint-cli2/default.nix2
-rw-r--r--pkgs/tools/text/mawk/default.nix4
-rw-r--r--pkgs/tools/text/mdbook-admonish/default.nix8
-rw-r--r--pkgs/tools/text/mdbook-footnote/default.nix2
-rw-r--r--pkgs/tools/text/mdbook-graphviz/default.nix8
-rw-r--r--pkgs/tools/text/mdbook-i18n-helpers/default.nix6
-rw-r--r--pkgs/tools/text/mdbook-katex/default.nix2
-rw-r--r--pkgs/tools/text/mdbook-linkcheck/default.nix2
-rw-r--r--pkgs/tools/text/mdbook-mermaid/default.nix2
-rw-r--r--pkgs/tools/text/mdbook-pdf/default.nix2
-rw-r--r--pkgs/tools/text/mdbook-toc/default.nix2
-rw-r--r--pkgs/tools/text/opencc/default.nix2
-rw-r--r--pkgs/tools/text/ov/default.nix6
-rw-r--r--pkgs/tools/text/paperoni/default.nix2
-rw-r--r--pkgs/tools/text/percollate/default.nix2
-rw-r--r--pkgs/tools/text/pinyin-tool/default.nix2
-rw-r--r--pkgs/tools/text/platinum-searcher/default.nix2
-rw-r--r--pkgs/tools/text/pn/default.nix2
-rw-r--r--pkgs/tools/text/pomsky/default.nix2
-rw-r--r--pkgs/tools/text/popfile/default.nix2
-rw-r--r--pkgs/tools/text/proselint/default.nix2
-rw-r--r--pkgs/tools/text/rare-regex/default.nix6
-rw-r--r--pkgs/tools/text/repgrep/default.nix2
-rw-r--r--pkgs/tools/text/replace/default.nix2
-rw-r--r--pkgs/tools/text/reveal-md/default.nix8
-rw-r--r--pkgs/tools/text/rgxg/default.nix2
-rw-r--r--pkgs/tools/text/riffdiff/default.nix2
-rw-r--r--pkgs/tools/text/ripgrep/default.nix2
-rw-r--r--pkgs/tools/text/rnr/default.nix2
-rw-r--r--pkgs/tools/text/runiq/default.nix2
-rw-r--r--pkgs/tools/text/sad/default.nix6
-rw-r--r--pkgs/tools/text/scraper/default.nix2
-rw-r--r--pkgs/tools/text/seehecht/default.nix2
-rw-r--r--pkgs/tools/text/sgml/openjade/default.nix2
-rw-r--r--pkgs/tools/text/sgml/opensp/default.nix2
-rw-r--r--pkgs/tools/text/sgrep/default.nix2
-rw-r--r--pkgs/tools/text/shab/default.nix2
-rw-r--r--pkgs/tools/text/shfmt/default.nix2
-rw-r--r--pkgs/tools/text/shocco/default.nix2
-rw-r--r--pkgs/tools/text/sift/default.nix2
-rw-r--r--pkgs/tools/text/silver-searcher/default.nix2
-rw-r--r--pkgs/tools/text/teip/default.nix7
-rw-r--r--pkgs/tools/text/termbook/default.nix2
-rw-r--r--pkgs/tools/text/tesh/default.nix2
-rw-r--r--pkgs/tools/text/textpieces/default.nix86
-rw-r--r--pkgs/tools/text/tidy-viewer/default.nix2
-rw-r--r--pkgs/tools/text/tml/default.nix2
-rw-r--r--pkgs/tools/text/unrtf/default.nix2
-rw-r--r--pkgs/tools/text/untex/default.nix2
-rw-r--r--pkgs/tools/text/vale/default.nix8
-rw-r--r--pkgs/tools/text/vale/styles.nix24
-rw-r--r--pkgs/tools/text/validator-nu/default.nix1
-rw-r--r--pkgs/tools/text/wrap/default.nix2
-rw-r--r--pkgs/tools/text/xidel/default.nix2
-rw-r--r--pkgs/tools/text/xml/basex/default.nix4
-rw-r--r--pkgs/tools/text/xml/jing-trang/default.nix2
-rw-r--r--pkgs/tools/text/xml/rxp/default.nix2
-rw-r--r--pkgs/tools/text/xml/xmlformat/default.nix2
-rw-r--r--pkgs/tools/text/xml/xmlstarlet/default.nix2
-rw-r--r--pkgs/tools/text/xsv/default.nix2
108 files changed, 1449 insertions, 248 deletions
diff --git a/pkgs/tools/text/a2ps/default.nix b/pkgs/tools/text/a2ps/default.nix
index c275ee7d967c9..78d4c4dcad9fc 100644
--- a/pkgs/tools/text/a2ps/default.nix
+++ b/pkgs/tools/text/a2ps/default.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
   strictDeps = true;
 
   meta = with lib; {
-    description = "An Anything to PostScript converter and pretty-printer";
+    description = "Anything to PostScript converter and pretty-printer";
     longDescription = ''
       GNU a2ps converts files into PostScript for printing or viewing. It uses a nice default format,
       usually two pages on each physical page, borders surrounding pages, headers with useful information
diff --git a/pkgs/tools/text/align/default.nix b/pkgs/tools/text/align/default.nix
index 844b03b2c8c12..fa97b97ad261c 100644
--- a/pkgs/tools/text/align/default.nix
+++ b/pkgs/tools/text/align/default.nix
@@ -15,7 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     homepage = "https://github.com/Guitarbum722/align";
-    description = "A general purpose application and library for aligning text";
+    description = "General purpose application and library for aligning text";
     mainProgram = "align";
     maintainers = with maintainers; [ hrhino ];
     license = licenses.mit;
diff --git a/pkgs/tools/text/amber/default.nix b/pkgs/tools/text/amber/default.nix
index e4158b4bfc2d4..0b81281fad1ad 100644
--- a/pkgs/tools/text/amber/default.nix
+++ b/pkgs/tools/text/amber/default.nix
@@ -18,7 +18,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
   meta = with lib; {
-    description = "A code search-and-replace tool";
+    description = "Code search-and-replace tool";
     homepage = "https://github.com/dalance/amber";
     license = with licenses; [ mit ];
     maintainers = [ maintainers.bdesham ];
diff --git a/pkgs/tools/text/anew/default.nix b/pkgs/tools/text/anew/default.nix
index 58b6059a252c5..35c7d872f3d8b 100644
--- a/pkgs/tools/text/anew/default.nix
+++ b/pkgs/tools/text/anew/default.nix
@@ -19,7 +19,7 @@ buildGoModule rec {
   ldflags = [ "-s" "-w" ];
 
   meta = with lib; {
-    description = "A tool for adding new lines to files, skipping duplicates";
+    description = "Tool for adding new lines to files, skipping duplicates";
     mainProgram = "anew";
     homepage = "https://github.com/tomnomnom/anew";
     license = licenses.mit;
diff --git a/pkgs/tools/text/angle-grinder/default.nix b/pkgs/tools/text/angle-grinder/default.nix
index dd34316803e16..322cd12463c85 100644
--- a/pkgs/tools/text/angle-grinder/default.nix
+++ b/pkgs/tools/text/angle-grinder/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "angle-grinder";
-  version = "0.19.2";
+  version = "0.19.4";
 
   src = fetchFromGitHub {
     owner = "rcoh";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-/OYIG4s0hH/bkAPxt/x5qHopDIoMN9AJLQ8Sx8USgsM=";
+    sha256 = "sha256-1SZho04qJcNi84ZkDmxoVkLx9VJX04QINZQ6ZEoCq+c=";
   };
 
-  cargoHash = "sha256-pOW2jFQxaf2zQWL5+URvHVeCAvSI0u8iALPO5fCoqmI=";
+  cargoHash = "sha256-+l0+zaZSPOk4gJLHZ9LFFbYlZ5vkS68Jg2dWPHSkzKw=";
 
   meta = with lib; {
     description = "Slice and dice logs on the command line";
diff --git a/pkgs/tools/text/ascii/default.nix b/pkgs/tools/text/ascii/default.nix
index ad9884faa17d6..6a280bc516f96 100644
--- a/pkgs/tools/text/ascii/default.nix
+++ b/pkgs/tools/text/ascii/default.nix
@@ -1,14 +1,20 @@
-{ lib, stdenv, fetchurl }:
+{ lib, stdenv, fetchFromGitLab, gitUpdater, asciidoctor }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "ascii";
-  version = "3.20";
+  version = "3.30";
 
-  src = fetchurl {
-    url = "http://www.catb.org/~esr/ascii/${pname}-${version}.tar.gz";
-    sha256 = "sha256-nm5X6mDUGagDoCTOY2YlTvtxYma4Tu3VjNmA2rzBFnQ=";
+  src = fetchFromGitLab {
+    owner = "esr";
+    repo = "ascii";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-TE9YR5Va9tXaf2ZyNxz7d8lZRTgnD4Lz7FyqRDl1HNY=";
   };
 
+  nativeBuildInputs = [
+    asciidoctor
+  ];
+
   prePatch = ''
     sed -i -e "s|^PREFIX = .*|PREFIX = $out|" Makefile
   '';
@@ -17,12 +23,15 @@ stdenv.mkDerivation rec {
     mkdir -vp "$out/bin" "$out/share/man/man1"
   '';
 
+  passthru.updateScript = gitUpdater { };
+
   meta = with lib; {
     description = "Interactive ASCII name and synonym chart";
     mainProgram = "ascii";
     homepage = "http://www.catb.org/~esr/ascii/";
-    license = licenses.bsd3;
+    changelog = "https://gitlab.com/esr/ascii/-/blob/${finalAttrs.version}/NEWS.adoc";
+    license = licenses.bsd2;
     platforms = platforms.all;
     maintainers = [ maintainers.bjornfor ];
   };
-}
+})
diff --git a/pkgs/tools/text/autocorrect/default.nix b/pkgs/tools/text/autocorrect/default.nix
index 2e51672363f43..19e69a468ffd6 100644
--- a/pkgs/tools/text/autocorrect/default.nix
+++ b/pkgs/tools/text/autocorrect/default.nix
@@ -27,7 +27,7 @@ rustPlatform.buildRustPackage rec {
   passthru.updateScript = ./update.sh;
 
   meta = with lib; {
-    description = "A linter and formatter for help you improve copywriting, to correct spaces, punctuations between CJK (Chinese, Japanese, Korean)";
+    description = "Linter and formatter for help you improve copywriting, to correct spaces, punctuations between CJK (Chinese, Japanese, Korean)";
     mainProgram = "autocorrect";
     homepage = "https://huacnlee.github.io/autocorrect";
     changelog = "https://github.com/huacnlee/autocorrect/releases/tag/v${version}";
diff --git a/pkgs/tools/text/bashblog/default.nix b/pkgs/tools/text/bashblog/default.nix
index 0159e20de99ad..0c43e6eecf1ce 100644
--- a/pkgs/tools/text/bashblog/default.nix
+++ b/pkgs/tools/text/bashblog/default.nix
@@ -53,11 +53,11 @@ in stdenv.mkDerivation {
   '';
 
   meta = with lib; {
-    description = "A single Bash script to create blogs";
+    description = "Single Bash script to create blogs";
     mainProgram = "bashblog";
     homepage = "https://github.com/cfenollosa/bashblog";
     license = licenses.gpl3Only;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ wolfangaukang ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/tools/text/boxes/default.nix b/pkgs/tools/text/boxes/default.nix
index 2f1f450ada15d..68e5b9c7ddca0 100644
--- a/pkgs/tools/text/boxes/default.nix
+++ b/pkgs/tools/text/boxes/default.nix
@@ -36,7 +36,7 @@ gccStdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "A command line program which draws, removes, and repairs ASCII art boxes";
+    description = "Command line program which draws, removes, and repairs ASCII art boxes";
     mainProgram = "boxes";
     homepage = "https://boxes.thomasjensen.com";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/text/cconv/default.nix b/pkgs/tools/text/cconv/default.nix
index 86aaf2d5f7c6b..872db0a44970e 100644
--- a/pkgs/tools/text/cconv/default.nix
+++ b/pkgs/tools/text/cconv/default.nix
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ libiconv ];
 
   meta = with lib; {
-    description = "A iconv based simplified-traditional chinese conversion tool";
+    description = "Iconv based simplified-traditional chinese conversion tool";
     mainProgram = "cconv";
     homepage = "https://github.com/xiaoyjy/cconv";
     license = licenses.mit;
diff --git a/pkgs/tools/text/choose/default.nix b/pkgs/tools/text/choose/default.nix
index b765a40f5496f..c3afeb492280f 100644
--- a/pkgs/tools/text/choose/default.nix
+++ b/pkgs/tools/text/choose/default.nix
@@ -17,7 +17,7 @@ rustPlatform.buildRustPackage rec {
   cargoSha256 = "sha256-0INC0LFzlnFnt5pCiU4xePxU8a6GiU1L8bg7zcuFl2k=";
 
   meta = with lib; {
-    description = "A human-friendly and fast alternative to cut and (sometimes) awk";
+    description = "Human-friendly and fast alternative to cut and (sometimes) awk";
     mainProgram = "choose";
     homepage = "https://github.com/theryangeary/choose";
     license = licenses.gpl3;
diff --git a/pkgs/tools/text/chroma/default.nix b/pkgs/tools/text/chroma/default.nix
index 2b59831529dbd..e577451af1657 100644
--- a/pkgs/tools/text/chroma/default.nix
+++ b/pkgs/tools/text/chroma/default.nix
@@ -30,7 +30,7 @@ buildGoModule rec {
 
   meta = with lib; {
     homepage = "https://github.com/alecthomas/chroma";
-    description = "A general purpose syntax highlighter in pure Go";
+    description = "General purpose syntax highlighter in pure Go";
     license = licenses.mit;
     maintainers = [ maintainers.sternenseemann ];
     mainProgram = "chroma";
diff --git a/pkgs/tools/text/clima/default.nix b/pkgs/tools/text/clima/default.nix
index cfa39590a7144..65483e1152699 100644
--- a/pkgs/tools/text/clima/default.nix
+++ b/pkgs/tools/text/clima/default.nix
@@ -23,7 +23,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = with lib; {
-    description = "A minimal viewer for Termimad";
+    description = "Minimal viewer for Termimad";
     homepage = "https://github.com/Canop/clima";
     changelog = "https://github.com/Canop/clima/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/cmigemo/default.nix b/pkgs/tools/text/cmigemo/default.nix
index 09810f1e08368..20cee369e73f2 100644
--- a/pkgs/tools/text/cmigemo/default.nix
+++ b/pkgs/tools/text/cmigemo/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation {
   installTargets = [ (if stdenv.isDarwin then "osx-install" else "gcc-install") ];
 
   meta = with lib; {
-    description = "A tool that supports Japanese incremental search with Romaji";
+    description = "Tool that supports Japanese incremental search with Romaji";
     mainProgram = "cmigemo";
     homepage = "https://www.kaoriya.net/software/cmigemo";
     license = licenses.mit;
diff --git a/pkgs/tools/text/comrak/default.nix b/pkgs/tools/text/comrak/default.nix
index f850302a9af87..05eee8cc81368 100644
--- a/pkgs/tools/text/comrak/default.nix
+++ b/pkgs/tools/text/comrak/default.nix
@@ -14,7 +14,7 @@ rustPlatform.buildRustPackage rec {
   cargoHash = "sha256-rbGl7jQABZu4aMpzlv49uMuKmw7U+9zLS6pAJIJajR8=";
 
   meta = with lib; {
-    description = "A CommonMark-compatible GitHub Flavored Markdown parser and formatter";
+    description = "CommonMark-compatible GitHub Flavored Markdown parser and formatter";
     mainProgram = "comrak";
     homepage = "https://github.com/kivikakk/comrak";
     changelog = "https://github.com/kivikakk/comrak/blob/${version}/changelog.txt";
diff --git a/pkgs/tools/text/convertlit/default.nix b/pkgs/tools/text/convertlit/default.nix
index 751b969e4469f..417007fbd3ba9 100644
--- a/pkgs/tools/text/convertlit/default.nix
+++ b/pkgs/tools/text/convertlit/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     homepage = "http://www.convertlit.com/";
-    description = "A tool for converting Microsoft Reader ebooks to more open formats";
+    description = "Tool for converting Microsoft Reader ebooks to more open formats";
     mainProgram = "clit";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
diff --git a/pkgs/tools/text/crowdin-cli/default.nix b/pkgs/tools/text/crowdin-cli/default.nix
index b7b161427f02d..d5685a9c56c7c 100644
--- a/pkgs/tools/text/crowdin-cli/default.nix
+++ b/pkgs/tools/text/crowdin-cli/default.nix
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     mainProgram = "crowdin";
     homepage = "https://github.com/crowdin/crowdin-cli/";
-    description = "A command-line client for the Crowdin API";
+    description = "Command-line client for the Crowdin API";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     maintainers = with maintainers; [ DamienCassou ];
diff --git a/pkgs/tools/text/csvdiff/default.nix b/pkgs/tools/text/csvdiff/default.nix
index b7e68a7091224..90faa060bed09 100644
--- a/pkgs/tools/text/csvdiff/default.nix
+++ b/pkgs/tools/text/csvdiff/default.nix
@@ -18,7 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     homepage = "https://aswinkarthik.github.io/csvdiff/";
-    description = "A fast diff tool for comparing csv files";
+    description = "Fast diff tool for comparing csv files";
     mainProgram = "csvdiff";
     license = licenses.mit;
     maintainers = with maintainers; [ turion ];
diff --git a/pkgs/tools/text/csview/default.nix b/pkgs/tools/text/csview/default.nix
index 747847a1bee20..1aa63333d89c1 100644
--- a/pkgs/tools/text/csview/default.nix
+++ b/pkgs/tools/text/csview/default.nix
@@ -14,7 +14,7 @@ rustPlatform.buildRustPackage rec {
   cargoHash = "sha256-/pswnb2vNtw8zSoWuC7oZPJ4yxVuy1c4ES1NUHhnG6I=";
 
   meta = with lib; {
-    description = "A high performance csv viewer with cjk/emoji support";
+    description = "High performance csv viewer with cjk/emoji support";
     mainProgram = "csview";
     homepage = "https://github.com/wfxr/csview";
     license = with licenses; [ mit /* or */ asl20 ];
diff --git a/pkgs/tools/text/d2/default.nix b/pkgs/tools/text/d2/default.nix
index d5cef467f5072..8a66411022694 100644
--- a/pkgs/tools/text/d2/default.nix
+++ b/pkgs/tools/text/d2/default.nix
@@ -47,7 +47,7 @@ buildGoModule rec {
   };
 
   meta = with lib; {
-    description = "A modern diagram scripting language that turns text to diagrams";
+    description = "Modern diagram scripting language that turns text to diagrams";
     homepage = "https://d2lang.com";
     license = licenses.mpl20;
     maintainers = with maintainers; [ dit7ya kashw2 ];
diff --git a/pkgs/tools/text/diffsitter/default.nix b/pkgs/tools/text/diffsitter/default.nix
index 8e0a6bbc3d156..e13ad3bff23bb 100644
--- a/pkgs/tools/text/diffsitter/default.nix
+++ b/pkgs/tools/text/diffsitter/default.nix
@@ -73,7 +73,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     homepage = "https://github.com/afnanenayet/diffsitter";
-    description = "A tree-sitter based AST difftool to get meaningful semantic diffs";
+    description = "Tree-sitter based AST difftool to get meaningful semantic diffs";
     license = licenses.mit;
     maintainers = with maintainers; [ bbigras ];
   };
diff --git a/pkgs/tools/text/difftastic/Cargo.lock b/pkgs/tools/text/difftastic/Cargo.lock
new file mode 100644
index 0000000000000..b9d4208b8e38b
--- /dev/null
+++ b/pkgs/tools/text/difftastic/Cargo.lock
@@ -0,0 +1,1263 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e"
+dependencies = [
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
+
+[[package]]
+name = "bstr"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
+dependencies = [
+ "memchr",
+ "regex-automata 0.4.6",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "cc"
+version = "1.0.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "clap_lex",
+ "indexmap 1.9.3",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "terminal_size",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "const_format"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.5.0",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "difftastic"
+version = "0.58.0"
+dependencies = [
+ "assert_cmd",
+ "bumpalo",
+ "cc",
+ "clap",
+ "const_format",
+ "crossterm",
+ "glob",
+ "hashbrown 0.14.3",
+ "home",
+ "humansize",
+ "ignore",
+ "itertools 0.11.0",
+ "lazy_static",
+ "libc",
+ "libmimalloc-sys",
+ "line-numbers",
+ "log",
+ "mimalloc",
+ "owo-colors",
+ "predicates",
+ "pretty_assertions",
+ "pretty_env_logger",
+ "radix-heap",
+ "rayon",
+ "regex",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "strsim",
+ "strum",
+ "tree-sitter",
+ "tree_magic_mini",
+ "typed-arena",
+ "unicode-width",
+ "version_check",
+ "wu-diff",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"
+
+[[package]]
+name = "env_logger"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata 0.4.6",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "humansize"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils",
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.9",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
+dependencies = [
+ "hermit-abi 0.3.9",
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7705fc40f6ed493f73584abbb324e74f96b358ff60dfe5659a0f8fc12c590a69"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "line-numbers"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b25f5068853805faa3c19f44d0c401446e4eb3f47cc808fa331eec30f0ba35c"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "mimalloc"
+version = "0.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0dfa131390c2f6bdb3242f65ff271fcdaca5ff7b6c08f28398be7f2280e3926"
+dependencies = [
+ "libmimalloc-sys",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "mio"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.2.6",
+]
+
+[[package]]
+name = "predicates"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c"
+dependencies = [
+ "difflib",
+ "float-cmp",
+ "itertools 0.10.5",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "pretty_env_logger"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c"
+dependencies = [
+ "env_logger",
+ "log",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radix-heap"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ffec9df464013295b499298811e6a3de31bf8128092135826517db12dee601"
+
+[[package]]
+name = "rayon"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.3.9",
+ "regex-syntax 0.7.5",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.5",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.197"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.197"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "textwrap"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
+dependencies = [
+ "terminal_size",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tree-sitter"
+version = "0.20.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d"
+dependencies = [
+ "cc",
+ "regex",
+]
+
+[[package]]
+name = "tree_magic_mini"
+version = "3.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ee137597cdb361b55a4746983e4ac1b35ab6024396a419944ad473bb915265"
+dependencies = [
+ "fnv",
+ "home",
+ "memchr",
+ "nom",
+ "once_cell",
+ "petgraph",
+]
+
+[[package]]
+name = "typed-arena"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.4",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.4",
+ "windows_aarch64_msvc 0.52.4",
+ "windows_i686_gnu 0.52.4",
+ "windows_i686_msvc 0.52.4",
+ "windows_x86_64_gnu 0.52.4",
+ "windows_x86_64_gnullvm 0.52.4",
+ "windows_x86_64_msvc 0.52.4",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
+
+[[package]]
+name = "wu-diff"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e3e6735fcde06432870db8dc9d7e3ab1b93727c14eaef329969426299f28893"
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/pkgs/tools/text/difftastic/default.nix b/pkgs/tools/text/difftastic/default.nix
index c93bfe6442b61..5b14aa3225827 100644
--- a/pkgs/tools/text/difftastic/default.nix
+++ b/pkgs/tools/text/difftastic/default.nix
@@ -1,10 +1,20 @@
 { lib
+, fetchpatch
 , rustPlatform
 , fetchFromGitHub
 , testers
 , difftastic
 }:
 
+let
+  mimallocPatch = fetchpatch {
+    # fixes compilation error on x86_64-darwin
+    # remove after update to libmimalloc-sys >= 0.1.29
+    # (fixed in mimalloc >= 1.7.6 which is included with libmimalloc-sys >= 0.1.29)
+    url = "https://github.com/microsoft/mimalloc/commit/40e0507a5959ee218f308d33aec212c3ebeef3bb.patch";
+    hash = "sha256-DK0LqsVXXiEVQSQCxZ5jyZMg0UJJx9a/WxzCroYSHZc=";
+  };
+in
 rustPlatform.buildRustPackage rec {
   pname = "difftastic";
   version = "0.58.0";
@@ -16,17 +26,22 @@ rustPlatform.buildRustPackage rec {
     hash = "sha256-PTc8/NhWsLcKJj+9ebV/YaWEmyOWKJCYUjmVbr4z2SY=";
   };
 
-  cargoSha256 = "sha256-wtWJ32bBoCmx+eGkrOk8o0OQFMhGYZEBEDI1oHn3Zuw=";
+  cargoLock.lockFile = ./Cargo.lock;
 
   # skip flaky tests
   checkFlags = [
     "--skip=options::tests::test_detect_display_width"
   ];
 
+  postPatch = ''
+    patch -d $cargoDepsCopy/libmimalloc-sys-0.1.24/c_src/mimalloc \
+      -p1 < ${mimallocPatch}
+  '';
+
   passthru.tests.version = testers.testVersion { package = difftastic; };
 
   meta = with lib; {
-    description = "A syntax-aware diff";
+    description = "Syntax-aware diff";
     homepage = "https://github.com/Wilfred/difftastic";
     changelog = "https://github.com/Wilfred/difftastic/blob/${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/text/diffutils/default.nix b/pkgs/tools/text/diffutils/default.nix
index 8c4a160d4b1e5..6c1bc8bf01f13 100644
--- a/pkgs/tools/text/diffutils/default.nix
+++ b/pkgs/tools/text/diffutils/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, xz, coreutils ? null }:
+{ lib, stdenv, fetchurl, updateAutotoolsGnuConfigScriptsHook, xz, coreutils ? null }:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "info" ];
 
-  nativeBuildInputs = [ (lib.getBin xz) ];
+  nativeBuildInputs = [ updateAutotoolsGnuConfigScriptsHook (lib.getBin xz) ];
   /* If no explicit coreutils is given, use the one from stdenv. */
   buildInputs = [ coreutils ];
 
diff --git a/pkgs/tools/text/epub2txt2/default.nix b/pkgs/tools/text/epub2txt2/default.nix
index 80a3ebde74547..586079473d5eb 100644
--- a/pkgs/tools/text/epub2txt2/default.nix
+++ b/pkgs/tools/text/epub2txt2/default.nix
@@ -2,19 +2,19 @@
 
 stdenv.mkDerivation rec {
   pname = "epub2txt2";
-  version = "2.06";
+  version = "2.08";
 
   src = fetchFromGitHub {
     owner = "kevinboone";
     repo = pname;
     rev = "refs/tags/v${version}";
-    sha256 = "sha256-zzcig5XNh9TqUHginsfoC47WrKavqi6k6ezir+OOMJk=";
+    sha256 = "sha256-YFaXkcIdat2cn1ITYFyG1hxbbepqcxvyJ6ZzDo4dVYI=";
   };
 
   makeFlags = [ "CC:=$(CC)" "PREFIX:=$(out)" ];
 
   meta = {
-    description = "A simple command-line utility for Linux, for extracting text from EPUB documents";
+    description = "Simple command-line utility for Linux, for extracting text from EPUB documents";
     homepage = "https://github.com/kevinboone/epub2txt2";
     license = lib.licenses.gpl3Only;
     platforms = lib.platforms.unix;
diff --git a/pkgs/tools/text/fanficfare/default.nix b/pkgs/tools/text/fanficfare/default.nix
index f4cf0f68b45b1..9aee49e391d9f 100644
--- a/pkgs/tools/text/fanficfare/default.nix
+++ b/pkgs/tools/text/fanficfare/default.nix
@@ -1,13 +1,13 @@
 { lib, python3Packages, fetchPypi }:
 
 python3Packages.buildPythonApplication rec {
-  pname = "FanFicFare";
-  version = "4.33.0";
+  pname = "fanficfare";
+  version = "4.35.0";
   pyproject = true;
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-1s3YeI4deej+lkDXtFzfBOtATY+jx+KB7JAnLUDZK8w=";
+    hash = "sha256-hPBURlsrr/7c26YFZo5UT7PTs8s+D8BXxjU/uposHjQ=";
   };
 
   nativeBuildInputs = with python3Packages; [
diff --git a/pkgs/tools/text/fastmod/default.nix b/pkgs/tools/text/fastmod/default.nix
index 53d68a7723a6a..e7b2f3b107c97 100644
--- a/pkgs/tools/text/fastmod/default.nix
+++ b/pkgs/tools/text/fastmod/default.nix
@@ -21,7 +21,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];
 
   meta = with lib; {
-    description = "A utility that makes sweeping changes to large, shared code bases";
+    description = "Utility that makes sweeping changes to large, shared code bases";
     mainProgram = "fastmod";
     homepage = "https://github.com/facebookincubator/fastmod";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/frawk/default.nix b/pkgs/tools/text/frawk/default.nix
index 46f73ebd0b9cb..2b9f2e0beaa8e 100644
--- a/pkgs/tools/text/frawk/default.nix
+++ b/pkgs/tools/text/frawk/default.nix
@@ -35,7 +35,7 @@ rustPlatform.buildRustPackage rec {
   doCheck = false;
 
   meta = with lib; {
-    description = "A small programming language for writing short programs processing textual data";
+    description = "Small programming language for writing short programs processing textual data";
     mainProgram = "frawk";
     homepage = "https://github.com/ezrosent/frawk";
     changelog = "https://github.com/ezrosent/frawk/releases/tag/v${version}";
diff --git a/pkgs/tools/text/frogmouth/default.nix b/pkgs/tools/text/frogmouth/default.nix
index e7c9916c13390..b2551b6387d68 100644
--- a/pkgs/tools/text/frogmouth/default.nix
+++ b/pkgs/tools/text/frogmouth/default.nix
@@ -35,7 +35,7 @@ python3.pkgs.buildPythonApplication rec {
   pythonImportsCheck = [ "frogmouth" ];
 
   meta = with lib; {
-    description = "A Markdown browser for your terminal";
+    description = "Markdown browser for your terminal";
     mainProgram = "frogmouth";
     homepage = "https://github.com/Textualize/frogmouth";
     changelog = "https://github.com/Textualize/frogmouth/blob/${src.rev}/ChangeLog.md";
diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix
index d85880e82e155..8857fa29d1c63 100644
--- a/pkgs/tools/text/gawk/default.nix
+++ b/pkgs/tools/text/gawk/default.nix
@@ -1,4 +1,5 @@
 { lib, stdenv, fetchurl
+, runtimeShellPackage
 # TODO: links -lsigsegv but loses the reference for some reason
 , withSigsegv ? (false && stdenv.hostPlatform.system != "x86_64-cygwin"), libsigsegv
 , interactive ? false, readline
@@ -39,7 +40,9 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ autoreconfHook ]
     ++ lib.optional (doCheck && stdenv.isLinux) glibcLocales;
 
-  buildInputs = lib.optional withSigsegv libsigsegv
+  buildInputs = [
+    runtimeShellPackage
+  ] ++ lib.optional withSigsegv libsigsegv
     ++ lib.optional interactive readline
     ++ lib.optional stdenv.isDarwin locale;
 
diff --git a/pkgs/tools/text/glogg/default.nix b/pkgs/tools/text/glogg/default.nix
index a83baf4aa7619..7a6562aab1430 100644
--- a/pkgs/tools/text/glogg/default.nix
+++ b/pkgs/tools/text/glogg/default.nix
@@ -28,7 +28,7 @@ mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "The fast, smart log explorer";
+    description = "Fast, smart log explorer";
     mainProgram = "glogg";
     longDescription = ''
       A multi-platform GUI application to browse and search through long or complex log files. It is designed with programmers and system administrators in mind. glogg can be seen as a graphical, interactive combination of grep and less.
diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix
index 5df81274c6a5d..7298fe881bea1 100644
--- a/pkgs/tools/text/gnugrep/default.nix
+++ b/pkgs/tools/text/gnugrep/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, glibcLocales, fetchurl, pcre2, libiconv, perl }:
+{ lib, stdenv, updateAutotoolsGnuConfigScriptsHook, glibcLocales, fetchurl, pcre2, libiconv, perl, runtimeShellPackage }:
 
 # Note: this package is used for bootstrapping fetchurl, and thus
 # cannot use fetchpatch! All mutable patches (generated by GitHub or
@@ -26,7 +26,8 @@ stdenv.mkDerivation {
   nativeCheckInputs = [ perl glibcLocales ];
   outputs = [ "out" "info" ]; # the man pages are rather small
 
-  buildInputs = [ pcre2 libiconv ];
+  nativeBuildInputs = [ updateAutotoolsGnuConfigScriptsHook ];
+  buildInputs = [ pcre2 libiconv runtimeShellPackage ];
 
   # cygwin: FAIL: multibyte-white-space
   # freebsd: FAIL mb-non-UTF8-performance
diff --git a/pkgs/tools/text/gnused/default.nix b/pkgs/tools/text/gnused/default.nix
index f493e4f358d65..bc736f418725b 100644
--- a/pkgs/tools/text/gnused/default.nix
+++ b/pkgs/tools/text/gnused/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, perl }:
+{ lib, stdenv, fetchurl, updateAutotoolsGnuConfigScriptsHook, perl }:
 
 stdenv.mkDerivation rec {
   pname = "gnused";
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
 
   outputs = [ "out" "info" ];
 
-  nativeBuildInputs = [ perl ];
+  nativeBuildInputs = [ updateAutotoolsGnuConfigScriptsHook perl ];
   preConfigure = "patchShebangs ./build-aux/help2man";
 
   # Prevents attempts of running 'help2man' on cross-built binaries.
diff --git a/pkgs/tools/text/goawk/default.nix b/pkgs/tools/text/goawk/default.nix
index 4d84d133775e3..70c9fb8d55315 100644
--- a/pkgs/tools/text/goawk/default.nix
+++ b/pkgs/tools/text/goawk/default.nix
@@ -34,7 +34,7 @@ buildGoModule rec {
   doCheck = (stdenv.system != "aarch64-darwin");
 
   meta = with lib; {
-    description = "A POSIX-compliant AWK interpreter written in Go";
+    description = "POSIX-compliant AWK interpreter written in Go";
     homepage = "https://benhoyt.com/writings/goawk/";
     license = licenses.mit;
     mainProgram = "goawk";
diff --git a/pkgs/tools/text/grin/default.nix b/pkgs/tools/text/grin/default.nix
index 3e3763d9ef719..5217451a984be 100644
--- a/pkgs/tools/text/grin/default.nix
+++ b/pkgs/tools/text/grin/default.nix
@@ -27,7 +27,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = {
     homepage = "https://github.com/matthew-brett/grin";
-    description = "A grep program configured the way I like it";
+    description = "Grep program configured the way I like it";
     platforms = lib.platforms.all;
     maintainers = [ lib.maintainers.sjagoe ];
   };
diff --git a/pkgs/tools/text/groff/default.nix b/pkgs/tools/text/groff/default.nix
index df06292c4f3ef..6e10144bb587c 100644
--- a/pkgs/tools/text/groff/default.nix
+++ b/pkgs/tools/text/groff/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, fetchpatch, perl
+{ lib, stdenv, fetchurl, perl
 , enableGhostscript ? false
 , ghostscript, gawk, libX11, libXaw, libXt, libXmu # for postscript and html output
 , enableHtml ? false, psutils, netpbm # for html output
diff --git a/pkgs/tools/text/gucci/default.nix b/pkgs/tools/text/gucci/default.nix
index 2f448450661bd..c4e0ef81503da 100644
--- a/pkgs/tools/text/gucci/default.nix
+++ b/pkgs/tools/text/gucci/default.nix
@@ -29,7 +29,7 @@ buildGoModule rec {
   ];
 
   meta = with lib; {
-    description = "A simple CLI templating tool written in golang";
+    description = "Simple CLI templating tool written in golang";
     mainProgram = "gucci";
     homepage = "https://github.com/noqcks/gucci";
     license = licenses.mit;
diff --git a/pkgs/tools/text/hck/default.nix b/pkgs/tools/text/hck/default.nix
index fe8aa63c0cff8..1a8238059e4f1 100644
--- a/pkgs/tools/text/hck/default.nix
+++ b/pkgs/tools/text/hck/default.nix
@@ -20,7 +20,7 @@ rustPlatform.buildRustPackage rec {
   nativeBuildInputs = [ cmake ];
 
   meta = with lib; {
-    description = "A close to drop in replacement for cut that can use a regex delimiter instead of a fixed string";
+    description = "Close to drop in replacement for cut that can use a regex delimiter instead of a fixed string";
     homepage = "https://github.com/sstadick/hck";
     changelog = "https://github.com/sstadick/hck/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ mit /* or */ unlicense ];
diff --git a/pkgs/tools/text/hcledit/default.nix b/pkgs/tools/text/hcledit/default.nix
index 1d0d4fd6464ab..86c1e226fd0e9 100644
--- a/pkgs/tools/text/hcledit/default.nix
+++ b/pkgs/tools/text/hcledit/default.nix
@@ -17,7 +17,7 @@ buildGoModule rec {
   vendorHash = "sha256-huDM8kPA6vQcoJTxiWzVFZKHrTKw1ip32hMZJYZM0og=";
 
   meta = with lib; {
-    description = "A command line editor for HCL";
+    description = "Command line editor for HCL";
     mainProgram = "hcledit";
     homepage = "https://github.com/minamijoyo/hcledit";
     license = licenses.mit;
diff --git a/pkgs/tools/text/highlight/default.nix b/pkgs/tools/text/highlight/default.nix
index d26d4fcc84238..312c849214995 100644
--- a/pkgs/tools/text/highlight/default.nix
+++ b/pkgs/tools/text/highlight/default.nix
@@ -3,13 +3,13 @@
 let
   self = stdenv.mkDerivation rec {
     pname = "highlight";
-    version = "4.11";
+    version = "4.12";
 
     src = fetchFromGitLab {
       owner = "saalen";
       repo = "highlight";
       rev = "v${version}";
-      sha256 = "sha256-8QWcpSYkzw62XFyIqisM2x1AOqzVUPUYgs5bPA4liSw=";
+      sha256 = "sha256-TFMU9owxBGrrbatk7Jj9xP8OEJNjXnjbwnW6Xq34awI=";
     };
 
     enableParallelBuilding = true;
diff --git a/pkgs/tools/text/html-tidy/default.nix b/pkgs/tools/text/html-tidy/default.nix
index 1f9c04b7c9dbb..16e6035cef89e 100644
--- a/pkgs/tools/text/html-tidy/default.nix
+++ b/pkgs/tools/text/html-tidy/default.nix
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
   # https://github.com/htacg/tidy-html5/issues/326#issuecomment-160322107
 
   meta = with lib; {
-    description = "A HTML validator and `tidier'";
+    description = "HTML validator and `tidier'";
     longDescription = ''
       HTML Tidy is a command-line tool and C library that can be
       used to validate and fix HTML data.
diff --git a/pkgs/tools/text/ispell/default.nix b/pkgs/tools/text/ispell/default.nix
index 2f7b25d5fa255..3dea94d0912b7 100644
--- a/pkgs/tools/text/ispell/default.nix
+++ b/pkgs/tools/text/ispell/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "An interactive spell-checking program for Unix";
+    description = "Interactive spell-checking program for Unix";
     homepage = "https://www.cs.hmc.edu/~geoff/ispell.html";
     license = licenses.free;
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/jen/default.nix b/pkgs/tools/text/jen/default.nix
index 0ed0548c0d506..cfd8298c37258 100644
--- a/pkgs/tools/text/jen/default.nix
+++ b/pkgs/tools/text/jen/default.nix
@@ -21,7 +21,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = with lib; {
-    description = "A simple CLI generation tool for creating large datasets";
+    description = "Simple CLI generation tool for creating large datasets";
     mainProgram = "jen";
     homepage = "https://github.com/whitfin/jen";
     license = licenses.mit;
diff --git a/pkgs/tools/text/jotdown/default.nix b/pkgs/tools/text/jotdown/default.nix
index 769b5e2968874..c3b61b4f739bf 100644
--- a/pkgs/tools/text/jotdown/default.nix
+++ b/pkgs/tools/text/jotdown/default.nix
@@ -17,7 +17,7 @@ rustPlatform.buildRustPackage rec {
   cargoHash = "sha256-bkMJ7ApM+GsshwIFuYsH19CnU6ebq0GfwQvVp9QD46A=";
 
   meta = with lib; {
-    description = "A minimal Djot CLI";
+    description = "Minimal Djot CLI";
     mainProgram = "jotdown";
     homepage = "https://github.com/hellux/jotdown";
     changelog = "https://github.com/hellux/jotdown/blob/${src.rev}/CHANGELOG.md";
diff --git a/pkgs/tools/text/jumanpp/default.nix b/pkgs/tools/text/jumanpp/default.nix
index af141c873b3b4..382b2f319c142 100644
--- a/pkgs/tools/text/jumanpp/default.nix
+++ b/pkgs/tools/text/jumanpp/default.nix
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
     ++ lib.optional stdenv.isDarwin libiconv;
 
   meta = with lib; {
-    description = "A Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
+    description = "Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
     mainProgram = "jumanpp";
     longDescription = ''
       JUMAN++ is a new morphological analyser that considers semantic
diff --git a/pkgs/tools/text/languagetool/default.nix b/pkgs/tools/text/languagetool/default.nix
index 58525bdeae4c7..df634c510c8a8 100644
--- a/pkgs/tools/text/languagetool/default.nix
+++ b/pkgs/tools/text/languagetool/default.nix
@@ -36,6 +36,6 @@ stdenv.mkDerivation rec {
     license = licenses.lgpl21Plus;
     maintainers = with maintainers; [ edwtjo ];
     platforms = jre.meta.platforms;
-    description = "A proofreading program for English, French German, Polish, and more";
+    description = "Proofreading program for English, French German, Polish, and more";
   };
 }
diff --git a/pkgs/tools/text/link-grammar/default.nix b/pkgs/tools/text/link-grammar/default.nix
index 0406c41d1a889..68d38d7505d48 100644
--- a/pkgs/tools/text/link-grammar/default.nix
+++ b/pkgs/tools/text/link-grammar/default.nix
@@ -54,7 +54,7 @@ link-grammar = stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    description = "A Grammar Checking library";
+    description = "Grammar Checking library";
     homepage = "https://www.abisource.com/projects/link-grammar/";
     changelog = "https://github.com/opencog/link-grammar/blob/link-grammar-${version}/ChangeLog";
     license = licenses.lgpl21Only;
diff --git a/pkgs/tools/text/mark/default.nix b/pkgs/tools/text/mark/default.nix
index ca42b2687edc9..8aaa5c09b6706 100644
--- a/pkgs/tools/text/mark/default.nix
+++ b/pkgs/tools/text/mark/default.nix
@@ -16,7 +16,7 @@ buildGoModule rec {
   ldflags = [ "-s" "-w" "-X main.version=${version}" ];
 
   meta = with lib; {
-    description = "A tool for syncing your markdown documentation with Atlassian Confluence pages";
+    description = "Tool for syncing your markdown documentation with Atlassian Confluence pages";
     mainProgram = "mark";
     homepage = "https://github.com/kovetskiy/mark";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/markdownlint-cli2/default.nix b/pkgs/tools/text/markdownlint-cli2/default.nix
index 86e1338a09ef3..7ffacaa08db75 100644
--- a/pkgs/tools/text/markdownlint-cli2/default.nix
+++ b/pkgs/tools/text/markdownlint-cli2/default.nix
@@ -24,7 +24,7 @@ buildNpmPackage rec {
 
   meta = {
     changelog = "https://github.com/DavidAnson/markdownlint-cli2/blob/${src.rev}/CHANGELOG.md";
-    description = "A fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the markdownlint library";
+    description = "Fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the markdownlint library";
     homepage = "https://github.com/DavidAnson/markdownlint-cli2";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ natsukium ];
diff --git a/pkgs/tools/text/mawk/default.nix b/pkgs/tools/text/mawk/default.nix
index 7af3634051026..700b20c2178c8 100644
--- a/pkgs/tools/text/mawk/default.nix
+++ b/pkgs/tools/text/mawk/default.nix
@@ -2,14 +2,14 @@
 
 stdenv.mkDerivation rec {
   pname = "mawk";
-  version = "1.3.4-20240123";
+  version = "1.3.4-20240622";
 
   src = fetchurl {
     urls = [
       "ftp://ftp.invisible-island.net/mawk/mawk-${version}.tgz"
       "https://invisible-mirror.net/archives/mawk/mawk-${version}.tgz"
     ];
-    sha256 = "sha256-qOMZqDdEsfH7aYjfoYnWGIf4ZukUDMmknrADsrBlXog=";
+    sha256 = "sha256-TpF+h6ep+692mVeEpLC13A3ZVLl30JgwMPePagexp2U=";
   };
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
diff --git a/pkgs/tools/text/mdbook-admonish/default.nix b/pkgs/tools/text/mdbook-admonish/default.nix
index b4407c5dbbc6c..1a781053811f3 100644
--- a/pkgs/tools/text/mdbook-admonish/default.nix
+++ b/pkgs/tools/text/mdbook-admonish/default.nix
@@ -2,21 +2,21 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "mdbook-admonish";
-  version = "1.17.0";
+  version = "1.18.0";
 
   src = fetchFromGitHub {
     owner = "tommilligan";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-Pks33QDAPocUjZTWRS69g9ZkubMqzQezYtJb0UNnd3Q=";
+    hash = "sha256-GNQIOjgHCt3XPCzF0RjV9YStI8psLdHhTPuTkdgx8vA=";
   };
 
-  cargoHash = "sha256-HXUPdur45CkrzQrCi8YRlyKjk++GRFCcJwzfoX2ix+M=";
+  cargoHash = "sha256-CG4WvAFDqtRUjF4kJ29363F6jWRChIXgT5i6ozwV4pw=";
 
   buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   meta = with lib; {
-    description = "A preprocessor for mdbook to add Material Design admonishments";
+    description = "Preprocessor for mdbook to add Material Design admonishments";
     mainProgram = "mdbook-admonish";
     license = licenses.mit;
     maintainers = with maintainers; [ jmgilman Frostman matthiasbeyer ];
diff --git a/pkgs/tools/text/mdbook-footnote/default.nix b/pkgs/tools/text/mdbook-footnote/default.nix
index 01777669c4afa..7beeb3e33c635 100644
--- a/pkgs/tools/text/mdbook-footnote/default.nix
+++ b/pkgs/tools/text/mdbook-footnote/default.nix
@@ -20,7 +20,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   meta = with lib; {
-    description = "A preprocessor for mdbook to support the inclusion of automatically numbered footnotes";
+    description = "Preprocessor for mdbook to support the inclusion of automatically numbered footnotes";
     mainProgram = "mdbook-footnote";
     homepage = "https://github.com/daviddrysdale/mdbook-footnote";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/mdbook-graphviz/default.nix b/pkgs/tools/text/mdbook-graphviz/default.nix
index 43171c92dc96f..9dc9f1df0e021 100644
--- a/pkgs/tools/text/mdbook-graphviz/default.nix
+++ b/pkgs/tools/text/mdbook-graphviz/default.nix
@@ -2,23 +2,23 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "mdbook-graphviz";
-  version = "0.1.7";
+  version = "0.2.0";
 
   src = fetchFromGitHub {
     owner = "dylanowen";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-FuAjuU4IXXuas+ubSuTMrZiYTGcZCuLTCSTJXtY2nlw=";
+    hash = "sha256-myASia/nkZmAf00lZ357Sh3YV73pCBrZAIRhSzFkZa0=";
   };
 
-  cargoHash = "sha256-d4s9wmjqMHjev1Y4nAobFnCc5NTdklXcs7XTRXFMEjU=";
+  cargoHash = "sha256-UB/l+rcVHkrHv/fybDy/UjrJbVksWgt9JRQC118/kGM=";
 
   buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   nativeCheckInputs = [ graphviz ];
 
   meta = with lib; {
-    description = "A preprocessor for mdbook, rendering Graphviz graphs to HTML at build time";
+    description = "Preprocessor for mdbook, rendering Graphviz graphs to HTML at build time";
     mainProgram = "mdbook-graphviz";
     homepage = "https://github.com/dylanowen/mdbook-graphviz";
     changelog = "https://github.com/dylanowen/mdbook-graphviz/releases/tag/v${version}";
diff --git a/pkgs/tools/text/mdbook-i18n-helpers/default.nix b/pkgs/tools/text/mdbook-i18n-helpers/default.nix
index 96026213f4a86..f9343e1637981 100644
--- a/pkgs/tools/text/mdbook-i18n-helpers/default.nix
+++ b/pkgs/tools/text/mdbook-i18n-helpers/default.nix
@@ -5,17 +5,17 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "mdbook-i18n-helpers";
-  version = "0.3.3";
+  version = "0.3.4";
 
   src = fetchFromGitHub {
     owner = "google";
     repo = "mdbook-i18n-helpers";
     # TODO fix once upstream uses semver for tags again
     rev = "refs/tags/mdbook-i18n-helpers-${version}";
-    hash = "sha256-5DfQCkNilRB309BXQ/DWrSMX+A64uiZ2CZxPZ0krtys=";
+    hash = "sha256-nIavOBWPyCmCLwPcDbjjG1sa71HObGnhms9sSCAR2iA=";
   };
 
-  cargoHash = "sha256-BrbEW5PD7n9KDaBUjdF60nto6mcfdQ0OUDKcnRH23DA=";
+  cargoHash = "sha256-bBUgsZHvJPwsdM3DjhaoAvIkPXQ6gzPOdfcE5rAnMQk=";
 
   meta = with lib; {
     description = "Helpers for a mdbook i18n workflow based on Gettext";
diff --git a/pkgs/tools/text/mdbook-katex/default.nix b/pkgs/tools/text/mdbook-katex/default.nix
index 9dbde52266ed3..b6c2a1ec1d304 100644
--- a/pkgs/tools/text/mdbook-katex/default.nix
+++ b/pkgs/tools/text/mdbook-katex/default.nix
@@ -14,7 +14,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   meta = with lib; {
-    description = "A preprocessor for mdbook, rendering LaTeX equations to HTML at build time";
+    description = "Preprocessor for mdbook, rendering LaTeX equations to HTML at build time";
     mainProgram = "mdbook-katex";
     homepage = "https://github.com/lzanini/${pname}";
     license = [ licenses.mit ];
diff --git a/pkgs/tools/text/mdbook-linkcheck/default.nix b/pkgs/tools/text/mdbook-linkcheck/default.nix
index b8d19d01e7633..878b93b055de0 100644
--- a/pkgs/tools/text/mdbook-linkcheck/default.nix
+++ b/pkgs/tools/text/mdbook-linkcheck/default.nix
@@ -25,7 +25,7 @@ rustPlatform.buildRustPackage rec {
   passthru.tests.version = testers.testVersion { package = mdbook-linkcheck; };
 
   meta = with lib; {
-    description = "A backend for `mdbook` which will check your links for you";
+    description = "Backend for `mdbook` which will check your links for you";
     mainProgram = "mdbook-linkcheck";
     homepage = "https://github.com/Michael-F-Bryan/mdbook-linkcheck";
     license = licenses.mit;
diff --git a/pkgs/tools/text/mdbook-mermaid/default.nix b/pkgs/tools/text/mdbook-mermaid/default.nix
index 2dafb13d508cd..52211b2737108 100644
--- a/pkgs/tools/text/mdbook-mermaid/default.nix
+++ b/pkgs/tools/text/mdbook-mermaid/default.nix
@@ -23,7 +23,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = with lib; {
-    description = "A preprocessor for mdbook to add mermaid.js support";
+    description = "Preprocessor for mdbook to add mermaid.js support";
     mainProgram = "mdbook-mermaid";
     homepage = "https://github.com/badboy/mdbook-mermaid";
     changelog = "https://github.com/badboy/mdbook-mermaid/blob/v${version}/CHANGELOG.md";
diff --git a/pkgs/tools/text/mdbook-pdf/default.nix b/pkgs/tools/text/mdbook-pdf/default.nix
index 0b3b0bfbc8606..472f5e3b86290 100644
--- a/pkgs/tools/text/mdbook-pdf/default.nix
+++ b/pkgs/tools/text/mdbook-pdf/default.nix
@@ -43,7 +43,7 @@ rustPlatform.buildRustPackage rec {
   doCheck = false;
 
   meta = with lib; {
-    description = "A backend for mdBook written in Rust for generating PDF";
+    description = "Backend for mdBook written in Rust for generating PDF";
     mainProgram = "mdbook-pdf";
     homepage = "https://github.com/HollowMan6/mdbook-pdf";
     changelog = "https://github.com/HollowMan6/mdbook-pdf/releases/tag/v${version}";
diff --git a/pkgs/tools/text/mdbook-toc/default.nix b/pkgs/tools/text/mdbook-toc/default.nix
index 3ee6fb6e814f5..a9c3855964b58 100644
--- a/pkgs/tools/text/mdbook-toc/default.nix
+++ b/pkgs/tools/text/mdbook-toc/default.nix
@@ -16,7 +16,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   meta = with lib; {
-    description = "A preprocessor for mdbook to add inline Table of Contents support";
+    description = "Preprocessor for mdbook to add inline Table of Contents support";
     mainProgram = "mdbook-toc";
     homepage = "https://github.com/badboy/mdbook-toc";
     license = [ licenses.mpl20 ];
diff --git a/pkgs/tools/text/opencc/default.nix b/pkgs/tools/text/opencc/default.nix
index 5cc8594741185..bc4630b871787 100644
--- a/pkgs/tools/text/opencc/default.nix
+++ b/pkgs/tools/text/opencc/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/BYVoid/OpenCC";
     license = licenses.asl20;
-    description = "A project for conversion between Traditional and Simplified Chinese";
+    description = "Project for conversion between Traditional and Simplified Chinese";
     longDescription = ''
       Open Chinese Convert (OpenCC) is an opensource project for conversion between
       Traditional Chinese and Simplified Chinese, supporting character-level conversion,
diff --git a/pkgs/tools/text/ov/default.nix b/pkgs/tools/text/ov/default.nix
index 76271f3d389bd..c7801348c4e37 100644
--- a/pkgs/tools/text/ov/default.nix
+++ b/pkgs/tools/text/ov/default.nix
@@ -10,16 +10,16 @@
 
 buildGoModule rec {
   pname = "ov";
-  version = "0.34.1";
+  version = "0.35.0";
 
   src = fetchFromGitHub {
     owner = "noborus";
     repo = "ov";
     rev = "refs/tags/v${version}";
-    hash = "sha256-1IFjnBIa/xCX2nY0RHhj/7OCYErY9QB/OBMaf3wDvrc=";
+    hash = "sha256-P/GkroAyE2mDEqLIyOqUGvauhPHVvaVRxpDkGv+BCqw=";
   };
 
-  vendorHash = "sha256-USMDIgB4LhI4kzSg2kkCXfbN9t49WEg0fUtAcZkngac=";
+  vendorHash = "sha256-PDyqscKzL2tGVrUckbedt0offgsCpDjxtnSeqggTM+A=";
 
   ldflags = [
     "-s"
diff --git a/pkgs/tools/text/paperoni/default.nix b/pkgs/tools/text/paperoni/default.nix
index 9e188c6d55083..1ceb29f1265a6 100644
--- a/pkgs/tools/text/paperoni/default.nix
+++ b/pkgs/tools/text/paperoni/default.nix
@@ -42,7 +42,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "An article extractor in Rust";
+    description = "Article extractor in Rust";
     mainProgram = "paperoni";
     homepage = "https://github.com/hipstermojo/paperoni";
     changelog = "https://github.com/hipstermojo/paperoni/releases/tag/${src.rev}";
diff --git a/pkgs/tools/text/percollate/default.nix b/pkgs/tools/text/percollate/default.nix
index 0e0581167286b..09c749a1680b1 100644
--- a/pkgs/tools/text/percollate/default.nix
+++ b/pkgs/tools/text/percollate/default.nix
@@ -35,7 +35,7 @@ buildNpmPackage rec {
   '';
 
   meta = with lib; {
-    description = "A command-line tool to turn web pages into readable PDF, EPUB, HTML, or Markdown docs";
+    description = "Command-line tool to turn web pages into readable PDF, EPUB, HTML, or Markdown docs";
     homepage = "https://github.com/danburzo/percollate";
     license = licenses.mit;
     maintainers = [ maintainers.austinbutler ];
diff --git a/pkgs/tools/text/pinyin-tool/default.nix b/pkgs/tools/text/pinyin-tool/default.nix
index 40ca31fe53a7e..9d434d1aa98f0 100644
--- a/pkgs/tools/text/pinyin-tool/default.nix
+++ b/pkgs/tools/text/pinyin-tool/default.nix
@@ -16,7 +16,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optionals stdenv.isDarwin [ Security ];
 
   meta = with lib; {
-    description = "A simple command line tool for converting Chinese characters to space-separate pinyin words";
+    description = "Simple command line tool for converting Chinese characters to space-separate pinyin words";
     mainProgram = "pinyin-tool";
     homepage = "https://github.com/briankung/pinyin-tool";
     license = licenses.mit;
diff --git a/pkgs/tools/text/platinum-searcher/default.nix b/pkgs/tools/text/platinum-searcher/default.nix
index d0128fcfd0e44..92386af9cb34e 100644
--- a/pkgs/tools/text/platinum-searcher/default.nix
+++ b/pkgs/tools/text/platinum-searcher/default.nix
@@ -25,7 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     homepage = "https://github.com/monochromegane/the_platinum_searcher";
-    description = "A code search tool similar to ack and the_silver_searcher(ag)";
+    description = "Code search tool similar to ack and the_silver_searcher(ag)";
     mainProgram = "pt";
     license = licenses.mit;
   };
diff --git a/pkgs/tools/text/pn/default.nix b/pkgs/tools/text/pn/default.nix
index a228f093c3467..ddb6e6ea1f888 100644
--- a/pkgs/tools/text/pn/default.nix
+++ b/pkgs/tools/text/pn/default.nix
@@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ libphonenumber icu protobuf ];
 
   meta = with lib; {
-    description = "A libphonenumber command-line wrapper";
+    description = "Libphonenumber command-line wrapper";
     mainProgram = "pn";
     homepage = "https://github.com/Orange-OpenSource/pn";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/pomsky/default.nix b/pkgs/tools/text/pomsky/default.nix
index 65b67b58fa400..d86b138861bf2 100644
--- a/pkgs/tools/text/pomsky/default.nix
+++ b/pkgs/tools/text/pomsky/default.nix
@@ -35,7 +35,7 @@ rustPlatform.buildRustPackage rec {
   doCheck = false;
 
   meta = with lib; {
-    description = "A portable, modern regular expression language";
+    description = "Portable, modern regular expression language";
     mainProgram = "pomsky";
     homepage = "https://pomsky-lang.org";
     changelog = "https://github.com/pomsky-lang/pomsky/blob/v${version}/CHANGELOG.md";
diff --git a/pkgs/tools/text/popfile/default.nix b/pkgs/tools/text/popfile/default.nix
index 2ab51fa24a308..b902a75bb4767 100644
--- a/pkgs/tools/text/popfile/default.nix
+++ b/pkgs/tools/text/popfile/default.nix
@@ -48,7 +48,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = "An email classification system that automatically sorts messages and fights spam";
+    description = "Email classification system that automatically sorts messages and fights spam";
     homepage = "https://getpopfile.org/";
     license = lib.licenses.gpl2Only;
 
diff --git a/pkgs/tools/text/proselint/default.nix b/pkgs/tools/text/proselint/default.nix
index 2f62484d980a0..904eb2c5363fa 100644
--- a/pkgs/tools/text/proselint/default.nix
+++ b/pkgs/tools/text/proselint/default.nix
@@ -14,7 +14,7 @@ buildPythonApplication rec {
   propagatedBuildInputs = [ click future six ];
 
   meta = with lib; {
-    description = "A linter for prose";
+    description = "Linter for prose";
     mainProgram = "proselint";
     homepage = "http://proselint.com";
     license = licenses.bsd3;
diff --git a/pkgs/tools/text/rare-regex/default.nix b/pkgs/tools/text/rare-regex/default.nix
index 6dbd062ef61c3..b565ed8aded26 100644
--- a/pkgs/tools/text/rare-regex/default.nix
+++ b/pkgs/tools/text/rare-regex/default.nix
@@ -10,13 +10,13 @@
 
 buildGoModule rec {
   pname = "rare";
-  version = "0.3.3";
+  version = "0.3.4";
 
   src = fetchFromGitHub {
     owner = "zix99";
     repo = "rare";
     rev = version;
-    hash = "sha256-83iHYWMdLOzWDu/WW2TN8D2gUe2Y74aGBUjfHIa9ki8=";
+    hash = "sha256-T27RBIrIXlhFBjzNgN6B49qgTHcek8MajXlbRC5DTMs=";
   };
 
   vendorHash = "sha256-wUOtxNjL/4MosACCzPTWKWrnMZhxINfN1ppkRsqDh9M=";
@@ -43,7 +43,7 @@ buildGoModule rec {
   };
 
   meta = with lib; {
-    description = "A fast text scanner/regex extractor and realtime summarizer";
+    description = "Fast text scanner/regex extractor and realtime summarizer";
     homepage = "https://rare.zdyn.net";
     changelog = "https://github.com/zix99/rare/releases/tag/${src.rev}";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/text/repgrep/default.nix b/pkgs/tools/text/repgrep/default.nix
index 607aa230569b3..1fb6156dfc4ec 100644
--- a/pkgs/tools/text/repgrep/default.nix
+++ b/pkgs/tools/text/repgrep/default.nix
@@ -43,7 +43,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "An interactive replacer for ripgrep that makes it easy to find and replace across files on the command line";
+    description = "Interactive replacer for ripgrep that makes it easy to find and replace across files on the command line";
     homepage = "https://github.com/acheronfail/repgrep";
     changelog = "https://github.com/acheronfail/repgrep/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ mit asl20 unlicense ];
diff --git a/pkgs/tools/text/replace/default.nix b/pkgs/tools/text/replace/default.nix
index 62b83636b37c9..61c6a65322d14 100644
--- a/pkgs/tools/text/replace/default.nix
+++ b/pkgs/tools/text/replace/default.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
   patches = [./malloc.patch];
 
   meta = {
-    description = "A tool to replace verbatim strings";
+    description = "Tool to replace verbatim strings";
     homepage = "https://replace.richardlloyd.org.uk/";
     mainProgram = "replace-literal";
     platforms = lib.platforms.unix;
diff --git a/pkgs/tools/text/reveal-md/default.nix b/pkgs/tools/text/reveal-md/default.nix
index 9da86f2a61c85..5f6bf17eb4598 100644
--- a/pkgs/tools/text/reveal-md/default.nix
+++ b/pkgs/tools/text/reveal-md/default.nix
@@ -5,19 +5,19 @@
 
 buildNpmPackage rec {
   pname = "reveal-md";
-  version = "5.5.2";
+  version = "6.1.2";
 
   src = fetchFromGitHub {
     owner = "webpro";
     repo = "reveal-md";
     rev = version;
-    hash = "sha256-Uge7N6z9O1wc+nW/0k5qz+CPYbYgr7u2mulH75pXvHY=";
+    hash = "sha256-MPNxQpof36XHg3Zl7fHkyCXnoDOcRvMiMiPH29GEWqE=";
   };
 
-  npmDepsHash = "sha256-+gzur0pAmZe4nrDxNQwjFn/hM9TvZEd6JzLOnJLhNtg=";
+  npmDepsHash = "sha256-535tauun6ysPDC096ttPpvJZ+RSZ75aY8mVKj8mnMJI=";
 
   env = {
-    PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true;
+    PUPPETEER_SKIP_DOWNLOAD = true;
   };
 
   dontNpmBuild = true;
diff --git a/pkgs/tools/text/rgxg/default.nix b/pkgs/tools/text/rgxg/default.nix
index f2f4870d8adf2..4cc1722392ecf 100644
--- a/pkgs/tools/text/rgxg/default.nix
+++ b/pkgs/tools/text/rgxg/default.nix
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
   };
 
   meta = with lib; {
-    description = "A C library and a command-line tool to generate (extended) regular expressions";
+    description = "C library and a command-line tool to generate (extended) regular expressions";
     mainProgram = "rgxg";
     license = licenses.zlib;
     maintainers = with maintainers; [ hloeffler ];
diff --git a/pkgs/tools/text/riffdiff/default.nix b/pkgs/tools/text/riffdiff/default.nix
index 6ad13776a23bc..aadb6f26354bb 100644
--- a/pkgs/tools/text/riffdiff/default.nix
+++ b/pkgs/tools/text/riffdiff/default.nix
@@ -14,7 +14,7 @@ rustPlatform.buildRustPackage rec {
   cargoHash = "sha256-w3oDpJMsfV9mIWI44YgOsNZH2vahSRCSJnYpFWBx/eU=";
 
   meta = with lib; {
-    description = "A diff filter highlighting which line parts have changed";
+    description = "Diff filter highlighting which line parts have changed";
     homepage = "https://github.com/walles/riff";
     license = licenses.mit;
     maintainers = with maintainers; [ johnpyp ];
diff --git a/pkgs/tools/text/ripgrep/default.nix b/pkgs/tools/text/ripgrep/default.nix
index 427625a0000f8..35e56b7fb3a49 100644
--- a/pkgs/tools/text/ripgrep/default.nix
+++ b/pkgs/tools/text/ripgrep/default.nix
@@ -53,7 +53,7 @@ in rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A utility that combines the usability of The Silver Searcher with the raw speed of grep";
+    description = "Utility that combines the usability of The Silver Searcher with the raw speed of grep";
     homepage = "https://github.com/BurntSushi/ripgrep";
     changelog = "https://github.com/BurntSushi/ripgrep/releases/tag/${version}";
     license = with licenses; [ unlicense /* or */ mit ];
diff --git a/pkgs/tools/text/rnr/default.nix b/pkgs/tools/text/rnr/default.nix
index b2d38832a4d5d..fbc4f1b382f8e 100644
--- a/pkgs/tools/text/rnr/default.nix
+++ b/pkgs/tools/text/rnr/default.nix
@@ -14,7 +14,7 @@ rustPlatform.buildRustPackage rec {
   cargoSha256 = "sha256-+oDRNBQ03MknhcTpZFKt0ipJY43LPOKbGF014rrs6dw=";
 
   meta = with lib; {
-    description = "A command-line tool to batch rename files and directories";
+    description = "Command-line tool to batch rename files and directories";
     mainProgram = "rnr";
     homepage = "https://github.com/ismaelgv/rnr";
     changelog = "https://github.com/ismaelgv/rnr/blob/v${version}/CHANGELOG.md";
diff --git a/pkgs/tools/text/runiq/default.nix b/pkgs/tools/text/runiq/default.nix
index 52386bb0f24a0..330c4cdbf930c 100644
--- a/pkgs/tools/text/runiq/default.nix
+++ b/pkgs/tools/text/runiq/default.nix
@@ -16,7 +16,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = with lib; {
-    description = "An efficient way to filter duplicate lines from input, à la uniq";
+    description = "Efficient way to filter duplicate lines from input, à la uniq";
     mainProgram = "runiq";
     homepage = "https://github.com/whitfin/runiq";
     license = licenses.mit;
diff --git a/pkgs/tools/text/sad/default.nix b/pkgs/tools/text/sad/default.nix
index a3fba1a8d088a..1b8dad394c9a2 100644
--- a/pkgs/tools/text/sad/default.nix
+++ b/pkgs/tools/text/sad/default.nix
@@ -7,16 +7,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "sad";
-  version = "0.4.29";
+  version = "0.4.30";
 
   src = fetchFromGitHub {
     owner = "ms-jpq";
     repo = "sad";
     rev = "refs/tags/v${version}";
-    hash = "sha256-TLVUvz/phAy+ljIsdv4GVSFHTAZ5ywQs32WHsu9g9Fc=";
+    hash = "sha256-pTCdoKY/+ubUY3adN/Cqop0Gvuqh6Bs55arjT9mjQ18=";
   };
 
-  cargoHash = "sha256-4XmTxeKbdC4HRownFlEc4GrSVimKkQg/yNI0us7gzQI=";
+  cargoHash = "sha256-ndl0jFQA30h90nnEcIl2CXfF/+cuj/UqUV/7ilsUPb4=";
 
   nativeBuildInputs = [ python3 ];
 
diff --git a/pkgs/tools/text/scraper/default.nix b/pkgs/tools/text/scraper/default.nix
index 42b8c91effe08..0c4afcad4f87a 100644
--- a/pkgs/tools/text/scraper/default.nix
+++ b/pkgs/tools/text/scraper/default.nix
@@ -18,7 +18,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A tool to query HTML files with CSS selectors";
+    description = "Tool to query HTML files with CSS selectors";
     mainProgram = "scraper";
     homepage = "https://github.com/causal-agent/scraper";
     changelog = "https://github.com/causal-agent/scraper/releases/tag/v${version}";
diff --git a/pkgs/tools/text/seehecht/default.nix b/pkgs/tools/text/seehecht/default.nix
index 55c02a8c90c60..9a7b1f936a99d 100644
--- a/pkgs/tools/text/seehecht/default.nix
+++ b/pkgs/tools/text/seehecht/default.nix
@@ -19,7 +19,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A tool to quickly open a markdown document with already filled out frontmatter";
+    description = "Tool to quickly open a markdown document with already filled out frontmatter";
     license = licenses.lgpl3Only;
     platforms = platforms.all;
     maintainers = with maintainers; [ annaaurora ];
diff --git a/pkgs/tools/text/sgml/openjade/default.nix b/pkgs/tools/text/sgml/openjade/default.nix
index 87bc8e7a8aed1..60fa161d20c50 100644
--- a/pkgs/tools/text/sgml/openjade/default.nix
+++ b/pkgs/tools/text/sgml/openjade/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = {
-    description = "An implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
+    description = "Implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
     mainProgram = "openjade";
     license = lib.licenses.mit;
     homepage = "https://openjade.sourceforge.net/";
diff --git a/pkgs/tools/text/sgml/opensp/default.nix b/pkgs/tools/text/sgml/opensp/default.nix
index 27f5dc4e9d9b2..a51bd79251646 100644
--- a/pkgs/tools/text/sgml/opensp/default.nix
+++ b/pkgs/tools/text/sgml/opensp/default.nix
@@ -53,7 +53,7 @@ stdenv.mkDerivation rec {
   doCheck = false; # fails
 
   meta = with lib; {
-    description = "A suite of SGML/XML processing tools";
+    description = "Suite of SGML/XML processing tools";
     license = licenses.mit;
     homepage = "https://openjade.sourceforge.net/";
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/sgrep/default.nix b/pkgs/tools/text/sgrep/default.nix
index 3e82ce9afc602..4b7476e55f6d0 100644
--- a/pkgs/tools/text/sgrep/default.nix
+++ b/pkgs/tools/text/sgrep/default.nix
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html";
-    description = "A grep for structured text formats such as XML";
+    description = "Grep for structured text formats such as XML";
     mainProgram = "sgrep";
     longDescription = ''
       sgrep (structured grep) is a tool for searching and indexing text,
diff --git a/pkgs/tools/text/shab/default.nix b/pkgs/tools/text/shab/default.nix
index 733ba4f80cf55..bbc60921903d6 100644
--- a/pkgs/tools/text/shab/default.nix
+++ b/pkgs/tools/text/shab/default.nix
@@ -40,7 +40,7 @@ let
     };
 
     meta = with lib; {
-      description = "The bash templating language";
+      description = "Bash templating language";
       mainProgram = "shab";
       homepage = "https://github.com/zimbatm/shab";
       license = licenses.unlicense;
diff --git a/pkgs/tools/text/shfmt/default.nix b/pkgs/tools/text/shfmt/default.nix
index 8c5da3097b4b8..b2437a01c993d 100644
--- a/pkgs/tools/text/shfmt/default.nix
+++ b/pkgs/tools/text/shfmt/default.nix
@@ -26,7 +26,7 @@ buildGoModule rec {
 
   meta = with lib; {
     homepage = "https://github.com/mvdan/sh";
-    description = "A shell parser and formatter";
+    description = "Shell parser and formatter";
     longDescription = ''
       shfmt formats shell programs. It can use tabs or any number of spaces to indent.
       You can feed it standard input, any number of files or any number of directories to recurse into.
diff --git a/pkgs/tools/text/shocco/default.nix b/pkgs/tools/text/shocco/default.nix
index 75f218f213e6d..6fc11f6ef0bae 100644
--- a/pkgs/tools/text/shocco/default.nix
+++ b/pkgs/tools/text/shocco/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ perlPackages.TextMarkdown python3.pkgs.pygments ];
 
   meta = with lib; {
-    description = "A quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
+    description = "Quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
     mainProgram = "shocco";
     homepage = "https://rtomayko.github.io/shocco/";
     license = licenses.mit;
diff --git a/pkgs/tools/text/sift/default.nix b/pkgs/tools/text/sift/default.nix
index 1aecb3ac8909c..04ca7f0c21366 100644
--- a/pkgs/tools/text/sift/default.nix
+++ b/pkgs/tools/text/sift/default.nix
@@ -30,7 +30,7 @@ buildGoModule rec {
   '';
 
   meta = with lib; {
-    description = "A fast and powerful alternative to grep";
+    description = "Fast and powerful alternative to grep";
     mainProgram = "sift";
     homepage = "https://sift-tool.org";
     maintainers = with maintainers; [ viraptor ];
diff --git a/pkgs/tools/text/silver-searcher/default.nix b/pkgs/tools/text/silver-searcher/default.nix
index 94c5c8cf02fc9..568b49371f69d 100644
--- a/pkgs/tools/text/silver-searcher/default.nix
+++ b/pkgs/tools/text/silver-searcher/default.nix
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://github.com/ggreer/the_silver_searcher/";
-    description = "A code-searching tool similar to ack, but faster";
+    description = "Code-searching tool similar to ack, but faster";
     maintainers = with maintainers; [ madjar ];
     mainProgram = "ag";
     platforms = platforms.all;
diff --git a/pkgs/tools/text/teip/default.nix b/pkgs/tools/text/teip/default.nix
index caa665fc3c93c..90a41a8cf38d4 100644
--- a/pkgs/tools/text/teip/default.nix
+++ b/pkgs/tools/text/teip/default.nix
@@ -23,11 +23,6 @@ rustPlatform.buildRustPackage rec {
 
   nativeCheckInputs = [ perl ];
 
-  # Cargo.lock is outdated
-  preConfigure = ''
-    cargo update --offline
-  '';
-
   # tests are locale sensitive
   preCheck = ''
     export LANG=${if stdenv.isDarwin then "en_US.UTF-8" else "C.UTF-8"}
@@ -42,7 +37,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A tool to bypass a partial range of standard input to any command";
+    description = "Tool to bypass a partial range of standard input to any command";
     mainProgram = "teip";
     homepage = "https://github.com/greymd/teip";
     changelog = "https://github.com/greymd/teip/releases/tag/v${version}";
diff --git a/pkgs/tools/text/termbook/default.nix b/pkgs/tools/text/termbook/default.nix
index a68f0ce416f45..d16dc05cba53b 100644
--- a/pkgs/tools/text/termbook/default.nix
+++ b/pkgs/tools/text/termbook/default.nix
@@ -51,7 +51,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A runner for `mdbooks` to keep your documentation tested";
+    description = "Runner for `mdbooks` to keep your documentation tested";
     mainProgram = "termbook";
     homepage = "https://github.com/Byron/termbook/";
     changelog = "https://github.com/Byron/termbook/blob/${src.rev}/CHANGELOG.md";
diff --git a/pkgs/tools/text/tesh/default.nix b/pkgs/tools/text/tesh/default.nix
index abff7771add23..d4d2c1e0ed714 100644
--- a/pkgs/tools/text/tesh/default.nix
+++ b/pkgs/tools/text/tesh/default.nix
@@ -1,4 +1,4 @@
-{ python3Packages, fetchFromGitHub, fetchpatch }:
+{ python3Packages, fetchFromGitHub }:
 
 let
   version = "0.3.2";
diff --git a/pkgs/tools/text/textpieces/default.nix b/pkgs/tools/text/textpieces/default.nix
deleted file mode 100644
index 90f05fc8f1dc3..0000000000000
--- a/pkgs/tools/text/textpieces/default.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, fetchpatch
-, python3
-, meson
-, ninja
-, pkg-config
-, vala
-, glib
-, gtk4
-, libgee
-, libadwaita
-, libportal-gtk4
-, json-glib
-, blueprint-compiler
-, gtksourceview5
-, gobject-introspection
-, wrapGAppsHook4
-, appstream-glib
-, desktop-file-utils
-}:
-
-let
-  pythonEnv = python3.withPackages (ps: with ps; [ pyyaml ]);
-in
-stdenv.mkDerivation (finalAttrs: {
-  pname = "textpieces";
-  version = "3.4.1";
-
-  src = fetchFromGitHub {
-    owner = "liferooter";
-    repo = "textpieces";
-    rev = "v${finalAttrs.version}";
-    hash = "sha256-3ZUHzt3oXYgsnJVDf83JUDhcF+0DLgFfOMtpKI/FTcE=";
-  };
-
-  nativeBuildInputs = [
-    meson
-    ninja
-    pkg-config
-    pythonEnv
-    vala
-    blueprint-compiler
-    wrapGAppsHook4
-    appstream-glib
-    desktop-file-utils
-    gobject-introspection
-  ];
-
-  buildInputs = [
-    glib
-    gtk4
-    libadwaita
-    libportal-gtk4
-    libgee
-    json-glib
-    gtksourceview5
-  ];
-
-  runtimeDependencies = [
-    pythonEnv
-  ];
-
-  patches = [
-  (fetchpatch {
-    url = "https://github.com/liferooter/textpieces/commit/26348782b9fddc5f2ffb9497cf18ec8ce9592960.patch";
-    hash = "sha256-w86PCeDhoyMPm63GCBa2Ax8KfCdlxtmGeUrmt1ZSz1k=";
-  })
-  ];
-
-  postPatch = ''
-    chmod +x build-aux/meson/postinstall.py
-    patchShebangs build-aux/meson/postinstall.py
-    patchShebangs scripts/
-  '';
-
-  meta = with lib; {
-    description = "Quick text processing";
-    longDescription = "A small tool for quick text transformations such as checksums, encoding, decoding and so on.";
-    homepage = "https://github.com/liferooter/textpieces";
-    license = licenses.gpl3Plus;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ zendo ];
-  };
-})
diff --git a/pkgs/tools/text/tidy-viewer/default.nix b/pkgs/tools/text/tidy-viewer/default.nix
index cbeb97214893b..b2d55ee276150 100644
--- a/pkgs/tools/text/tidy-viewer/default.nix
+++ b/pkgs/tools/text/tidy-viewer/default.nix
@@ -20,7 +20,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = with lib; {
-    description = "A cross-platform CLI csv pretty printer that uses column styling to maximize viewer enjoyment";
+    description = "Cross-platform CLI csv pretty printer that uses column styling to maximize viewer enjoyment";
     mainProgram = "tidy-viewer";
     homepage = "https://github.com/alexhallam/tv";
     changelog = "https://github.com/alexhallam/tv/blob/${version}/CHANGELOG.md";
diff --git a/pkgs/tools/text/tml/default.nix b/pkgs/tools/text/tml/default.nix
index 0dc3cba1dbd19..244b2d10adc11 100644
--- a/pkgs/tools/text/tml/default.nix
+++ b/pkgs/tools/text/tml/default.nix
@@ -19,7 +19,7 @@ buildGoModule rec {
   ldflags = [ "-s" "-w" ];
 
   meta = with lib; {
-    description = "A tiny markup language for terminal output";
+    description = "Tiny markup language for terminal output";
     mainProgram = "tml";
     homepage = "https://github.com/liamg/tml";
     changelog = "https://github.com/liamg/tml/releases/tag/v${version}";
diff --git a/pkgs/tools/text/unrtf/default.nix b/pkgs/tools/text/unrtf/default.nix
index 4395c0f6e9414..5e6766e4db942 100644
--- a/pkgs/tools/text/unrtf/default.nix
+++ b/pkgs/tools/text/unrtf/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   outputs = [ "out" "man" ];
 
   meta = with lib; {
-    description = "A converter from Rich Text Format to other formats";
+    description = "Converter from Rich Text Format to other formats";
     mainProgram = "unrtf";
     longDescription = ''
       UnRTF converts documents in Rich Text Format to other
diff --git a/pkgs/tools/text/untex/default.nix b/pkgs/tools/text/untex/default.nix
index c6f8330496506..cb4c0e4fcb9e6 100644
--- a/pkgs/tools/text/untex/default.nix
+++ b/pkgs/tools/text/untex/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "A utility which removes LaTeX commands from input";
+    description = "Utility which removes LaTeX commands from input";
     mainProgram = "untex";
     homepage = "https://www.ctan.org/pkg/untex";
     license = licenses.gpl1Only;
diff --git a/pkgs/tools/text/vale/default.nix b/pkgs/tools/text/vale/default.nix
index d42703ce0a76b..2dfb2f00f662e 100644
--- a/pkgs/tools/text/vale/default.nix
+++ b/pkgs/tools/text/vale/default.nix
@@ -10,7 +10,7 @@
 
 buildGoModule rec {
   pname = "vale";
-  version = "3.4.2";
+  version = "3.6.0";
 
   subPackages = [ "cmd/vale" ];
 
@@ -18,10 +18,10 @@ buildGoModule rec {
     owner = "errata-ai";
     repo = "vale";
     rev = "v${version}";
-    hash = "sha256-9923mmZZmg08Zq+Vbt4zus0UvmsTJ/r1ddVdeOB7yJU=";
+    hash = "sha256-Xkea1o0ywRKIg0cMJuxQehHbgVF0SSC9VRa53FQEong=";
   };
 
-  vendorHash = "sha256-4GtMKhxGkNwF6ydFE708SbzBm9mwCDKtINljTQXwz2c=";
+  vendorHash = "sha256-OLlViQKLTark9yknnjJFiEThFtxNNjue5LUp1P/anKU=";
 
   ldflags = [ "-s" "-w" "-X main.version=${version}" ];
 
@@ -42,7 +42,7 @@ buildGoModule rec {
   };
 
   meta = with lib; {
-    description = "A syntax-aware linter for prose built with speed and extensibility in mind";
+    description = "Syntax-aware linter for prose built with speed and extensibility in mind";
     longDescription = ''
       Vale in Nixpkgs offers the helper `.withStyles` allow you to install it
       predefined styles:
diff --git a/pkgs/tools/text/vale/styles.nix b/pkgs/tools/text/vale/styles.nix
index 54764f77ff471..6022d38497a9f 100644
--- a/pkgs/tools/text/vale/styles.nix
+++ b/pkgs/tools/text/vale/styles.nix
@@ -32,15 +32,15 @@ in
 {
   alex = buildStyle rec {
     name = "alex";
-    version = "0.2.1";
+    version = "0.2.2";
     src = fetchFromGitHub {
       owner = "errata-ai";
       repo = "alex";
       rev = "v${version}";
-      hash = "sha256-xNF7se2FwKgNe5KYx/zvGWpIwBsBADYGH4JV1lUww+Q=";
+      hash = "sha256-mfeMa+KlkqwyS+h+oo5p5+P2bsmZ0BOph2nbQiaoNqM=";
     };
     meta = {
-      description = "A Vale-compatible implementation of the guidelines enforced by the alex linter";
+      description = "Vale-compatible implementation of the guidelines enforced by the alex linter";
       homepage = "https://github.com/errata-ai/alex";
       license = lib.licenses.mit;
     };
@@ -56,7 +56,7 @@ in
       hash = "sha256-jSmfUgzlIbDVh2zLtnTNpM/z6dHMp358F9adLZ5+qcw=";
     };
     meta = {
-      description = "A Vale-compatible implementation of the Google Developer Documentation Style Guide";
+      description = "Vale-compatible implementation of the Google Developer Documentation Style Guide";
       homepage = "https://github.com/errata-ai/Google";
       license = lib.licenses.mit;
     };
@@ -72,7 +72,7 @@ in
       hash = "sha256-zRz5ThOg5RLTZj3dYPe0PDvOF5DjO31lduSpi2Us87U=";
     };
     meta = {
-      description = "A Vale-compatible implementation of the Joblint linter";
+      description = "Vale-compatible implementation of the Joblint linter";
       homepage = "https://github.com/errata-ai/Joblint";
       license = lib.licenses.mit;
     };
@@ -88,7 +88,7 @@ in
       hash = "sha256-4j05bIGAVEy6untUqtrUxdLKlhyOcJsbcsow8OxRp1A=";
     };
     meta = {
-      description = "A Vale-compatible implementation of the Microsoft Writing Style Guide";
+      description = "Vale-compatible implementation of the Microsoft Writing Style Guide";
       homepage = "https://github.com/errata-ai/Microsoft";
       license = lib.licenses.mit;
     };
@@ -96,15 +96,15 @@ in
 
   proselint = buildStyle rec {
     name = "proselint";
-    version = "0.3.3";
+    version = "0.3.4";
     src = fetchFromGitHub {
       owner = "errata-ai";
       repo = "proselint";
       rev = "v${version}";
-      hash = "sha256-faeWr1bRhnKsycJY89WqnRv8qIowUmz3EQvDyjtl63w=";
+      hash = "sha256-ryKJDX1JrvDWVKLC5qQGctweDf74yuwEXxl/IqumM4s=";
     };
     meta = {
-      description = "A Vale-compatible implementation of Python's proselint linter";
+      description = "Vale-compatible implementation of Python's proselint linter";
       homepage = "https://github.com/errata-ai/proselint";
       license = lib.licenses.bsd3;
     };
@@ -128,15 +128,15 @@ in
 
   write-good = buildStyle rec {
     name = "write-good";
-    version = "0.4.0";
+    version = "0.4.1";
     src = fetchFromGitHub {
       owner = "errata-ai";
       repo = "write-good";
       rev = "v${version}";
-      hash = "sha256-KQzY6MeHV/owPVmUAfzGUO0HmFPkD7wdQqOvBkipwP8=";
+      hash = "sha256-W/eHlXklAVlAnY8nLPi/SIKsg8UUnH8UkH99BDo5yKk=";
     };
     meta = {
-      description = "A Vale-compatible implementation of the write-good linter";
+      description = "Vale-compatible implementation of the write-good linter";
       homepage = "https://github.com/errata-ai/write-good";
       license = lib.licenses.mit;
     };
diff --git a/pkgs/tools/text/validator-nu/default.nix b/pkgs/tools/text/validator-nu/default.nix
index 56c227b46da45..d52c87e4186ba 100644
--- a/pkgs/tools/text/validator-nu/default.nix
+++ b/pkgs/tools/text/validator-nu/default.nix
@@ -78,6 +78,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ andersk ivan ];
     mainProgram = "vnu";
+    platforms = lib.platforms.all;
     sourceProvenance = with lib.sourceTypes; [ binaryBytecode fromSource ];
   };
 })
diff --git a/pkgs/tools/text/wrap/default.nix b/pkgs/tools/text/wrap/default.nix
index 4eebcf60437bd..959c78608db1c 100644
--- a/pkgs/tools/text/wrap/default.nix
+++ b/pkgs/tools/text/wrap/default.nix
@@ -33,7 +33,7 @@ buildGoModule rec {
   '';
 
   meta = with lib; {
-    description = "A Fountain export tool with some extras";
+    description = "Fountain export tool with some extras";
     homepage = "https://github.com/Wraparound/wrap";
     license = licenses.gpl3Only;
     maintainers = [ maintainers.austinbutler ];
diff --git a/pkgs/tools/text/xidel/default.nix b/pkgs/tools/text/xidel/default.nix
index d7fefa2d495db..6a55a5d9e8b13 100644
--- a/pkgs/tools/text/xidel/default.nix
+++ b/pkgs/tools/text/xidel/default.nix
@@ -90,7 +90,7 @@ in stdenv.mkDerivation rec {
     mainProgram = "xidel";
     homepage = "https://www.videlibri.de/xidel.html";
     license = licenses.gpl3Plus;
-    platforms = platforms.linux;
+    platforms = platforms.all;
     maintainers = [ maintainers.bjornfor ];
   };
 }
diff --git a/pkgs/tools/text/xml/basex/default.nix b/pkgs/tools/text/xml/basex/default.nix
index 5e9df9f513b6c..91c6c9520ce6d 100644
--- a/pkgs/tools/text/xml/basex/default.nix
+++ b/pkgs/tools/text/xml/basex/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "basex";
-  version = "10.7";
+  version = "11.0";
 
   src = fetchurl {
     url = "http://files.basex.org/releases/${version}/BaseX${builtins.replaceStrings ["."] [""] version}.zip";
-    hash = "sha256-Jr73UoyJfhtXLnYgOPh+jqKc3XZs+WMwJaO5nuD+Vmw=";
+    hash = "sha256-ePXoinOnm9BgMeCGTtWE3ahDsEtzReAiDLMwm9cB3tE=";
   };
 
   nativeBuildInputs = [ unzip copyDesktopItems ];
diff --git a/pkgs/tools/text/xml/jing-trang/default.nix b/pkgs/tools/text/xml/jing-trang/default.nix
index f13a82faf295b..1de721fb0b0e2 100644
--- a/pkgs/tools/text/xml/jing-trang/default.nix
+++ b/pkgs/tools/text/xml/jing-trang/default.nix
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
   checkPhase = "ant test";
 
   meta = with lib; {
-    description = "A RELAX NG validator in Java";
+    description = "RELAX NG validator in Java";
     # The homepage is www.thaiopensource.com, but it links to googlecode.com
     # for downloads and call it the "project site".
     homepage = "https://www.thaiopensource.com/relaxng/trang.html";
diff --git a/pkgs/tools/text/xml/rxp/default.nix b/pkgs/tools/text/xml/rxp/default.nix
index b45c89af1c03d..fe93607d27f2d 100644
--- a/pkgs/tools/text/xml/rxp/default.nix
+++ b/pkgs/tools/text/xml/rxp/default.nix
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     license = lib.licenses.gpl2Plus;
-    description = "A validating XML parser written in C";
+    description = "Validating XML parser written in C";
     homepage = "https://www.cogsci.ed.ac.uk/~richard/rxp.html";
     platforms = lib.platforms.unix;
     mainProgram = "rxp";
diff --git a/pkgs/tools/text/xml/xmlformat/default.nix b/pkgs/tools/text/xml/xmlformat/default.nix
index ea0e90502dc20..514d691c6a32d 100644
--- a/pkgs/tools/text/xml/xmlformat/default.nix
+++ b/pkgs/tools/text/xml/xmlformat/default.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = "a configurable formatter (or 'pretty-printer') for XML documents";
+    description = "Configurable formatter (or 'pretty-printer') for XML documents";
     mainProgram = "xmlformat";
     homepage = "http://www.kitebird.com/software/xmlformat/";
     license = lib.licenses.bsd3;
diff --git a/pkgs/tools/text/xml/xmlstarlet/default.nix b/pkgs/tools/text/xml/xmlstarlet/default.nix
index b5eb08199fc61..b3ee37d894b14 100644
--- a/pkgs/tools/text/xml/xmlstarlet/default.nix
+++ b/pkgs/tools/text/xml/xmlstarlet/default.nix
@@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = "A command line tool for manipulating and querying XML data";
+    description = "Command line tool for manipulating and querying XML data";
     homepage = "https://xmlstar.sourceforge.net/";
     license = lib.licenses.mit;
     mainProgram = "xmlstarlet";
diff --git a/pkgs/tools/text/xsv/default.nix b/pkgs/tools/text/xsv/default.nix
index 3e617a621e334..bf5a7ed6b8054 100644
--- a/pkgs/tools/text/xsv/default.nix
+++ b/pkgs/tools/text/xsv/default.nix
@@ -16,7 +16,7 @@ rustPlatform.buildRustPackage rec {
   buildInputs = lib.optional stdenv.isDarwin Security;
 
   meta = with lib; {
-    description = "A fast CSV toolkit written in Rust";
+    description = "Fast CSV toolkit written in Rust";
     mainProgram = "xsv";
     homepage = "https://github.com/BurntSushi/xsv";
     license = with licenses; [ unlicense /* or */ mit ];