about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/text
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2024-03-24 11:04:41 +0100
committerAlyssa Ross <hi@alyssa.is>2024-03-24 11:04:41 +0100
commit5423cabbbf2b6dec5568f1ecabd288d5d9a642ec (patch)
treef316a6a921bfefd3a63bd4502c2eb50ff1644f67 /nixpkgs/pkgs/tools/text
parent46a88117a05c3469af5d99433af140c3de8ca088 (diff)
parent8aa81f34981add12aecada6c702ddbbd0375ca36 (diff)
downloadnixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.tar
nixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.tar.gz
nixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.tar.bz2
nixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.tar.lz
nixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.tar.xz
nixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.tar.zst
nixlib-5423cabbbf2b6dec5568f1ecabd288d5d9a642ec.zip
Merge branch 'nixos-unstable-small' of https://github.com/NixOS/nixpkgs
Diffstat (limited to 'nixpkgs/pkgs/tools/text')
-rw-r--r--nixpkgs/pkgs/tools/text/a2ps/default.nix4
-rw-r--r--nixpkgs/pkgs/tools/text/abbreviate/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/agrep/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/aha/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/align/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/anew/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/anewer/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/ansifilter/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/ascii/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/asciigraph/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/autocorrect/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/base16384/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/bashblog/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/book-summary/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/boxes/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/catdocx/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/cconv/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/chars/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/choose/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/cidrgrep/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/cmigemo/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/coloursum/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/comrak/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/convertlit/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/copyright-update/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/crowdin-cli/default.nix4
-rw-r--r--nixpkgs/pkgs/tools/text/csvdiff/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/csview/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/dadadodo/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/dfmt/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/diffr/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/diffstat/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/difftastic/default.nix5
-rw-r--r--nixpkgs/pkgs/tools/text/dirdiff/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/djot-js/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/text/each/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/epubcheck/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/esh/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/fanficfare/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/fastmod/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/frangipanni/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/frawk/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/text/frogmouth/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/fst/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/gjo/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/glogg/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/gnupatch/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/gtranslator/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/gtree/default.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/gucci/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/hck/default.nix5
-rw-r--r--nixpkgs/pkgs/tools/text/hcledit/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/highlight/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/html2text/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/huniq/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/hyx/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/invoice2data/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/jen/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/jotdown/default.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/jsawk/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/jumanpp/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/kdiff3/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/l2md/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mairix/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mark/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/markscribe/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/math-review/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mawk/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mb2md/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-d2/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-epub/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-katex/default.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-man/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook-toc/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdbook/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mdcat/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/text/mir-qualia/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mmdoc/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/morsel/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/mpage/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/nerdfix/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/nkf/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/odt2txt/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/papeer/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/paperoni/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/papertrail/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/par/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/pbgopy/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/peco/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/pinyin-tool/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/platinum-searcher/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/pn/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/podiff/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/poedit/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/pomsky/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/proselint/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/qprint/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/reckon/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/recode/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/reveal-md/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/rgxg/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/riffdiff/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/text/rnr/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/rosie/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/rpl/default.nix5
-rw-r--r--nixpkgs/pkgs/tools/text/runiq/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/ruplacer/default.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/sad/default.nix12
-rw-r--r--nixpkgs/pkgs/tools/text/scraper/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/sd/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/sgml/openjade/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/sgrep/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/shab/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/shocco/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/sift/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/smu/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/sorted-grep/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/subedit/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/tab/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/teip/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/termbook/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/tidy-viewer/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/tml/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/to-html/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/tuc/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/tv/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/txt2tags/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/ugrep/default.nix4
-rw-r--r--nixpkgs/pkgs/tools/text/unfurl/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/uniscribe/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/unrtf/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/untex/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/uwc/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/vale/default.nix7
-rw-r--r--nixpkgs/pkgs/tools/text/vgrep/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/wdiff/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/wgetpaste/default.nix5
-rw-r--r--nixpkgs/pkgs/tools/text/xidel/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/xml/xq/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/xpaste/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/xsv/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/yaml-merge/default.nix1
-rw-r--r--nixpkgs/pkgs/tools/text/zet/default.nix1
159 files changed, 194 insertions, 62 deletions
diff --git a/nixpkgs/pkgs/tools/text/a2ps/default.nix b/nixpkgs/pkgs/tools/text/a2ps/default.nix
index dd4b7b2ca979..c275ee7d967c 100644
--- a/nixpkgs/pkgs/tools/text/a2ps/default.nix
+++ b/nixpkgs/pkgs/tools/text/a2ps/default.nix
@@ -13,11 +13,11 @@
 
 stdenv.mkDerivation rec {
   pname = "a2ps";
-  version = "4.15.5";
+  version = "4.15.6";
 
   src = fetchurl {
     url = "mirror://gnu/a2ps/a2ps-${version}.tar.gz";
-    hash = "sha256-gbsbQQTnwmOXYkUe3JeG2vPf6ziErfx9xqydII8w2n8=";
+    hash = "sha256-h/+dgByxGWkYHVuM+LZeZeWyS7DHahuCXoCY8pBvvfQ=";
   };
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/tools/text/abbreviate/default.nix b/nixpkgs/pkgs/tools/text/abbreviate/default.nix
index aedf4d173006..2f1e5bc812ab 100644
--- a/nixpkgs/pkgs/tools/text/abbreviate/default.nix
+++ b/nixpkgs/pkgs/tools/text/abbreviate/default.nix
@@ -32,6 +32,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Shorten your strings using common abbreviations";
+    mainProgram = "abbreviate";
     homepage = "https://github.com/dnnrly/abbreviate";
     changelog = "https://github.com/dnnrly/abbreviate/releases/tag/${src.rev}";
     license = licenses.asl20;
diff --git a/nixpkgs/pkgs/tools/text/agrep/default.nix b/nixpkgs/pkgs/tools/text/agrep/default.nix
index 9fe158b426ae..39de33badd77 100644
--- a/nixpkgs/pkgs/tools/text/agrep/default.nix
+++ b/nixpkgs/pkgs/tools/text/agrep/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Approximate grep for fast fuzzy string searching";
+    mainProgram = "agrep";
     homepage = "https://www.tgries.de/agrep/";
     license = licenses.isc;
     platforms = with platforms; linux ++ darwin;
diff --git a/nixpkgs/pkgs/tools/text/aha/default.nix b/nixpkgs/pkgs/tools/text/aha/default.nix
index 4ac07cef7eed..2344602a276c 100644
--- a/nixpkgs/pkgs/tools/text/aha/default.nix
+++ b/nixpkgs/pkgs/tools/text/aha/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "ANSI HTML Adapter";
+    mainProgram = "aha";
     longDescription = ''
       aha takes ANSI SGR-coloured input and produces W3C-conformant HTML code.
     '';
diff --git a/nixpkgs/pkgs/tools/text/align/default.nix b/nixpkgs/pkgs/tools/text/align/default.nix
index e3287b762e34..844b03b2c8c1 100644
--- a/nixpkgs/pkgs/tools/text/align/default.nix
+++ b/nixpkgs/pkgs/tools/text/align/default.nix
@@ -16,6 +16,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/Guitarbum722/align";
     description = "A general purpose application and library for aligning text";
+    mainProgram = "align";
     maintainers = with maintainers; [ hrhino ];
     license = licenses.mit;
   };
diff --git a/nixpkgs/pkgs/tools/text/anew/default.nix b/nixpkgs/pkgs/tools/text/anew/default.nix
index 2312d1dc69bf..58b6059a252c 100644
--- a/nixpkgs/pkgs/tools/text/anew/default.nix
+++ b/nixpkgs/pkgs/tools/text/anew/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tool for adding new lines to files, skipping duplicates";
+    mainProgram = "anew";
     homepage = "https://github.com/tomnomnom/anew";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/anewer/default.nix b/nixpkgs/pkgs/tools/text/anewer/default.nix
index e41b12cee447..69c4eb39b351 100644
--- a/nixpkgs/pkgs/tools/text/anewer/default.nix
+++ b/nixpkgs/pkgs/tools/text/anewer/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Append lines from stdin to a file if they don't already exist in the file";
+    mainProgram = "anewer";
     homepage = "https://github.com/ysf/anewer";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/ansifilter/default.nix b/nixpkgs/pkgs/tools/text/ansifilter/default.nix
index 3a4751c63f9f..e2fd695d41ec 100644
--- a/nixpkgs/pkgs/tools/text/ansifilter/default.nix
+++ b/nixpkgs/pkgs/tools/text/ansifilter/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tool to convert ANSI to other formats";
+    mainProgram = "ansifilter";
     longDescription = ''
       Tool to remove ANSI or convert them to another format
       (HTML, TeX, LaTeX, RTF, Pango or BBCode)
diff --git a/nixpkgs/pkgs/tools/text/ascii/default.nix b/nixpkgs/pkgs/tools/text/ascii/default.nix
index 613288079d34..ad9884faa17d 100644
--- a/nixpkgs/pkgs/tools/text/ascii/default.nix
+++ b/nixpkgs/pkgs/tools/text/ascii/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Interactive ASCII name and synonym chart";
+    mainProgram = "ascii";
     homepage = "http://www.catb.org/~esr/ascii/";
     license = licenses.bsd3;
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/asciigraph/default.nix b/nixpkgs/pkgs/tools/text/asciigraph/default.nix
index 17c25874f54d..518d7ce549c7 100644
--- a/nixpkgs/pkgs/tools/text/asciigraph/default.nix
+++ b/nixpkgs/pkgs/tools/text/asciigraph/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/guptarohit/asciigraph";
     description = "Lightweight ASCII line graph ╭┈╯ command line app";
+    mainProgram = "asciigraph";
     license = licenses.bsd3;
     maintainers = with maintainers; [ mmahut ];
   };
diff --git a/nixpkgs/pkgs/tools/text/autocorrect/default.nix b/nixpkgs/pkgs/tools/text/autocorrect/default.nix
index 676eec70076c..2e51672363f4 100644
--- a/nixpkgs/pkgs/tools/text/autocorrect/default.nix
+++ b/nixpkgs/pkgs/tools/text/autocorrect/default.nix
@@ -28,6 +28,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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}";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/base16384/default.nix b/nixpkgs/pkgs/tools/text/base16384/default.nix
index c9937fa5cd69..7111eece4295 100644
--- a/nixpkgs/pkgs/tools/text/base16384/default.nix
+++ b/nixpkgs/pkgs/tools/text/base16384/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Encode binary files to printable utf16be";
+    mainProgram = "base16384";
     homepage = "https://github.com/fumiama/base16384";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ aleksana ];
diff --git a/nixpkgs/pkgs/tools/text/bashblog/default.nix b/nixpkgs/pkgs/tools/text/bashblog/default.nix
index 0080ed0f7e1c..0159e20de99a 100644
--- a/nixpkgs/pkgs/tools/text/bashblog/default.nix
+++ b/nixpkgs/pkgs/tools/text/bashblog/default.nix
@@ -54,6 +54,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A single Bash script to create blogs";
+    mainProgram = "bashblog";
     homepage = "https://github.com/cfenollosa/bashblog";
     license = licenses.gpl3Only;
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/book-summary/default.nix b/nixpkgs/pkgs/tools/text/book-summary/default.nix
index a1bbe710273c..374c107f9a3d 100644
--- a/nixpkgs/pkgs/tools/text/book-summary/default.nix
+++ b/nixpkgs/pkgs/tools/text/book-summary/default.nix
@@ -16,6 +16,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Book auto-summary for gitbook and mdBook";
+    mainProgram = "book-summary";
     homepage = "https://github.com/dvogt23/book-summary";
     license = licenses.mit;
     maintainers = with teams; iog.members;
diff --git a/nixpkgs/pkgs/tools/text/boxes/default.nix b/nixpkgs/pkgs/tools/text/boxes/default.nix
index 5340c5eccff9..fe78492b36a0 100644
--- a/nixpkgs/pkgs/tools/text/boxes/default.nix
+++ b/nixpkgs/pkgs/tools/text/boxes/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A command line program which draws, removes, and repairs ASCII art boxes";
+    mainProgram = "boxes";
     homepage = "https://boxes.thomasjensen.com";
     license = licenses.gpl2;
     maintainers = with maintainers; [ waiting-for-dev ];
diff --git a/nixpkgs/pkgs/tools/text/catdocx/default.nix b/nixpkgs/pkgs/tools/text/catdocx/default.nix
index c762e15c80e2..27eb964eb3c2 100644
--- a/nixpkgs/pkgs/tools/text/catdocx/default.nix
+++ b/nixpkgs/pkgs/tools/text/catdocx/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Extracts plain text from docx files";
+    mainProgram = "catdocx";
     homepage = "https://github.com/jncraton/catdocx";
     license = with licenses; [ bsd3 ];
     maintainers = [ maintainers.michalrus ];
diff --git a/nixpkgs/pkgs/tools/text/cconv/default.nix b/nixpkgs/pkgs/tools/text/cconv/default.nix
index de8405aed43b..86aaf2d5f7c6 100644
--- a/nixpkgs/pkgs/tools/text/cconv/default.nix
+++ b/nixpkgs/pkgs/tools/text/cconv/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A iconv based simplified-traditional chinese conversion tool";
+    mainProgram = "cconv";
     homepage = "https://github.com/xiaoyjy/cconv";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/chars/default.nix b/nixpkgs/pkgs/tools/text/chars/default.nix
index 74083feb68f5..509953e8059b 100644
--- a/nixpkgs/pkgs/tools/text/chars/default.nix
+++ b/nixpkgs/pkgs/tools/text/chars/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Commandline tool to display information about unicode characters";
+    mainProgram = "chars";
     homepage = "https://github.com/antifuchs/chars";
     license = licenses.mit;
     maintainers = with maintainers; [ bbigras ];
diff --git a/nixpkgs/pkgs/tools/text/choose/default.nix b/nixpkgs/pkgs/tools/text/choose/default.nix
index f40fcd1e3b6d..b765a40f5496 100644
--- a/nixpkgs/pkgs/tools/text/choose/default.nix
+++ b/nixpkgs/pkgs/tools/text/choose/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A human-friendly and fast alternative to cut and (sometimes) awk";
+    mainProgram = "choose";
     homepage = "https://github.com/theryangeary/choose";
     license = licenses.gpl3;
     maintainers = with maintainers; [ sohalt ];
diff --git a/nixpkgs/pkgs/tools/text/cidrgrep/default.nix b/nixpkgs/pkgs/tools/text/cidrgrep/default.nix
index 0117374dadef..ddc67097fb28 100644
--- a/nixpkgs/pkgs/tools/text/cidrgrep/default.nix
+++ b/nixpkgs/pkgs/tools/text/cidrgrep/default.nix
@@ -19,6 +19,7 @@ buildGoModule {
 
   meta = {
     description = "Like grep but for IPv4 CIDRs";
+    mainProgram = "cidrgrep";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ das_j ];
   };
diff --git a/nixpkgs/pkgs/tools/text/cmigemo/default.nix b/nixpkgs/pkgs/tools/text/cmigemo/default.nix
index 179db9c337dd..09810f1e0836 100644
--- a/nixpkgs/pkgs/tools/text/cmigemo/default.nix
+++ b/nixpkgs/pkgs/tools/text/cmigemo/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A tool that supports Japanese incremental search with Romaji";
+    mainProgram = "cmigemo";
     homepage = "https://www.kaoriya.net/software/cmigemo";
     license = licenses.mit;
     maintainers = [ maintainers.cohei ];
diff --git a/nixpkgs/pkgs/tools/text/coloursum/default.nix b/nixpkgs/pkgs/tools/text/coloursum/default.nix
index 93ebf6c309e4..78f583e3f73d 100644
--- a/nixpkgs/pkgs/tools/text/coloursum/default.nix
+++ b/nixpkgs/pkgs/tools/text/coloursum/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Colourise your checksum output";
+    mainProgram = "coloursum";
     homepage = "https://github.com/ticky/coloursum";
     license = licenses.mit;
     maintainers = with maintainers; [ fgaz ];
diff --git a/nixpkgs/pkgs/tools/text/comrak/default.nix b/nixpkgs/pkgs/tools/text/comrak/default.nix
index 3b9af32c2833..e2a9633aa15a 100644
--- a/nixpkgs/pkgs/tools/text/comrak/default.nix
+++ b/nixpkgs/pkgs/tools/text/comrak/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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";
     license = licenses.bsd2;
diff --git a/nixpkgs/pkgs/tools/text/convertlit/default.nix b/nixpkgs/pkgs/tools/text/convertlit/default.nix
index 4225934d2d4e..23112e83b8c8 100644
--- a/nixpkgs/pkgs/tools/text/convertlit/default.nix
+++ b/nixpkgs/pkgs/tools/text/convertlit/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://www.convertlit.com/";
     description = "A tool for converting Microsoft Reader ebooks to more open formats";
+    mainProgram = "clit";
     license = lib.licenses.gpl2;
     platforms = lib.platforms.linux;
   };
diff --git a/nixpkgs/pkgs/tools/text/copyright-update/default.nix b/nixpkgs/pkgs/tools/text/copyright-update/default.nix
index e0318c20a0e6..72cecf1e9246 100644
--- a/nixpkgs/pkgs/tools/text/copyright-update/default.nix
+++ b/nixpkgs/pkgs/tools/text/copyright-update/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/jaalto/project--copyright-update";
     description = "Updates the copyright information in a set of files";
+    mainProgram = "copyright-update";
     license = licenses.gpl2Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.rycee ];
diff --git a/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix b/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix
index 61543001aefd..a640b11d3808 100644
--- a/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix
+++ b/nixpkgs/pkgs/tools/text/crowdin-cli/default.nix
@@ -14,11 +14,11 @@
 
 stdenv.mkDerivation rec {
   pname = "crowdin-cli";
-  version = "3.18.0";
+  version = "3.19.0";
 
   src = fetchurl {
     url = "https://github.com/crowdin/${pname}/releases/download/${version}/${pname}.zip";
-    hash = "sha256-wktEg9JPokKeyEOdK9j55XSefj4rleU1ig5exP83j/g=";
+    hash = "sha256-E8I5yWOEGZwiM3oHhmZhvppuCAWLDFx7X7DVfo29W+U=";
   };
 
   nativeBuildInputs = [ installShellFiles makeWrapper unzip ];
diff --git a/nixpkgs/pkgs/tools/text/csvdiff/default.nix b/nixpkgs/pkgs/tools/text/csvdiff/default.nix
index 236993b2dd25..b7e68a709122 100644
--- a/nixpkgs/pkgs/tools/text/csvdiff/default.nix
+++ b/nixpkgs/pkgs/tools/text/csvdiff/default.nix
@@ -19,6 +19,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://aswinkarthik.github.io/csvdiff/";
     description = "A fast diff tool for comparing csv files";
+    mainProgram = "csvdiff";
     license = licenses.mit;
     maintainers = with maintainers; [ turion ];
   };
diff --git a/nixpkgs/pkgs/tools/text/csview/default.nix b/nixpkgs/pkgs/tools/text/csview/default.nix
index 8f5ed7989f47..49bd81c7e01e 100644
--- a/nixpkgs/pkgs/tools/text/csview/default.nix
+++ b/nixpkgs/pkgs/tools/text/csview/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A high performance csv viewer with cjk/emoji support";
+    mainProgram = "csview";
     homepage = "https://github.com/wfxr/csview";
     license = with licenses; [ mit /* or */ asl20 ];
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/dadadodo/default.nix b/nixpkgs/pkgs/tools/text/dadadodo/default.nix
index a70a7efda72e..dc1a18ae23f2 100644
--- a/nixpkgs/pkgs/tools/text/dadadodo/default.nix
+++ b/nixpkgs/pkgs/tools/text/dadadodo/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Markov chain-based text generator";
+    mainProgram = "dadadodo";
     homepage = "http://www.jwz.org/dadadodo";
     maintainers = with maintainers; [ pSub ];
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/dfmt/default.nix b/nixpkgs/pkgs/tools/text/dfmt/default.nix
index f09ce0b45256..c31335e560f1 100644
--- a/nixpkgs/pkgs/tools/text/dfmt/default.nix
+++ b/nixpkgs/pkgs/tools/text/dfmt/default.nix
@@ -20,6 +20,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Format paragraphs, comments and doc strings";
+    mainProgram = "dfmt";
     homepage = "https://github.com/dmerejkowsky/dfmt";
     license = licenses.bsd3;
     maintainers = with maintainers; [ cole-h ];
diff --git a/nixpkgs/pkgs/tools/text/diffr/default.nix b/nixpkgs/pkgs/tools/text/diffr/default.nix
index ee12b39c3ec3..9abc2fac5150 100644
--- a/nixpkgs/pkgs/tools/text/diffr/default.nix
+++ b/nixpkgs/pkgs/tools/text/diffr/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Yet another diff highlighting tool";
+    mainProgram = "diffr";
     homepage = "https://github.com/mookid/diffr";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ davidtwco ];
diff --git a/nixpkgs/pkgs/tools/text/diffstat/default.nix b/nixpkgs/pkgs/tools/text/diffstat/default.nix
index 0b10014e0e6e..0e5b8d9a7174 100644
--- a/nixpkgs/pkgs/tools/text/diffstat/default.nix
+++ b/nixpkgs/pkgs/tools/text/diffstat/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Read output of diff and display a histogram of the changes";
+    mainProgram = "diffstat";
     longDescription = ''
       diffstat reads the output of diff and displays a histogram of the
       insertions, deletions, and modifications per-file. It is useful for
diff --git a/nixpkgs/pkgs/tools/text/difftastic/default.nix b/nixpkgs/pkgs/tools/text/difftastic/default.nix
index e1733800cdfe..01f62462fdd8 100644
--- a/nixpkgs/pkgs/tools/text/difftastic/default.nix
+++ b/nixpkgs/pkgs/tools/text/difftastic/default.nix
@@ -38,11 +38,6 @@ rustPlatform.buildRustPackage rec {
     "--skip=options::tests::test_detect_display_width"
   ];
 
-  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
-  env = lib.optionalAttrs stdenv.cc.isClang {
-    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
-  };
-
   postPatch = ''
     patch -d $cargoDepsCopy/libmimalloc-sys-0.1.24/c_src/mimalloc \
       -p1 < ${mimallocPatch}
diff --git a/nixpkgs/pkgs/tools/text/dirdiff/default.nix b/nixpkgs/pkgs/tools/text/dirdiff/default.nix
index 437743e66ef6..c0347aface09 100644
--- a/nixpkgs/pkgs/tools/text/dirdiff/default.nix
+++ b/nixpkgs/pkgs/tools/text/dirdiff/default.nix
@@ -52,6 +52,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Graphical directory tree diff and merge tool";
+    mainProgram = "dirdiff";
     longDescription = ''
       Dirdiff is a graphical tool for displaying the differences between
       directory trees and for merging changes from one tree into another.
diff --git a/nixpkgs/pkgs/tools/text/djot-js/default.nix b/nixpkgs/pkgs/tools/text/djot-js/default.nix
index bd8b742cc184..656d7d0f6ba8 100644
--- a/nixpkgs/pkgs/tools/text/djot-js/default.nix
+++ b/nixpkgs/pkgs/tools/text/djot-js/default.nix
@@ -1,32 +1,21 @@
 { lib
 , buildNpmPackage
 , fetchFromGitHub
-, fetchpatch
 , installShellFiles
 }:
 
 buildNpmPackage rec {
   pname = "djot-js";
-  version = "0.2.3";
+  version = "0.3.1";
 
   src = fetchFromGitHub {
     owner = "jgm";
     repo = "djot.js";
     rev = "@djot/djot@${version}";
-    hash = "sha256-W/ZQXJXvFEIgj5PeI+jvw4nIkNP4qa1NyQCOv0unIuA=";
+    hash = "sha256-dQfjI+8cKqn4qLT9eUKfCP++BFCWQ/MmrlQNVRNCFuU=";
   };
 
-  npmDepsHash = "sha256-x/Oc39S6XwZ/ZsS/lmMU9OkHLlKuUxETYmD8pdHAIg8=";
-
-  patches = [
-    # djot.js v0.2.3 doesn't include package-lock.json in the repository
-    # remove at next release
-    (fetchpatch {
-      name = "add-package-lock-json-and-yarn-lock-to-repository.patch";
-      url = "https://github.com/jgm/djot.js/commit/15ed52755b2968932d4a9a80805b9ea6183fe539.patch";
-      hash = "sha256-saNmU7z4IOOG3ptXMFDSNci5uu0d2GiVZ/FAlaNccTc=";
-    })
-  ];
+  npmDepsHash = "sha256-FjrjwhVv2WRjbEga9w37lwz7KYgTTHGsoqt496Uq/0c=";
 
   nativeBuildInputs = [
     installShellFiles
diff --git a/nixpkgs/pkgs/tools/text/each/default.nix b/nixpkgs/pkgs/tools/text/each/default.nix
index 02974030b269..6f24ee66fe40 100644
--- a/nixpkgs/pkgs/tools/text/each/default.nix
+++ b/nixpkgs/pkgs/tools/text/each/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = " A better way of working with structured data on the command line";
+    mainProgram = "each";
     homepage = "https://github.com/arraypad/each";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ thiagokokada ];
diff --git a/nixpkgs/pkgs/tools/text/epubcheck/default.nix b/nixpkgs/pkgs/tools/text/epubcheck/default.nix
index fd84abb0ef06..abd2803508bb 100644
--- a/nixpkgs/pkgs/tools/text/epubcheck/default.nix
+++ b/nixpkgs/pkgs/tools/text/epubcheck/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/w3c/epubcheck";
     description = "Validation tool for EPUB";
+    mainProgram = "epubcheck";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = with licenses; [ asl20 bsd3 mpl10 w3c ];
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/esh/default.nix b/nixpkgs/pkgs/tools/text/esh/default.nix
index a1d6db2a7c2d..abbeb29234da 100644
--- a/nixpkgs/pkgs/tools/text/esh/default.nix
+++ b/nixpkgs/pkgs/tools/text/esh/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Simple templating engine based on shell";
+    mainProgram = "esh";
     homepage = "https://github.com/jirutka/esh";
     license = licenses.mit;
     maintainers = with maintainers; [ mnacamura ];
diff --git a/nixpkgs/pkgs/tools/text/fanficfare/default.nix b/nixpkgs/pkgs/tools/text/fanficfare/default.nix
index 149082cc995f..adf141514038 100644
--- a/nixpkgs/pkgs/tools/text/fanficfare/default.nix
+++ b/nixpkgs/pkgs/tools/text/fanficfare/default.nix
@@ -30,6 +30,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for making eBooks from fanfiction web sites";
+    mainProgram = "fanficfare";
     homepage = "https://github.com/JimmXinu/FanFicFare";
     license = licenses.gpl3;
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/fastmod/default.nix b/nixpkgs/pkgs/tools/text/fastmod/default.nix
index f8317d70d778..53d68a7723a6 100644
--- a/nixpkgs/pkgs/tools/text/fastmod/default.nix
+++ b/nixpkgs/pkgs/tools/text/fastmod/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A utility that makes sweeping changes to large, shared code bases";
+    mainProgram = "fastmod";
     homepage = "https://github.com/facebookincubator/fastmod";
     license = licenses.asl20;
     maintainers = with maintainers; [ jduan ];
diff --git a/nixpkgs/pkgs/tools/text/frangipanni/default.nix b/nixpkgs/pkgs/tools/text/frangipanni/default.nix
index bb144b8f43e1..f95c6b4f1636 100644
--- a/nixpkgs/pkgs/tools/text/frangipanni/default.nix
+++ b/nixpkgs/pkgs/tools/text/frangipanni/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Convert lines of text into a tree structure";
+    mainProgram = "frangipanni";
     homepage = "https://github.com/birchb1024/frangipanni";
     license = licenses.mit;
     maintainers = with maintainers; [ siraben ];
diff --git a/nixpkgs/pkgs/tools/text/frawk/default.nix b/nixpkgs/pkgs/tools/text/frawk/default.nix
index 230d1328d457..46f73ebd0b9c 100644
--- a/nixpkgs/pkgs/tools/text/frawk/default.nix
+++ b/nixpkgs/pkgs/tools/text/frawk/default.nix
@@ -31,16 +31,12 @@ rustPlatform.buildRustPackage rec {
     export RUSTC_BOOTSTRAP=1
   '';
 
-  # Work around https://github.com/NixOS/nixpkgs/issues/166205.
-  env = lib.optionalAttrs stdenv.cc.isClang {
-    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
-  };
-
   # depends on cpu instructions that may not be available on builders
   doCheck = false;
 
   meta = with lib; {
     description = "A 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}";
     license = with licenses; [ mit /* or */ asl20 ];
diff --git a/nixpkgs/pkgs/tools/text/frogmouth/default.nix b/nixpkgs/pkgs/tools/text/frogmouth/default.nix
index 68d63dc7aa5f..e7c9916c1339 100644
--- a/nixpkgs/pkgs/tools/text/frogmouth/default.nix
+++ b/nixpkgs/pkgs/tools/text/frogmouth/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A Markdown browser for your terminal";
+    mainProgram = "frogmouth";
     homepage = "https://github.com/Textualize/frogmouth";
     changelog = "https://github.com/Textualize/frogmouth/blob/${src.rev}/ChangeLog.md";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/fst/default.nix b/nixpkgs/pkgs/tools/text/fst/default.nix
index d08d29376b74..0ad2075de08f 100644
--- a/nixpkgs/pkgs/tools/text/fst/default.nix
+++ b/nixpkgs/pkgs/tools/text/fst/default.nix
@@ -31,6 +31,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Represent large sets and maps compactly with finite state transducers";
+    mainProgram = "fst";
     homepage = "https://github.com/BurntSushi/fst";
     license = with licenses; [ unlicense /* or */ mit ];
     maintainers = with maintainers; [ rmcgibbo ];
diff --git a/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix b/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
index be50b93a7e2f..86bf2beaa91d 100644
--- a/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
+++ b/nixpkgs/pkgs/tools/text/gawk/gawkextlib.nix
@@ -45,6 +45,7 @@ let
         meta = with lib; {
           homepage = "https://sourceforge.net/projects/gawkextlib/";
           description = "Dynamically loaded extension libraries for GNU AWK";
+          mainProgram = "xmlgawk";
           longDescription = ''
             The gawkextlib project provides several extension libraries for
             gawk (GNU AWK), as well as libgawkextlib containing some APIs that
diff --git a/nixpkgs/pkgs/tools/text/gjo/default.nix b/nixpkgs/pkgs/tools/text/gjo/default.nix
index 99d988797bfc..d7fcd3a0845a 100644
--- a/nixpkgs/pkgs/tools/text/gjo/default.nix
+++ b/nixpkgs/pkgs/tools/text/gjo/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Small utility to create JSON objects";
+    mainProgram = "gjo";
     homepage = "https://github.com/skanehira/gjo";
     license = licenses.mit;
     maintainers = with maintainers; [ doronbehar ];
diff --git a/nixpkgs/pkgs/tools/text/glogg/default.nix b/nixpkgs/pkgs/tools/text/glogg/default.nix
index 855490df4ab4..a83baf4aa761 100644
--- a/nixpkgs/pkgs/tools/text/glogg/default.nix
+++ b/nixpkgs/pkgs/tools/text/glogg/default.nix
@@ -29,6 +29,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "The 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/nixpkgs/pkgs/tools/text/gnupatch/default.nix b/nixpkgs/pkgs/tools/text/gnupatch/default.nix
index f4cb20202f0b..c19e087ea547 100644
--- a/nixpkgs/pkgs/tools/text/gnupatch/default.nix
+++ b/nixpkgs/pkgs/tools/text/gnupatch/default.nix
@@ -42,6 +42,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "GNU Patch, a program to apply differences to files";
+    mainProgram = "patch";
 
     longDescription =
       '' GNU Patch takes a patch file containing a difference listing
diff --git a/nixpkgs/pkgs/tools/text/gtranslator/default.nix b/nixpkgs/pkgs/tools/text/gtranslator/default.nix
index 5c9c7c868738..8795ff33806a 100644
--- a/nixpkgs/pkgs/tools/text/gtranslator/default.nix
+++ b/nixpkgs/pkgs/tools/text/gtranslator/default.nix
@@ -60,6 +60,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GNOME translation making program";
+    mainProgram = "gtranslator";
     homepage = "https://wiki.gnome.org/Apps/Gtranslator";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
diff --git a/nixpkgs/pkgs/tools/text/gtree/default.nix b/nixpkgs/pkgs/tools/text/gtree/default.nix
index 266b807c3f60..e9710ae7a654 100644
--- a/nixpkgs/pkgs/tools/text/gtree/default.nix
+++ b/nixpkgs/pkgs/tools/text/gtree/default.nix
@@ -7,16 +7,16 @@
 
 buildGoModule rec {
   pname = "gtree";
-  version = "1.10.9";
+  version = "1.10.10";
 
   src = fetchFromGitHub {
     owner = "ddddddO";
     repo = "gtree";
     rev = "v${version}";
-    hash = "sha256-3OXrKt3rM166JXqFuB+S0BJJkmkHPzJaWDDFeClmdM8=";
+    hash = "sha256-sljqO1aYVD7l3ngAeShqzAXKSannBHY7Cx19Kf1xPa0=";
   };
 
-  vendorHash = "sha256-5biKUOzYaVY+52f0ewvHslAnb+BM0BuqGrU8wwA3t+E=";
+  vendorHash = "sha256-yxbnASN3vUpRdsxfVsN/zigfpPJKcJaLfFBTtUUW2t0=";
 
   subPackages = [
     "cmd/gtree"
@@ -37,6 +37,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Generate directory trees and directories using Markdown or programmatically";
+    mainProgram = "gtree";
     homepage = "https://github.com/ddddddO/gtree";
     changelog = "https://github.com/ddddddO/gtree/releases/tag/${src.rev}";
     license = licenses.bsd2;
diff --git a/nixpkgs/pkgs/tools/text/gucci/default.nix b/nixpkgs/pkgs/tools/text/gucci/default.nix
index f866f74710a9..324dc56ca264 100644
--- a/nixpkgs/pkgs/tools/text/gucci/default.nix
+++ b/nixpkgs/pkgs/tools/text/gucci/default.nix
@@ -31,6 +31,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A simple CLI templating tool written in golang";
+    mainProgram = "gucci";
     homepage = "https://github.com/noqcks/gucci";
     license = licenses.mit;
     maintainers = with maintainers; [ braydenjw ];
diff --git a/nixpkgs/pkgs/tools/text/hck/default.nix b/nixpkgs/pkgs/tools/text/hck/default.nix
index 0467894b116a..782d746398a1 100644
--- a/nixpkgs/pkgs/tools/text/hck/default.nix
+++ b/nixpkgs/pkgs/tools/text/hck/default.nix
@@ -12,10 +12,10 @@ rustPlatform.buildRustPackage rec {
     owner = "sstadick";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-KPpvai7+El2JA97EXDCstZ66FeyVCe7w+ERDDNRZ/h8=";
+    hash = "sha256-KPpvai7+El2JA97EXDCstZ66FeyVCe7w+ERDDNRZ/h8=";
   };
 
-  cargoSha256 = "sha256-TpwUO0BL8kambnxAUE9+l6YYkNL1WzmkTYn1YxjufdY=";
+  cargoHash = "sha256-TpwUO0BL8kambnxAUE9+l6YYkNL1WzmkTYn1YxjufdY=";
 
   nativeBuildInputs = [ cmake ];
 
@@ -25,5 +25,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/sstadick/hck/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ mit /* or */ unlicense ];
     maintainers = with maintainers; [ figsoda ];
+    mainProgram = "hck";
   };
 }
diff --git a/nixpkgs/pkgs/tools/text/hcledit/default.nix b/nixpkgs/pkgs/tools/text/hcledit/default.nix
index d5b2fb0cc0a2..a39802d02822 100644
--- a/nixpkgs/pkgs/tools/text/hcledit/default.nix
+++ b/nixpkgs/pkgs/tools/text/hcledit/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A command line editor for HCL";
+    mainProgram = "hcledit";
     homepage = "https://github.com/minamijoyo/hcledit";
     license = licenses.mit;
     maintainers = with maintainers; [ aleksana ];
diff --git a/nixpkgs/pkgs/tools/text/highlight/default.nix b/nixpkgs/pkgs/tools/text/highlight/default.nix
index 7e02f3f60ceb..fc6b12fa6b16 100644
--- a/nixpkgs/pkgs/tools/text/highlight/default.nix
+++ b/nixpkgs/pkgs/tools/text/highlight/default.nix
@@ -51,6 +51,7 @@ let
 
     meta = with lib; {
       description = "Source code highlighting tool";
+      mainProgram = "highlight";
       homepage = "http://www.andre-simon.de/doku/highlight/en/highlight.php";
       platforms = platforms.unix;
       maintainers = with maintainers; [ willibutz ];
diff --git a/nixpkgs/pkgs/tools/text/html2text/default.nix b/nixpkgs/pkgs/tools/text/html2text/default.nix
index 7ef802e925fb..4bcf02b5c848 100644
--- a/nixpkgs/pkgs/tools/text/html2text/default.nix
+++ b/nixpkgs/pkgs/tools/text/html2text/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Convert HTML to plain text";
+    mainProgram = "html2text";
     homepage = "http://www.mbayer.de/html2text/";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/huniq/default.nix b/nixpkgs/pkgs/tools/text/huniq/default.nix
index a1d30d2fb11d..3bb1252ae0c6 100644
--- a/nixpkgs/pkgs/tools/text/huniq/default.nix
+++ b/nixpkgs/pkgs/tools/text/huniq/default.nix
@@ -13,6 +13,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Command line utility to remove duplicates from the given input";
+    mainProgram = "huniq";
     homepage = "https://github.com/koraa/huniq";
     license = licenses.bsd3;
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/hyx/default.nix b/nixpkgs/pkgs/tools/text/hyx/default.nix
index f599d067f094..3cbcac20966a 100644
--- a/nixpkgs/pkgs/tools/text/hyx/default.nix
+++ b/nixpkgs/pkgs/tools/text/hyx/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "minimalistic but powerful Linux console hex editor";
+    mainProgram = "hyx";
     homepage = "https://yx7.cc/code/";
     license = licenses.mit;
     maintainers = with maintainers; [ fpletz ];
diff --git a/nixpkgs/pkgs/tools/text/invoice2data/default.nix b/nixpkgs/pkgs/tools/text/invoice2data/default.nix
index aed1bd2afd50..b2179d3f63b2 100644
--- a/nixpkgs/pkgs/tools/text/invoice2data/default.nix
+++ b/nixpkgs/pkgs/tools/text/invoice2data/default.nix
@@ -57,6 +57,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Data extractor for PDF invoices";
+    mainProgram = "invoice2data";
     homepage = "https://github.com/invoice-x/invoice2data";
     license = licenses.mit;
     maintainers = with maintainers; [ psyanticy ];
diff --git a/nixpkgs/pkgs/tools/text/jen/default.nix b/nixpkgs/pkgs/tools/text/jen/default.nix
index 2361c1aafc1b..0ed0548c0d50 100644
--- a/nixpkgs/pkgs/tools/text/jen/default.nix
+++ b/nixpkgs/pkgs/tools/text/jen/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple CLI generation tool for creating large datasets";
+    mainProgram = "jen";
     homepage = "https://github.com/whitfin/jen";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/jotdown/default.nix b/nixpkgs/pkgs/tools/text/jotdown/default.nix
index e39209cfe106..769b5e296887 100644
--- a/nixpkgs/pkgs/tools/text/jotdown/default.nix
+++ b/nixpkgs/pkgs/tools/text/jotdown/default.nix
@@ -5,19 +5,20 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "jotdown";
-  version = "0.3.2";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     owner = "hellux";
     repo = "jotdown";
     rev = version;
-    hash = "sha256-XouI3PHKPtX+3GkhMvdRfwJkCoofMgCY/NXB0tnLyUc=";
+    hash = "sha256-Q1BjmcA5otOkeEe8KQiqKGKHSeGntj+ktcNMrdbGHZI=";
   };
 
-  cargoHash = "sha256-PvKXVP90GOAgz4Sc37B4hli7rbNHVZbksVAo+uy2yEU=";
+  cargoHash = "sha256-bkMJ7ApM+GsshwIFuYsH19CnU6ebq0GfwQvVp9QD46A=";
 
   meta = with lib; {
     description = "A minimal Djot CLI";
+    mainProgram = "jotdown";
     homepage = "https://github.com/hellux/jotdown";
     changelog = "https://github.com/hellux/jotdown/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/jsawk/default.nix b/nixpkgs/pkgs/tools/text/jsawk/default.nix
index 2f21900b8d01..9547e65dc43d 100644
--- a/nixpkgs/pkgs/tools/text/jsawk/default.nix
+++ b/nixpkgs/pkgs/tools/text/jsawk/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Like awk, but for JSON";
+    mainProgram = "jsawk";
     homepage = "https://github.com/micha/jsawk";
     license = lib.licenses.publicDomain;
     maintainers = with lib.maintainers; [ puffnfresh ];
diff --git a/nixpkgs/pkgs/tools/text/jumanpp/default.nix b/nixpkgs/pkgs/tools/text/jumanpp/default.nix
index 348c785ab28d..af141c873b3b 100644
--- a/nixpkgs/pkgs/tools/text/jumanpp/default.nix
+++ b/nixpkgs/pkgs/tools/text/jumanpp/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
+    mainProgram = "jumanpp";
     longDescription = ''
       JUMAN++ is a new morphological analyser that considers semantic
       plausibility of word sequences by using a recurrent neural network
diff --git a/nixpkgs/pkgs/tools/text/kdiff3/default.nix b/nixpkgs/pkgs/tools/text/kdiff3/default.nix
index f9f55bc28851..73fa2ed1baea 100644
--- a/nixpkgs/pkgs/tools/text/kdiff3/default.nix
+++ b/nixpkgs/pkgs/tools/text/kdiff3/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Compares and merges 2 or 3 files or directories";
+    mainProgram = "kdiff3";
     homepage = "https://invent.kde.org/sdk/kdiff3";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/nixpkgs/pkgs/tools/text/l2md/default.nix b/nixpkgs/pkgs/tools/text/l2md/default.nix
index 08ec219690f6..d8bb04378f07 100644
--- a/nixpkgs/pkgs/tools/text/l2md/default.nix
+++ b/nixpkgs/pkgs/tools/text/l2md/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Convert public-inbox archives to maildir messages";
+    mainProgram = "l2md";
     longDescription = ''
       Quick and dirty hack to import lore.kernel.org list archives via git,
       to export them in maildir format or through a pipe, and to keep them
diff --git a/nixpkgs/pkgs/tools/text/mairix/default.nix b/nixpkgs/pkgs/tools/text/mairix/default.nix
index aa58ecdd35a9..3528a054b291 100644
--- a/nixpkgs/pkgs/tools/text/mairix/default.nix
+++ b/nixpkgs/pkgs/tools/text/mairix/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
     homepage = "http://www.rc0.org.uk/mairix";
     license = lib.licenses.gpl2Plus;
     description = "Program for indexing and searching email messages stored in maildir, MH or mbox";
+    mainProgram = "mairix";
     maintainers = with lib.maintainers; [viric];
     platforms = with lib.platforms; all;
   };
diff --git a/nixpkgs/pkgs/tools/text/mark/default.nix b/nixpkgs/pkgs/tools/text/mark/default.nix
index 33d6072c8c81..ca42b2687edc 100644
--- a/nixpkgs/pkgs/tools/text/mark/default.nix
+++ b/nixpkgs/pkgs/tools/text/mark/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tool for syncing your markdown documentation with Atlassian Confluence pages";
+    mainProgram = "mark";
     homepage = "https://github.com/kovetskiy/mark";
     license = licenses.asl20;
     maintainers = with maintainers; [ rguevara84 ];
diff --git a/nixpkgs/pkgs/tools/text/markscribe/default.nix b/nixpkgs/pkgs/tools/text/markscribe/default.nix
index d542fe281107..c2ee3a596e97 100644
--- a/nixpkgs/pkgs/tools/text/markscribe/default.nix
+++ b/nixpkgs/pkgs/tools/text/markscribe/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Your personal markdown scribe with template-engine and Git(Hub) & RSS powers";
+    mainProgram = "markscribe";
     homepage = "https://github.com/muesli/markscribe";
     changelog = "https://github.com/muesli/markscribe/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/math-review/default.nix b/nixpkgs/pkgs/tools/text/math-review/default.nix
index 3592aad8bec7..6206c67bf1c1 100644
--- a/nixpkgs/pkgs/tools/text/math-review/default.nix
+++ b/nixpkgs/pkgs/tools/text/math-review/default.nix
@@ -25,6 +25,7 @@ buildNpmPackage rec {
 
   meta = with lib; {
     description = "Emacs preview math inline";
+    mainProgram = "math-preview";
     license = licenses.gpl3Plus;
     homepage = "https://gitlab.com/matsievskiysv/math-preview";
     maintainers = with maintainers; [ renesat ];
diff --git a/nixpkgs/pkgs/tools/text/mawk/default.nix b/nixpkgs/pkgs/tools/text/mawk/default.nix
index 54e1e303fd4c..06dcdcd8a9ba 100644
--- a/nixpkgs/pkgs/tools/text/mawk/default.nix
+++ b/nixpkgs/pkgs/tools/text/mawk/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Interpreter for the AWK Programming Language";
+    mainProgram = "mawk";
     homepage = "https://invisible-island.net/mawk/mawk.html";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ehmry ];
diff --git a/nixpkgs/pkgs/tools/text/mb2md/default.nix b/nixpkgs/pkgs/tools/text/mb2md/default.nix
index 78ce7f593974..3594d4753d85 100644
--- a/nixpkgs/pkgs/tools/text/mb2md/default.nix
+++ b/nixpkgs/pkgs/tools/text/mb2md/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "mbox to maildir tool";
+    mainProgram = "mb2md";
     license = licenses.publicDomain;
     platforms = platforms.all;
     maintainers = [ maintainers.jb55 ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix b/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix
index 1fc72d16c3ce..1deaf9bc7c2b 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-admonish/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to add Material Design admonishments";
+    mainProgram = "mdbook-admonish";
     license = licenses.mit;
     maintainers = with maintainers; [ jmgilman Frostman ];
     homepage = "https://github.com/tommilligan/mdbook-admonish";
diff --git a/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix b/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix
index 07252461336c..05d27d3e3ad5 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-cmdrun/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "mdbook preprocessor to run arbitrary commands";
+    mainProgram = "mdbook-cmdrun";
     homepage = "https://github.com/FauconFan/mdbook-cmdrun";
     license = licenses.mit;
     maintainers = with maintainers; [ pinpox ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix b/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix
index e8a5f169399e..afff44b9f473 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-d2/default.nix
@@ -25,6 +25,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "D2 diagram generator plugin for MdBook";
+    mainProgram = "mdbook-d2";
     homepage = "https://github.com/danieleades/mdbook-d2";
     changelog = "https://github.com/danieleades/mdbook-d2/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix b/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix
index 0bbcffd28fe2..21c8e48468a2 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-emojicodes/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "MDBook preprocessor for converting emojicodes (e.g. `: cat :`) into emojis 🐱";
+    mainProgram = "mdbook-emojicodes";
     homepage = "https://github.com/blyxyas/mdbook-emojicodes";
     changelog = "https://github.com/blyxyas/mdbook-emojicodes/releases/tag/${version}";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix b/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix
index 47c118afa43a..16e3bff73443 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-epub/default.nix
@@ -34,6 +34,7 @@ in rustPlatform.buildRustPackage {
 
   meta = with lib; {
     description = "mdbook backend for generating an e-book in the EPUB format";
+    mainProgram = "mdbook-epub";
     homepage = "https://michael-f-bryan.github.io/mdbook-epub";
     license = licenses.mpl20;
     maintainers = with maintainers; [ yuu ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix b/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix
index d69c7e4fdd86..cc140a5b5d83 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-footnote/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to support the inclusion of automatically numbered footnotes";
+    mainProgram = "mdbook-footnote";
     homepage = "https://github.com/daviddrysdale/mdbook-footnote";
     license = licenses.asl20;
     maintainers = with maintainers; [ brianmcgillion ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix b/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix
index ddb4f48fd2f7..c854d4be35a0 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-graphviz/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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}";
     license = [ licenses.mpl20 ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix b/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix
index dc0c9da3c15e..8d27976c346b 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-katex/default.nix
@@ -2,19 +2,20 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "mdbook-katex";
-  version = "0.5.10";
+  version = "0.6.0";
 
   src = fetchCrate {
     inherit pname version;
-    hash = "sha256-yq5cKb9Kzto+vM1/FEZhxB/+sHY7H0S1knSEtVklJvk=";
+    hash = "sha256-kQZZpVF265QmEle2HPSSHOaZFl/z/1Uvx0Fs+21HnLI=";
   };
 
-  cargoHash = "sha256-GtQoWNOs1SU8yoMyxh81weqMkhhRC09tNuTBNPoPj7U=";
+  cargoHash = "sha256-/IBJWGi1jYwFHdYZv8/AHiBP9oLtOVW0sLJVOQJutXA=";
 
   buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
 
   meta = with lib; {
     description = "A preprocessor for mdbook, rendering LaTeX equations to HTML at build time";
+    mainProgram = "mdbook-katex";
     homepage = "https://github.com/lzanini/${pname}";
     license = [ licenses.mit ];
     maintainers = with maintainers; [ lovesegfault ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix b/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
index 07fd2cd634dd..d419d8b0c116 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
@@ -33,6 +33,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Render Kroki diagrams from files or code blocks in mdbook";
+    mainProgram = "mdbook-kroki-preprocessor";
     homepage = "https://github.com/joelcourtney/mdbook-kroki-preprocessor";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ blaggacao ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix b/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix
index c144ea4be954..d90b536edc86 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-linkcheck/default.nix
@@ -26,6 +26,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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;
     maintainers = with maintainers; [ zhaofengli ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-man/default.nix b/nixpkgs/pkgs/tools/text/mdbook-man/default.nix
index 541e27eb7e06..904a4d29112e 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-man/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-man/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Generate manual pages from mdBooks";
+    mainProgram = "mdbook-man";
     homepage = "https://github.com/vv9k/mdbook-man";
     license = licenses.mit;
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix b/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix
index f5bf827cfd7f..b69dd103917d 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-mermaid/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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";
     license = licenses.mpl20;
diff --git a/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix b/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix
index 8ce422340ed0..68a7c504345c 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-open-on-gh/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "mdbook preprocessor to add a open-on-github link on every page";
+    mainProgram = "mdbook-open-on-gh";
     homepage = "https://github.com/badboy/mdbook-open-on-gh";
     license = [ licenses.mpl20 ];
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix b/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix
index acfec960829a..2cd4afee9616 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-pagetoc/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Table of contents for mdbook (in sidebar)";
+    mainProgram = "mdbook-pagetoc";
     homepage = "https://github.com/slowsage/mdbook-pagetoc";
     license = licenses.mit;
     maintainers = with maintainers; [ blaggacao ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix b/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix
index 18b234a4ec08..e0c63f595db1 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-pdf/default.nix
@@ -44,6 +44,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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}";
     license = licenses.gpl3Plus;
diff --git a/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix b/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix
index 3e6d13d24489..e07bd812cec9 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-plantuml/default.nix
@@ -37,6 +37,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "mdBook preprocessor to render PlantUML diagrams to png images in the book output directory";
+    mainProgram = "mdbook-plantuml";
     homepage = "https://github.com/sytsereitsma/mdbook-plantuml";
     license = [ licenses.mit ];
     maintainers = with maintainers; [ jcouyang ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix b/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix
index b9bf0ca208c8..3ee6fb6e814f 100644
--- a/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook-toc/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to add inline Table of Contents support";
+    mainProgram = "mdbook-toc";
     homepage = "https://github.com/badboy/mdbook-toc";
     license = [ licenses.mpl20 ];
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/nixpkgs/pkgs/tools/text/mdbook/default.nix b/nixpkgs/pkgs/tools/text/mdbook/default.nix
index 2a875f23287f..4939cfc62623 100644
--- a/nixpkgs/pkgs/tools/text/mdbook/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdbook/default.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Create books from MarkDown";
+    mainProgram = "mdbook";
     homepage = "https://github.com/rust-lang/mdBook";
     changelog = "https://github.com/rust-lang/mdBook/blob/v${version}/CHANGELOG.md";
     license = [ licenses.mpl20 ];
diff --git a/nixpkgs/pkgs/tools/text/mdcat/default.nix b/nixpkgs/pkgs/tools/text/mdcat/default.nix
index 6fa512c39bf3..a928b74a1518 100644
--- a/nixpkgs/pkgs/tools/text/mdcat/default.nix
+++ b/nixpkgs/pkgs/tools/text/mdcat/default.nix
@@ -13,20 +13,20 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "mdcat";
-  version = "2.1.1";
+  version = "2.1.2";
 
   src = fetchFromGitHub {
     owner = "swsnr";
     repo = "mdcat";
     rev = "mdcat-${version}";
-    hash = "sha256-2ThjIv77kdjHyOpGcQplYZXPdu+cN4oBnyHRGptN7f4=";
+    hash = "sha256-qdNORp9THxHWR95uVcYtCy59OQqdop1012thZN5i64w=";
   };
 
   nativeBuildInputs = [ pkg-config asciidoctor installShellFiles ];
   buildInputs = [ openssl ]
     ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
 
-  cargoHash = "sha256-y828L8HHkFeem/76yizQWX7DpCGQP+HzJP+pQnxAn70=";
+  cargoHash = "sha256-/avxRvT35LxCBWkTYJDCtdd95VC67epZIPCMv994uBo=";
 
   nativeCheckInputs = [ ansi2html ];
   # Skip tests that use the network and that include files.
diff --git a/nixpkgs/pkgs/tools/text/mir-qualia/default.nix b/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
index f532daf8c442..0ded2f1757b2 100644
--- a/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
+++ b/nixpkgs/pkgs/tools/text/mir-qualia/default.nix
@@ -14,6 +14,7 @@ pythonPackages.buildPythonApplication rec {
 
   meta = {
     description = "Dynamically enable sections of config files";
+    mainProgram = "qualia";
     homepage = "https://github.com/darkfeline/mir.qualia";
     license = lib.licenses.asl20;
     maintainers = [ lib.maintainers.srhb ] ;
diff --git a/nixpkgs/pkgs/tools/text/mmdoc/default.nix b/nixpkgs/pkgs/tools/text/mmdoc/default.nix
index 50b7f6dcb9df..e7bf45dbb4c8 100644
--- a/nixpkgs/pkgs/tools/text/mmdoc/default.nix
+++ b/nixpkgs/pkgs/tools/text/mmdoc/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Minimal Markdown Documentation";
+    mainProgram = "mmdoc";
     homepage = "https://github.com/ryantm/mmdoc";
     license = licenses.cc0;
     maintainers = with maintainers; [ ryantm ];
diff --git a/nixpkgs/pkgs/tools/text/morsel/default.nix b/nixpkgs/pkgs/tools/text/morsel/default.nix
index b761b03e83d0..416f2e65782f 100644
--- a/nixpkgs/pkgs/tools/text/morsel/default.nix
+++ b/nixpkgs/pkgs/tools/text/morsel/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Command line tool to translate morse code input to text in real time";
+    mainProgram = "morsel";
     homepage = "https://github.com/SamLee514/morsel";
     license = licenses.mit;
     maintainers = with maintainers; [ siraben ];
diff --git a/nixpkgs/pkgs/tools/text/mpage/default.nix b/nixpkgs/pkgs/tools/text/mpage/default.nix
index 5033d53fedaa..e7a114ec6577 100644
--- a/nixpkgs/pkgs/tools/text/mpage/default.nix
+++ b/nixpkgs/pkgs/tools/text/mpage/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Many-to-one page printing utility";
+    mainProgram = "mpage";
 
     longDescription = ''
       Mpage reads plain text files or PostScript documents and prints
diff --git a/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix b/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
index 625f06734b2e..9a9ecf0b2675 100644
--- a/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
+++ b/nixpkgs/pkgs/tools/text/multitran/mtutils/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://multitran.sourceforge.net/";
     description = "Multitran: simple command line utilities for dictionary maintenance";
+    mainProgram = "mtquery";
     license = lib.licenses.gpl2;
     maintainers = with lib.maintainers; [viric];
     platforms = with lib.platforms; linux;
diff --git a/nixpkgs/pkgs/tools/text/nerdfix/default.nix b/nixpkgs/pkgs/tools/text/nerdfix/default.nix
index 8bb9113f013a..fdad3094bbec 100644
--- a/nixpkgs/pkgs/tools/text/nerdfix/default.nix
+++ b/nixpkgs/pkgs/tools/text/nerdfix/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Nerdfix helps you to find/fix obsolete nerd font icons in your project";
+    mainProgram = "nerdfix";
     homepage = "https://github.com/loichyan/nerdfix";
     changelog = "https://github.com/loichyan/nerdfix/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ asl20 mit ];
diff --git a/nixpkgs/pkgs/tools/text/nkf/default.nix b/nixpkgs/pkgs/tools/text/nkf/default.nix
index 9a70ea9461af..ae51ad37243b 100644
--- a/nixpkgs/pkgs/tools/text/nkf/default.nix
+++ b/nixpkgs/pkgs/tools/text/nkf/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Tool for converting encoding of Japanese text";
+    mainProgram = "nkf";
     homepage = "https://nkf.osdn.jp/";
     license = lib.licenses.zlib;
     platforms = lib.platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/odt2txt/default.nix b/nixpkgs/pkgs/tools/text/odt2txt/default.nix
index 0eb18e8435d4..3f8338d6ae08 100644
--- a/nixpkgs/pkgs/tools/text/odt2txt/default.nix
+++ b/nixpkgs/pkgs/tools/text/odt2txt/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Simple .odt to .txt converter";
+    mainProgram = "odt2txt";
     homepage = "https://github.com/dstosberg/odt2txt";
     platforms = lib.platforms.all;
     license = lib.licenses.gpl2;
diff --git a/nixpkgs/pkgs/tools/text/papeer/default.nix b/nixpkgs/pkgs/tools/text/papeer/default.nix
index 4084d49373fd..b8cbc477b174 100644
--- a/nixpkgs/pkgs/tools/text/papeer/default.nix
+++ b/nixpkgs/pkgs/tools/text/papeer/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = {
     description = "Convert websites into ebooks and markdown";
+    mainProgram = "papeer";
     homepage = "https://papeer.tech/";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ ehmry ];
diff --git a/nixpkgs/pkgs/tools/text/paperoni/default.nix b/nixpkgs/pkgs/tools/text/paperoni/default.nix
index 346ce515b64f..203e5b21689f 100644
--- a/nixpkgs/pkgs/tools/text/paperoni/default.nix
+++ b/nixpkgs/pkgs/tools/text/paperoni/default.nix
@@ -43,6 +43,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "An article extractor in Rust";
+    mainProgram = "paperoni";
     homepage = "https://github.com/hipstermojo/paperoni";
     changelog = "https://github.com/hipstermojo/paperoni/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/papertrail/default.nix b/nixpkgs/pkgs/tools/text/papertrail/default.nix
index afc9d2d89e7a..5e2b080f9852 100644
--- a/nixpkgs/pkgs/tools/text/papertrail/default.nix
+++ b/nixpkgs/pkgs/tools/text/papertrail/default.nix
@@ -23,6 +23,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Command-line client for Papertrail log management service";
+    mainProgram = "papertrail";
     homepage    = "https://github.com/papertrail/papertrail-cli/";
     license     = licenses.mit;
     maintainers = with maintainers; [ nicknovitski ];
diff --git a/nixpkgs/pkgs/tools/text/par/default.nix b/nixpkgs/pkgs/tools/text/par/default.nix
index e64dbd367be5..c62df86835c0 100644
--- a/nixpkgs/pkgs/tools/text/par/default.nix
+++ b/nixpkgs/pkgs/tools/text/par/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.nicemice.net/par/";
     description = "Paragraph reflow for email";
+    mainProgram = "par";
     platforms = platforms.unix;
     # See https://fedoraproject.org/wiki/Licensing/Par for license details
     license = licenses.free;
diff --git a/nixpkgs/pkgs/tools/text/pbgopy/default.nix b/nixpkgs/pkgs/tools/text/pbgopy/default.nix
index dad688f1dfb5..0e1e766456a8 100644
--- a/nixpkgs/pkgs/tools/text/pbgopy/default.nix
+++ b/nixpkgs/pkgs/tools/text/pbgopy/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Copy and paste between devices";
+    mainProgram = "pbgopy";
     homepage = "https://github.com/nakabonne/pbgopy";
     license = licenses.mit;
     maintainers = [ maintainers.ivar ];
diff --git a/nixpkgs/pkgs/tools/text/peco/default.nix b/nixpkgs/pkgs/tools/text/peco/default.nix
index 7c026f06292e..774b2f5a0d1e 100644
--- a/nixpkgs/pkgs/tools/text/peco/default.nix
+++ b/nixpkgs/pkgs/tools/text/peco/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Simplistic interactive filtering tool";
+    mainProgram = "peco";
     homepage = "https://github.com/peco/peco";
     changelog = "https://github.com/peco/peco/blob/v${version}/Changes";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix b/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix
index 9d98385933b1..40ca31fe53a7 100644
--- a/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix
+++ b/nixpkgs/pkgs/tools/text/pinyin-tool/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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;
     maintainers = with maintainers; [ neonfuz ];
diff --git a/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix b/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
index 4271fe131dac..d0128fcfd0e4 100644
--- a/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
+++ b/nixpkgs/pkgs/tools/text/platinum-searcher/default.nix
@@ -26,6 +26,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)";
+    mainProgram = "pt";
     license = licenses.mit;
   };
 }
diff --git a/nixpkgs/pkgs/tools/text/pn/default.nix b/nixpkgs/pkgs/tools/text/pn/default.nix
index d77b36651d62..a228f093c346 100644
--- a/nixpkgs/pkgs/tools/text/pn/default.nix
+++ b/nixpkgs/pkgs/tools/text/pn/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A libphonenumber command-line wrapper";
+    mainProgram = "pn";
     homepage = "https://github.com/Orange-OpenSource/pn";
     license = licenses.asl20;
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/podiff/default.nix b/nixpkgs/pkgs/tools/text/podiff/default.nix
index eec0eb351636..b59aba6c4615 100644
--- a/nixpkgs/pkgs/tools/text/podiff/default.nix
+++ b/nixpkgs/pkgs/tools/text/podiff/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Finds differences in translations between two PO files, or revisions";
+    mainProgram = "podiff";
     homepage = "http://puszcza.gnu.org.ua/software/podiff";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.goibhniu ];
diff --git a/nixpkgs/pkgs/tools/text/poedit/default.nix b/nixpkgs/pkgs/tools/text/poedit/default.nix
index 7e8b78fda19f..48368e64dc43 100644
--- a/nixpkgs/pkgs/tools/text/poedit/default.nix
+++ b/nixpkgs/pkgs/tools/text/poedit/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Cross-platform gettext catalogs (.po files) editor";
+    mainProgram = "poedit";
     homepage = "https://www.poedit.net/";
     license = licenses.mit;
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/pomsky/default.nix b/nixpkgs/pkgs/tools/text/pomsky/default.nix
index 474ea404c937..65b67b58fa40 100644
--- a/nixpkgs/pkgs/tools/text/pomsky/default.nix
+++ b/nixpkgs/pkgs/tools/text/pomsky/default.nix
@@ -36,6 +36,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A portable, modern regular expression language";
+    mainProgram = "pomsky";
     homepage = "https://pomsky-lang.org";
     changelog = "https://github.com/pomsky-lang/pomsky/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ mit /* or */ asl20 ];
diff --git a/nixpkgs/pkgs/tools/text/proselint/default.nix b/nixpkgs/pkgs/tools/text/proselint/default.nix
index 3f1b79c3e015..2f62484d980a 100644
--- a/nixpkgs/pkgs/tools/text/proselint/default.nix
+++ b/nixpkgs/pkgs/tools/text/proselint/default.nix
@@ -15,6 +15,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "A linter for prose";
+    mainProgram = "proselint";
     homepage = "http://proselint.com";
     license = licenses.bsd3;
     maintainers = with maintainers; [ alibabzo ];
diff --git a/nixpkgs/pkgs/tools/text/qprint/default.nix b/nixpkgs/pkgs/tools/text/qprint/default.nix
index 56f5b5becbd6..c0953f69a7f9 100644
--- a/nixpkgs/pkgs/tools/text/qprint/default.nix
+++ b/nixpkgs/pkgs/tools/text/qprint/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
     homepage = "https://www.fourmilab.ch/webtools/qprint/";
     license = lib.licenses.publicDomain;
     description = "Encode and decode Quoted-Printable files";
+    mainProgram = "qprint";
     maintainers = [ lib.maintainers.tv ];
     platforms = lib.platforms.all;
   };
diff --git a/nixpkgs/pkgs/tools/text/reckon/default.nix b/nixpkgs/pkgs/tools/text/reckon/default.nix
index 91233dfe97b4..55c6b3cf9556 100644
--- a/nixpkgs/pkgs/tools/text/reckon/default.nix
+++ b/nixpkgs/pkgs/tools/text/reckon/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Flexibly import bank account CSV files into Ledger for command line accounting";
+    mainProgram = "reckon";
     license = licenses.mit;
     maintainers = with maintainers; [ nicknovitski ];
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/recode/default.nix b/nixpkgs/pkgs/tools/text/recode/default.nix
index 9f215f41feaa..68cd034b8ee4 100644
--- a/nixpkgs/pkgs/tools/text/recode/default.nix
+++ b/nixpkgs/pkgs/tools/text/recode/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/rrthomas/recode";
     description = "Converts files between various character sets and usages";
+    mainProgram = "recode";
     changelog = "https://github.com/rrthomas/recode/raw/v${version}/NEWS";
     platforms = lib.platforms.unix;
     license = with lib.licenses; [ lgpl3Plus gpl3Plus ];
diff --git a/nixpkgs/pkgs/tools/text/reveal-md/default.nix b/nixpkgs/pkgs/tools/text/reveal-md/default.nix
index 0cddbf34093a..9da86f2a61c8 100644
--- a/nixpkgs/pkgs/tools/text/reveal-md/default.nix
+++ b/nixpkgs/pkgs/tools/text/reveal-md/default.nix
@@ -34,6 +34,7 @@ buildNpmPackage rec {
 
   meta = {
     description = "Get beautiful reveal.js presentations from your Markdown files";
+    mainProgram = "reveal-md";
     homepage = "https://github.com/webpro/reveal-md";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ sagikazarmark ];
diff --git a/nixpkgs/pkgs/tools/text/rgxg/default.nix b/nixpkgs/pkgs/tools/text/rgxg/default.nix
index 8e4d991e7bf0..f2f4870d8adf 100644
--- a/nixpkgs/pkgs/tools/text/rgxg/default.nix
+++ b/nixpkgs/pkgs/tools/text/rgxg/default.nix
@@ -11,6 +11,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A C library and a command-line tool to generate (extended) regular expressions";
+    mainProgram = "rgxg";
     license = licenses.zlib;
     maintainers = with maintainers; [ hloeffler ];
     homepage = "https://rgxg.github.io/";
diff --git a/nixpkgs/pkgs/tools/text/riffdiff/default.nix b/nixpkgs/pkgs/tools/text/riffdiff/default.nix
index 72b3dfc14a1a..1db7967d0f57 100644
--- a/nixpkgs/pkgs/tools/text/riffdiff/default.nix
+++ b/nixpkgs/pkgs/tools/text/riffdiff/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "riffdiff";
-  version = "3.0.0";
+  version = "3.1.0";
 
   src = fetchFromGitHub {
     owner = "walles";
     repo = "riff";
     rev = version;
-    hash = "sha256-lS7+sLA/6ZxieodvSPuEzawxQb2vWdNCkGy1RTbg4dY=";
+    hash = "sha256-ASIB7+ZyvMsaRdvJcWT/sR0JLyt4v/gytAIi8Yajlzg=";
   };
 
-  cargoHash = "sha256-hGy0B2uLT37wKOvC4/wc8i+v1vEQ3bzrgm/yqRCAx3s=";
+  cargoHash = "sha256-NGTWBlg5xvodK02RtFuCe7KsFm4z2aEpbcx3UqH9G/o=";
 
   meta = with lib; {
     description = "A diff filter highlighting which line parts have changed";
diff --git a/nixpkgs/pkgs/tools/text/rnr/default.nix b/nixpkgs/pkgs/tools/text/rnr/default.nix
index 834ecfddee77..b2d38832a4d5 100644
--- a/nixpkgs/pkgs/tools/text/rnr/default.nix
+++ b/nixpkgs/pkgs/tools/text/rnr/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/rosie/default.nix b/nixpkgs/pkgs/tools/text/rosie/default.nix
index 190fd4944d15..e9923586b2da 100644
--- a/nixpkgs/pkgs/tools/text/rosie/default.nix
+++ b/nixpkgs/pkgs/tools/text/rosie/default.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://rosie-lang.org";
     description = "Tools for searching using parsing expression grammars";
+    mainProgram = "rosie";
     license = licenses.mit;
     maintainers = with maintainers; [ kovirobi ];
     platforms = with platforms; linux ++ darwin;
diff --git a/nixpkgs/pkgs/tools/text/rpl/default.nix b/nixpkgs/pkgs/tools/text/rpl/default.nix
index cc36f93baf0f..1b4e89408dc8 100644
--- a/nixpkgs/pkgs/tools/text/rpl/default.nix
+++ b/nixpkgs/pkgs/tools/text/rpl/default.nix
@@ -2,13 +2,13 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "rpl";
-  version = "1.15.5";
+  version = "1.15.6";
 
   pyproject = true;
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-rhPS+hwbjqq3X/V1bL6pzGg2tVxBkeMyUhaCvmneG4M=";
+    hash = "sha256-4vUnFfxiPvyg9gtwiQE3nHZBnqBtBVwhM3KQzkjzw/I=";
   };
 
   nativeBuildInputs = [
@@ -29,6 +29,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Replace strings in files";
+    mainProgram = "rpl";
     homepage = "https://github.com/rrthomas/rpl";
     license = licenses.gpl2;
     maintainers = with maintainers; [ cbley ];
diff --git a/nixpkgs/pkgs/tools/text/runiq/default.nix b/nixpkgs/pkgs/tools/text/runiq/default.nix
index 42b9e2aef395..52386bb0f24a 100644
--- a/nixpkgs/pkgs/tools/text/runiq/default.nix
+++ b/nixpkgs/pkgs/tools/text/runiq/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "An efficient way to filter duplicate lines from input, à la uniq";
+    mainProgram = "runiq";
     homepage = "https://github.com/whitfin/runiq";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/ruplacer/default.nix b/nixpkgs/pkgs/tools/text/ruplacer/default.nix
index b44165d6ea88..bb1d7dfc9904 100644
--- a/nixpkgs/pkgs/tools/text/ruplacer/default.nix
+++ b/nixpkgs/pkgs/tools/text/ruplacer/default.nix
@@ -2,21 +2,22 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "ruplacer";
-  version = "0.8.2";
+  version = "0.8.3";
 
   src = fetchFromGitHub {
     owner = "TankerHQ";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-xuq+Scy5MyyGvI51Vs26pk9+NnlghzGEJDHYC3kSXNw=";
+    sha256 = "sha256-rndWKi/EDQzTWAw2deddhTXdmIfuEVM54MOfS4mNf+Y=";
   };
 
-  cargoHash = "sha256-Kevwpkvgq40LhWxhW9ra2Nd1zEiAF372DM1sY9hnQb0=";
+  cargoHash = "sha256-DkhmMdpUcka6Wkyz6hEfqB2gUpsGNziGv+23rVfwXN8=";
 
   buildInputs = (lib.optional stdenv.isDarwin Security);
 
   meta = with lib; {
     description = "Find and replace text in source files";
+    mainProgram = "ruplacer";
     homepage = "https://github.com/TankerHQ/ruplacer";
     license = [ licenses.bsd3 ];
     maintainers = with maintainers; [ Br1ght0ne ];
diff --git a/nixpkgs/pkgs/tools/text/sad/default.nix b/nixpkgs/pkgs/tools/text/sad/default.nix
index da4ff0804b11..9c04667abc54 100644
--- a/nixpkgs/pkgs/tools/text/sad/default.nix
+++ b/nixpkgs/pkgs/tools/text/sad/default.nix
@@ -6,16 +6,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "sad";
-  version = "0.4.23";
+  version = "0.4.25";
 
   src = fetchFromGitHub {
     owner = "ms-jpq";
-    repo = pname;
-    rev = "v${version}";
-    hash = "sha256-LNMc+3pXx7VyNq0dws+s13ZA3+f8aJzgbAxzI71NKx0=";
+    repo = "sad";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-G+Mkyw7TNx5+fhnaOe3Fsb1JuafqckcZ83BTnuWUZBU=";
   };
 
-  cargoHash = "sha256-UjXJmH4UI5Vey2rBy57CI1r13bpGYhIozEoOoyoRDLQ=";
+  cargoHash = "sha256-PTldq13csCmQ3u+M+BTftmxpRh32Bw9ds6yx+pE7HRc=";
 
   nativeBuildInputs = [ python3 ];
 
@@ -28,7 +28,9 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     description = "CLI tool to search and replace";
     homepage = "https://github.com/ms-jpq/sad";
+    changelog = "https://github.com/ms-jpq/sad/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
+    mainProgram = "sad";
   };
 }
diff --git a/nixpkgs/pkgs/tools/text/scraper/default.nix b/nixpkgs/pkgs/tools/text/scraper/default.nix
index c148f1e57f3f..42b8c91effe0 100644
--- a/nixpkgs/pkgs/tools/text/scraper/default.nix
+++ b/nixpkgs/pkgs/tools/text/scraper/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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}";
     license = licenses.isc;
diff --git a/nixpkgs/pkgs/tools/text/sd/default.nix b/nixpkgs/pkgs/tools/text/sd/default.nix
index 8dc160cd014d..e5bde420000d 100644
--- a/nixpkgs/pkgs/tools/text/sd/default.nix
+++ b/nixpkgs/pkgs/tools/text/sd/default.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Intuitive find & replace CLI (sed alternative)";
+    mainProgram = "sd";
     homepage = "https://github.com/chmln/sd";
     license = licenses.mit;
     maintainers = with maintainers; [ amar1729 Br1ght0ne ];
diff --git a/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix b/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
index 5e175518b692..87bc8e7a8aed 100644
--- a/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
+++ b/nixpkgs/pkgs/tools/text/sgml/openjade/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "An implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
+    mainProgram = "openjade";
     license = lib.licenses.mit;
     homepage = "https://openjade.sourceforge.net/";
     platforms = lib.platforms.linux;
diff --git a/nixpkgs/pkgs/tools/text/sgrep/default.nix b/nixpkgs/pkgs/tools/text/sgrep/default.nix
index f3d23d166696..3e82ce9afc60 100644
--- a/nixpkgs/pkgs/tools/text/sgrep/default.nix
+++ b/nixpkgs/pkgs/tools/text/sgrep/default.nix
@@ -27,6 +27,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";
+    mainProgram = "sgrep";
     longDescription = ''
       sgrep (structured grep) is a tool for searching and indexing text,
       SGML, XML and HTML files and filtering text streams using
diff --git a/nixpkgs/pkgs/tools/text/shab/default.nix b/nixpkgs/pkgs/tools/text/shab/default.nix
index b5bb98e5f4d2..733ba4f80cf5 100644
--- a/nixpkgs/pkgs/tools/text/shab/default.nix
+++ b/nixpkgs/pkgs/tools/text/shab/default.nix
@@ -41,6 +41,7 @@ let
 
     meta = with lib; {
       description = "The bash templating language";
+      mainProgram = "shab";
       homepage = "https://github.com/zimbatm/shab";
       license = licenses.unlicense;
       maintainers = with maintainers; [ zimbatm ];
diff --git a/nixpkgs/pkgs/tools/text/shocco/default.nix b/nixpkgs/pkgs/tools/text/shocco/default.nix
index 1359db98978c..75f218f213e6 100644
--- a/nixpkgs/pkgs/tools/text/shocco/default.nix
+++ b/nixpkgs/pkgs/tools/text/shocco/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
+    mainProgram = "shocco";
     homepage = "https://rtomayko.github.io/shocco/";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/sift/default.nix b/nixpkgs/pkgs/tools/text/sift/default.nix
index 25dd61a3e4a0..1aecb3ac8909 100644
--- a/nixpkgs/pkgs/tools/text/sift/default.nix
+++ b/nixpkgs/pkgs/tools/text/sift/default.nix
@@ -31,6 +31,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A fast and powerful alternative to grep";
+    mainProgram = "sift";
     homepage = "https://sift-tool.org";
     maintainers = with maintainers; [ viraptor ];
     license = licenses.gpl3;
diff --git a/nixpkgs/pkgs/tools/text/smu/default.nix b/nixpkgs/pkgs/tools/text/smu/default.nix
index 85e593982e85..63c9bb8d024f 100644
--- a/nixpkgs/pkgs/tools/text/smu/default.nix
+++ b/nixpkgs/pkgs/tools/text/smu/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "simple markup - markdown like syntax";
+    mainProgram = "smu";
     homepage = "https://github.com/Gottox/smu";
     license = licenses.mit;
     maintainers = with maintainers; [ oxzi ];
diff --git a/nixpkgs/pkgs/tools/text/sorted-grep/default.nix b/nixpkgs/pkgs/tools/text/sorted-grep/default.nix
index 60bc0bee676f..f0225d8a2444 100644
--- a/nixpkgs/pkgs/tools/text/sorted-grep/default.nix
+++ b/nixpkgs/pkgs/tools/text/sorted-grep/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://sgrep.sourceforge.net/";
     description = "Sgrep (sorted grep) searches sorted input files for lines that match a search key";
+    mainProgram = "sgrep";
     longDescription = ''
       Sgrep (sorted grep) searches sorted input files for lines that match a search
       key and outputs the matching lines. When searching large files sgrep is much
diff --git a/nixpkgs/pkgs/tools/text/subedit/default.nix b/nixpkgs/pkgs/tools/text/subedit/default.nix
index 0ae48901cd96..fede6583e788 100644
--- a/nixpkgs/pkgs/tools/text/subedit/default.nix
+++ b/nixpkgs/pkgs/tools/text/subedit/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/helixarch/subedit";
     description = "Command-line subtitle editor written in BASH";
+    mainProgram = "subedit";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ppom ];
   };
diff --git a/nixpkgs/pkgs/tools/text/tab/default.nix b/nixpkgs/pkgs/tools/text/tab/default.nix
index 3f8ef799a6bf..431b046471a4 100644
--- a/nixpkgs/pkgs/tools/text/tab/default.nix
+++ b/nixpkgs/pkgs/tools/text/tab/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Programming language/shell calculator";
+    mainProgram = "tab";
     homepage    = "https://tab-lang.xyz";
     license     = licenses.boost;
     maintainers = with maintainers; [ mstarzyk ];
diff --git a/nixpkgs/pkgs/tools/text/teip/default.nix b/nixpkgs/pkgs/tools/text/teip/default.nix
index c0ac20a28149..caa665fc3c93 100644
--- a/nixpkgs/pkgs/tools/text/teip/default.nix
+++ b/nixpkgs/pkgs/tools/text/teip/default.nix
@@ -43,6 +43,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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}";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/termbook/default.nix b/nixpkgs/pkgs/tools/text/termbook/default.nix
index ee9367038f63..a68f0ce416f4 100644
--- a/nixpkgs/pkgs/tools/text/termbook/default.nix
+++ b/nixpkgs/pkgs/tools/text/termbook/default.nix
@@ -52,6 +52,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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";
     license = licenses.asl20;
diff --git a/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix b/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix
index 6c38007b3f26..cbeb97214893 100644
--- a/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix
+++ b/nixpkgs/pkgs/tools/text/tidy-viewer/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A 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";
     license = licenses.unlicense;
diff --git a/nixpkgs/pkgs/tools/text/tml/default.nix b/nixpkgs/pkgs/tools/text/tml/default.nix
index 3f1a6477851c..5a083bfc4d60 100644
--- a/nixpkgs/pkgs/tools/text/tml/default.nix
+++ b/nixpkgs/pkgs/tools/text/tml/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tiny markup language for terminal output";
+    mainProgram = "tml";
     homepage = "https://github.com/liamg/tml";
     changelog = "https://github.com/liamg/tml/releases/tag/v${version}";
     license = licenses.unlicense;
diff --git a/nixpkgs/pkgs/tools/text/to-html/default.nix b/nixpkgs/pkgs/tools/text/to-html/default.nix
index 9e176a5ad19c..5ddba61276d4 100644
--- a/nixpkgs/pkgs/tools/text/to-html/default.nix
+++ b/nixpkgs/pkgs/tools/text/to-html/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = {
     description = "Terminal wrapper for rendering a terminal on a website by converting ANSI escape sequences to HTML";
+    mainProgram = "to-html";
     homepage = "https://github.com/Aloso/to-html";
     changelog = "https://github.com/Aloso/to-html/blob/${src.rev}/CHANGELOG.md";
     license = lib.licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/tuc/default.nix b/nixpkgs/pkgs/tools/text/tuc/default.nix
index b7b5afbdf3a3..46e9bb86e57c 100644
--- a/nixpkgs/pkgs/tools/text/tuc/default.nix
+++ b/nixpkgs/pkgs/tools/text/tuc/default.nix
@@ -14,6 +14,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "When cut doesn't cut it";
+    mainProgram = "tuc";
     homepage = "https://github.com/riquito/tuc";
     license = licenses.gpl3;
     maintainers = with maintainers; [ dit7ya ];
diff --git a/nixpkgs/pkgs/tools/text/tv/default.nix b/nixpkgs/pkgs/tools/text/tv/default.nix
index 686433ff4290..9cf6e2e243e8 100644
--- a/nixpkgs/pkgs/tools/text/tv/default.nix
+++ b/nixpkgs/pkgs/tools/text/tv/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Format json into table view";
+    mainProgram = "tv";
     homepage = "https://github.com/uzimaru0000/tv";
     changelog = "https://github.com/uzimaru0000/tv/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/txt2tags/default.nix b/nixpkgs/pkgs/tools/text/txt2tags/default.nix
index 8ff39ac1ebfe..1e48d4c6f3d6 100644
--- a/nixpkgs/pkgs/tools/text/txt2tags/default.nix
+++ b/nixpkgs/pkgs/tools/text/txt2tags/default.nix
@@ -30,6 +30,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = {
     changelog = "https://github.com/txt2tags/txt2tags/blob/${src.rev}/CHANGELOG.md";
     description = "Convert between markup languages";
+    mainProgram = "txt2tags";
     homepage = "https://txt2tags.org/";
     license  = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ dotlambda kovirobi ];
diff --git a/nixpkgs/pkgs/tools/text/ugrep/default.nix b/nixpkgs/pkgs/tools/text/ugrep/default.nix
index 94a417a4b0d7..fcea411e1a73 100644
--- a/nixpkgs/pkgs/tools/text/ugrep/default.nix
+++ b/nixpkgs/pkgs/tools/text/ugrep/default.nix
@@ -15,13 +15,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "ugrep";
-  version = "5.1.0";
+  version = "5.1.1";
 
   src = fetchFromGitHub {
     owner = "Genivia";
     repo = "ugrep";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-B3O7suGepcTUdigtumMLXGZVBVX5qUH0TVdqTY3fCXE=";
+    hash = "sha256-ZMBu8hewPuwpm64Oe6JselynEv04JTR/OTbpbmkfe3Y=";
   };
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/tools/text/unfurl/default.nix b/nixpkgs/pkgs/tools/text/unfurl/default.nix
index 35a43ea2fdbd..0d9ae3b01992 100644
--- a/nixpkgs/pkgs/tools/text/unfurl/default.nix
+++ b/nixpkgs/pkgs/tools/text/unfurl/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Pull out bits of URLs provided on stdin";
+    mainProgram = "unfurl";
     homepage = "https://github.com/tomnomnom/unfurl";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/nixpkgs/pkgs/tools/text/uniscribe/default.nix b/nixpkgs/pkgs/tools/text/uniscribe/default.nix
index e7b9cedd2b8c..98b164a9d58d 100644
--- a/nixpkgs/pkgs/tools/text/uniscribe/default.nix
+++ b/nixpkgs/pkgs/tools/text/uniscribe/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Explains Unicode characters/code points: Displays their name, category, and shows compositions";
+    mainProgram = "uniscribe";
     homepage = "https://github.com/janlelis/uniscribe";
     license = licenses.mit;
     maintainers = with maintainers; [ kjeremy ];
diff --git a/nixpkgs/pkgs/tools/text/unrtf/default.nix b/nixpkgs/pkgs/tools/text/unrtf/default.nix
index 3357404a7d3c..4395c0f6e941 100644
--- a/nixpkgs/pkgs/tools/text/unrtf/default.nix
+++ b/nixpkgs/pkgs/tools/text/unrtf/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A converter from Rich Text Format to other formats";
+    mainProgram = "unrtf";
     longDescription = ''
       UnRTF converts documents in Rich Text Format to other
       formats, including HTML, LaTeX, and RTF itself.
diff --git a/nixpkgs/pkgs/tools/text/untex/default.nix b/nixpkgs/pkgs/tools/text/untex/default.nix
index 63108a923782..c6f833049650 100644
--- a/nixpkgs/pkgs/tools/text/untex/default.nix
+++ b/nixpkgs/pkgs/tools/text/untex/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A utility which removes LaTeX commands from input";
+    mainProgram = "untex";
     homepage = "https://www.ctan.org/pkg/untex";
     license = licenses.gpl1Only;
     maintainers = with maintainers; [ joachifm ];
diff --git a/nixpkgs/pkgs/tools/text/uwc/default.nix b/nixpkgs/pkgs/tools/text/uwc/default.nix
index dc34ecfacff2..42777accb826 100644
--- a/nixpkgs/pkgs/tools/text/uwc/default.nix
+++ b/nixpkgs/pkgs/tools/text/uwc/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Like wc, but unicode-aware, and with per-line mode";
+    mainProgram = "uwc";
     homepage = "https://gitlab.com/dead10ck/uwc";
     license = licenses.mit;
     maintainers = with maintainers; [ ShamrockLee ];
diff --git a/nixpkgs/pkgs/tools/text/vale/default.nix b/nixpkgs/pkgs/tools/text/vale/default.nix
index e3d2896078ca..861b3e6b899e 100644
--- a/nixpkgs/pkgs/tools/text/vale/default.nix
+++ b/nixpkgs/pkgs/tools/text/vale/default.nix
@@ -2,7 +2,7 @@
 
 buildGoModule rec {
   pname = "vale";
-  version = "3.2.2";
+  version = "3.3.1";
 
   subPackages = [ "cmd/vale" ];
   outputs = [ "out" "data" ];
@@ -11,10 +11,10 @@ buildGoModule rec {
     owner = "errata-ai";
     repo = "vale";
     rev = "v${version}";
-    hash = "sha256-CLbzrJJVgFxJKuTtXQKGZ6q228Sm7s+Is11TE8mAmD8=";
+    hash = "sha256-6hj8fm2eCGQeWY3+eaJlKeZglJUSMY4/Yz2ySGp6m58=";
   };
 
-  vendorHash = "sha256-KxIQZViUYT4cgRlOuKBwen6pqQjGiAofkeBztmjnKdQ=";
+  vendorHash = "sha256-HMzFLSmO6sBDNU89UoIvHcPPd3ubpti2ii4sFMKUDmI=";
 
   postInstall = ''
     mkdir -p $data/share/vale
@@ -30,6 +30,7 @@ buildGoModule rec {
     description = "A syntax-aware linter for prose built with speed and extensibility in mind";
     homepage = "https://vale.sh/";
     changelog = "https://github.com/errata-ai/vale/releases/tag/v${version}";
+    mainProgram = "vale";
     license = licenses.mit;
     maintainers = [ maintainers.marsam ];
   };
diff --git a/nixpkgs/pkgs/tools/text/vgrep/default.nix b/nixpkgs/pkgs/tools/text/vgrep/default.nix
index 9022c5f5c03b..942188730387 100644
--- a/nixpkgs/pkgs/tools/text/vgrep/default.nix
+++ b/nixpkgs/pkgs/tools/text/vgrep/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "User-friendly pager for grep/git-grep/ripgrep";
+    mainProgram = "vgrep";
     homepage = "https://github.com/vrothberg/vgrep";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ SuperSandro2000 ];
diff --git a/nixpkgs/pkgs/tools/text/wdiff/default.nix b/nixpkgs/pkgs/tools/text/wdiff/default.nix
index d6ed960cce1e..d358dcdd0c4e 100644
--- a/nixpkgs/pkgs/tools/text/wdiff/default.nix
+++ b/nixpkgs/pkgs/tools/text/wdiff/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.gnu.org/software/wdiff/";
     description = "Comparing files on a word by word basis";
+    mainProgram = "wdiff";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ eelco SuperSandro2000 ];
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/wgetpaste/default.nix b/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
index 9a60b991a7f9..8ca014e0d5f5 100644
--- a/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
+++ b/nixpkgs/pkgs/tools/text/wgetpaste/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "wgetpaste";
-  version = "2.33";
+  version = "2.34";
 
   src = fetchurl {
     url = "https://github.com/zlin/wgetpaste/releases/download/${version}/wgetpaste-${version}.tar.xz";
-    sha256 = "sha256-6TWdhKOmO7vRKGIVNcUwLy46heI6UiAOgej6ubd+lxs=";
+    sha256 = "sha256-vW0G7ZAaPWPJyMVxJghP8JlPCZAb+xY4uHlT6sHpQz8=";
   };
   # currently zsh-autocompletion support is not installed
 
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Command-line interface to various pastebins";
+    mainProgram = "wgetpaste";
     homepage = "https://github.com/zlin/wgetpaste";
     license = lib.licenses.publicDomain;
     maintainers = with lib.maintainers; [ qknight domenkozar ];
diff --git a/nixpkgs/pkgs/tools/text/xidel/default.nix b/nixpkgs/pkgs/tools/text/xidel/default.nix
index 479cc0ff1115..d7fefa2d495d 100644
--- a/nixpkgs/pkgs/tools/text/xidel/default.nix
+++ b/nixpkgs/pkgs/tools/text/xidel/default.nix
@@ -87,6 +87,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Command line tool to download and extract data from HTML/XML pages as well as JSON APIs";
+    mainProgram = "xidel";
     homepage = "https://www.videlibri.de/xidel.html";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix b/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
index 380baa906c27..ea0e90502dc2 100644
--- a/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
+++ b/nixpkgs/pkgs/tools/text/xml/xmlformat/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "a configurable formatter (or 'pretty-printer') for XML documents";
+    mainProgram = "xmlformat";
     homepage = "http://www.kitebird.com/software/xmlformat/";
     license = lib.licenses.bsd3;
     platforms = lib.platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix b/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
index c915e2c7fc5b..32162849c41d 100644
--- a/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
+++ b/nixpkgs/pkgs/tools/text/xml/xmloscopy/default.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "wtf is my docbook broken?";
+    mainProgram = "xmloscopy";
     homepage = "https://github.com/grahamc/xmloscopy";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/tools/text/xml/xq/default.nix b/nixpkgs/pkgs/tools/text/xml/xq/default.nix
index 6fae10b25357..7b55d5d28d35 100644
--- a/nixpkgs/pkgs/tools/text/xml/xq/default.nix
+++ b/nixpkgs/pkgs/tools/text/xml/xq/default.nix
@@ -33,6 +33,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Command-line XML and HTML beautifier and content extractor";
+    mainProgram = "xq";
     homepage = "https://github.com/sibprogrammer/xq";
     changelog = "https://github.com/sibprogrammer/xq/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/nixpkgs/pkgs/tools/text/xpaste/default.nix b/nixpkgs/pkgs/tools/text/xpaste/default.nix
index 88666fd25adc..7bbe658b6b5a 100644
--- a/nixpkgs/pkgs/tools/text/xpaste/default.nix
+++ b/nixpkgs/pkgs/tools/text/xpaste/default.nix
@@ -24,6 +24,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Paste text into X windows that don't work with selections";
+    mainProgram = "xpaste";
     homepage = "https://github.com/ossobv/xpaste";
     license = licenses.gpl3;
     maintainers = with maintainers; [ gador ];
diff --git a/nixpkgs/pkgs/tools/text/xsv/default.nix b/nixpkgs/pkgs/tools/text/xsv/default.nix
index 303b38d65c2d..3e617a621e33 100644
--- a/nixpkgs/pkgs/tools/text/xsv/default.nix
+++ b/nixpkgs/pkgs/tools/text/xsv/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A fast CSV toolkit written in Rust";
+    mainProgram = "xsv";
     homepage = "https://github.com/BurntSushi/xsv";
     license = with licenses; [ unlicense /* or */ mit ];
     maintainers = [ maintainers.jgertm ];
diff --git a/nixpkgs/pkgs/tools/text/yaml-merge/default.nix b/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
index 85ea3cd360da..a5113a92f702 100644
--- a/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
+++ b/nixpkgs/pkgs/tools/text/yaml-merge/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Merge YAML data files";
+    mainProgram = "yaml-merge";
     homepage = "https://github.com/abbradar/yaml-merge";
     license = licenses.bsd2;
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/tools/text/zet/default.nix b/nixpkgs/pkgs/tools/text/zet/default.nix
index 50d149f4e655..af04b5fdc203 100644
--- a/nixpkgs/pkgs/tools/text/zet/default.nix
+++ b/nixpkgs/pkgs/tools/text/zet/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "CLI utility to find the union, intersection, set difference, etc of files considered as sets of lines";
+    mainProgram = "zet";
     homepage = "https://github.com/yarrow/zet";
     changelog = "https://github.com/yarrow/zet/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ asl20 mit ];