summary refs log tree commit diff
diff options
context:
space:
mode:
authorsternenseemann <sternenseemann@systemli.org>2022-06-16 15:39:26 +0200
committersternenseemann <sternenseemann@systemli.org>2022-06-18 11:24:38 +0200
commit067dee3d83ea37073e82e35e39f3bc58405b8964 (patch)
treed7fec815268c32742a34ca01886336947e15d9e4
parent88dcf0ff207a6037f48b24e1ebbef1ba57954e0f (diff)
downloadnixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.tar
nixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.tar.gz
nixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.tar.bz2
nixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.tar.lz
nixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.tar.xz
nixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.tar.zst
nixpkgs-067dee3d83ea37073e82e35e39f3bc58405b8964.zip
haskellPackages.cabal2nix-unstable: 2022-04-27 -> 2022-06-16
Note that we are not yet taking advantage of the new platform handling
properly which is why the diff looks odd in places.
-rw-r--r--pkgs/development/haskell-modules/cabal2nix-unstable.nix6
-rw-r--r--pkgs/development/haskell-modules/hackage-packages.nix4405
-rw-r--r--pkgs/development/haskell-modules/non-hackage-packages.nix4
3 files changed, 3762 insertions, 653 deletions
diff --git a/pkgs/development/haskell-modules/cabal2nix-unstable.nix b/pkgs/development/haskell-modules/cabal2nix-unstable.nix
index a12c20c63c5..595d5ce26e3 100644
--- a/pkgs/development/haskell-modules/cabal2nix-unstable.nix
+++ b/pkgs/development/haskell-modules/cabal2nix-unstable.nix
@@ -8,10 +8,10 @@
 }:
 mkDerivation {
   pname = "cabal2nix";
-  version = "unstable-2022-04-27";
+  version = "unstable-2022-06-16";
   src = fetchzip {
-    url = "https://github.com/NixOS/cabal2nix/archive/40823c793b4b8588fcfedc8fb147c1a92cfa577d.tar.gz";
-    sha256 = "0gr8hafa282m4qw5y5wrqiwm1a3fl3b7xicnzixss6nlmxmi2skp";
+    url = "https://github.com/NixOS/cabal2nix/archive/d3f5bcc7f32da62563242af6345c9621531344ea.tar.gz";
+    sha256 = "1s4b8k79prvwrz6n5ygv4dybinxmaz6nb9lv064iglvn37zvcva2";
   };
   isLibrary = true;
   isExecutable = true;
diff --git a/pkgs/development/haskell-modules/hackage-packages.nix b/pkgs/development/haskell-modules/hackage-packages.nix
index 0ba01488575..f7b8d788675 100644
--- a/pkgs/development/haskell-modules/hackage-packages.nix
+++ b/pkgs/development/haskell-modules/hackage-packages.nix
@@ -66,6 +66,7 @@ self: {
        description = "A tetris-like game (works with GHC 6.8.3 and Gtk2hs 0.9.13)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "4Blocks";
      }) {};
 
   "AAI" = callPackage
@@ -382,6 +383,7 @@ self: {
        description = "foundational type classes for approximating exact real numbers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "toolAERN-bench-csv-to-gnuplot";
        broken = true;
      }) {};
 
@@ -616,7 +618,10 @@ self: {
        libraryHaskellDepends = [ base regex-compat Win32 ];
        description = "A binding to a part of the ANSI escape code for the console";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "AbortT-monadstf" = callPackage
@@ -684,6 +689,7 @@ self: {
        description = "An easy-to-use video game framework for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "actionkid";
        broken = true;
      }) {};
 
@@ -701,6 +707,7 @@ self: {
        description = "Library for incremental computing";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spreadsheet";
        broken = true;
      }) {};
 
@@ -717,6 +724,7 @@ self: {
        description = "Library for incremental computing";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spreadsheet";
        broken = true;
      }) {};
 
@@ -732,6 +740,7 @@ self: {
        description = "Lisperati's adventure game in Lisp translated to Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "advgame";
      }) {};
 
   "Advise-me" = callPackage
@@ -837,7 +846,7 @@ self: {
        executableToolDepends = [ emacs ];
        description = "A dependently typed functional programming language and proof assistant";
        license = "unknown";
-       maintainers = with lib.maintainers; [ abbradar turion ];
+       maintainers = [ lib.maintainers.abbradar lib.maintainers.turion ];
      }) {inherit (pkgs) emacs;};
 
   "Agda-executable" = callPackage
@@ -852,6 +861,7 @@ self: {
        description = "Command-line program for type-checking and compiling Agda programs";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "agda";
        broken = true;
      }) {};
 
@@ -921,6 +931,7 @@ self: {
        description = "Algorithmic music composition";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "music-exe";
      }) {};
 
   "AlgorithmW" = callPackage
@@ -935,6 +946,7 @@ self: {
        description = "Example implementation of Algorithm W for Hindley-Milner type inference";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "AlgorithmW";
        broken = true;
      }) {};
 
@@ -980,10 +992,9 @@ self: {
        ];
        description = "Near-future Sci-Fi roguelike and tactical squad combat game";
        license = lib.licenses.agpl3Plus;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Allure";
      }) {};
 
   "AndroidViewHierarchyImporter" = callPackage
@@ -1004,6 +1015,7 @@ self: {
        description = "Android view hierarchy importer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "AndroidViewHierarchyImporter";
      }) {};
 
   "Animas" = callPackage
@@ -1043,6 +1055,7 @@ self: {
        executableHaskellDepends = [ base mtl parsec xhtml ];
        description = "Convert ANSI Terminal Sequences to nice HTML markup";
        license = lib.licenses.bsd3;
+       mainProgram = "ansi2html";
      }) {};
 
   "Aoide" = callPackage
@@ -1078,6 +1091,7 @@ self: {
        description = "Library for Apple Push Notification Service";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "applepushtest";
      }) {};
 
   "AppleScript" = callPackage
@@ -1204,6 +1218,7 @@ self: {
        description = "Visualisation of Strange Attractors in 3-Dimensions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Attrac";
        broken = true;
      }) {};
 
@@ -1219,6 +1234,7 @@ self: {
        description = "Yet another parser generator for C/C++";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Aurochs";
        broken = true;
      }) {};
 
@@ -1287,6 +1303,7 @@ self: {
        description = "Big Contact Map Tools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bcmtools";
        broken = true;
      }) {};
 
@@ -1316,6 +1333,7 @@ self: {
        testToolDepends = [ alex happy hspec-discover ];
        description = "A compiler front-end generator";
        license = lib.licenses.bsd3;
+       mainProgram = "bnfc";
      }) {};
 
   "BNFC-meta" = callPackage
@@ -1361,6 +1379,7 @@ self: {
        description = "Translations of classic Truth Maintenance Systems";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hbps";
        broken = true;
      }) {};
 
@@ -1423,6 +1442,7 @@ self: {
        description = "An ad-hoc P2P chat program";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Barracuda";
      }) {};
 
   "Befunge93" = callPackage
@@ -1437,6 +1457,7 @@ self: {
        description = "An interpreter for the Befunge-93 Programming Language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Befunge93";
        broken = true;
      }) {};
 
@@ -1527,6 +1548,7 @@ self: {
        executableHaskellDepends = [ array base bmp bytestring gloss ];
        description = "Image editor for pixel art";
        license = lib.licenses.bsd3;
+       mainProgram = "BigPixel";
      }) {};
 
   "BinderAnn" = callPackage
@@ -1724,6 +1746,7 @@ self: {
        ];
        description = "streaming FASTA parser";
        license = lib.licenses.bsd3;
+       mainProgram = "fastaextract";
      }) {};
 
   "BiobaseHTTP" = callPackage
@@ -1802,6 +1825,7 @@ self: {
        description = "Infernal data structures and tools";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cmsearchFilter";
      }) {};
 
   "BiobaseMAF" = callPackage
@@ -1842,6 +1866,7 @@ self: {
        description = "Newick file format parser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TestForestStructure";
        broken = true;
      }) {};
 
@@ -1863,6 +1888,7 @@ self: {
        description = "RNA folding training data";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "MkTrainingData";
      }) {};
 
   "BiobaseTurner" = callPackage
@@ -1972,6 +1998,7 @@ self: {
        ];
        description = "Efficient RNA/DNA/Protein Primary/Secondary Structure";
        license = lib.licenses.bsd3;
+       mainProgram = "SubOptDistance";
      }) {};
 
   "BirdPP" = callPackage
@@ -1986,6 +2013,7 @@ self: {
        description = "A preprocessor for Bird-style Literate Haskell comments with Haddock markup";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "BirdPP";
      }) {};
 
   "BitStringRandomMonad" = callPackage
@@ -2095,6 +2123,7 @@ self: {
        description = "Diagram editor";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blobs";
      }) {};
 
   "BlogLiterately" = callPackage
@@ -2119,6 +2148,7 @@ self: {
        executableHaskellDepends = [ base cmdargs ];
        description = "A tool for posting Haskelly articles to blogs";
        license = lib.licenses.gpl3Only;
+       mainProgram = "BlogLiterately";
      }) {};
 
   "BlogLiterately-diagrams" = callPackage
@@ -2141,6 +2171,7 @@ self: {
        description = "Include images in blog posts with inline diagrams code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "BlogLiteratelyD";
      }) {};
 
   "Blogdown" = callPackage
@@ -2170,6 +2201,7 @@ self: {
        description = "A markdown-like markup language designed for blog posts";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Blogdown";
        broken = true;
      }) {};
 
@@ -2216,6 +2248,7 @@ self: {
        description = "A simple document organizer with some wiki functionality";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bookshelf";
      }) {};
 
   "Boolean" = callPackage
@@ -2294,6 +2327,7 @@ self: {
        description = "Hits a set of urls periodically to bust caches";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "buster";
        broken = true;
      }) {};
 
@@ -2435,6 +2469,7 @@ self: {
        description = "preprocessor and library for Causal Commutative Arrows (CCA)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ccap";
        broken = true;
      }) {};
 
@@ -2500,6 +2535,7 @@ self: {
        description = "Infernal covariance model comparison";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "CMCompare";
      }) {};
 
   "CMQ" = callPackage
@@ -2545,6 +2581,7 @@ self: {
        description = "A simple Brainfuck interpretter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bf";
      }) {};
 
   "CPL" = callPackage
@@ -2560,6 +2597,7 @@ self: {
        ];
        description = "An interpreter of Hagino's Categorical Programming Language (CPL)";
        license = lib.licenses.bsd3;
+       mainProgram = "cpl";
      }) {};
 
   "CSPM-CoreLanguage" = callPackage
@@ -2665,6 +2703,7 @@ self: {
        description = "cspm command line tool for analyzing CSPM specifications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cspm";
      }) {};
 
   "CTRex" = callPackage
@@ -2914,6 +2953,7 @@ self: {
        description = "Search cabal packages by name";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabalsearch";
        broken = true;
      }) {};
 
@@ -2968,6 +3008,7 @@ self: {
        description = "A translation from the Carneades argumentation model into Dung's AFs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "caell";
      }) {};
 
   "Cartesian" = callPackage
@@ -3196,6 +3237,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "Tests of the Charts library";
        license = lib.licenses.bsd3;
+       mainProgram = "chart-harness";
      }) {};
 
   "ChasingBottoms" = callPackage
@@ -3228,6 +3270,7 @@ self: {
        executableHaskellDepends = [ base containers directory ];
        description = "A Haskell cheat sheet in PDF and literate formats";
        license = lib.licenses.bsd3;
+       mainProgram = "cheatsheet";
      }) {};
 
   "Checked" = callPackage
@@ -3255,6 +3298,7 @@ self: {
        description = "A platform independent mechanism to render graphics using vnc";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Chitra";
        broken = true;
      }) {};
 
@@ -3379,6 +3423,7 @@ self: {
        description = "Libary for parsing Clustal tools output";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ClustalParserTest";
      }) {};
 
   "Coadjute" = callPackage
@@ -3466,6 +3511,7 @@ self: {
        description = "A concurrent bittorrent client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Combinatorrent";
      }) {};
 
   "Command" = callPackage
@@ -3502,6 +3548,7 @@ self: {
        description = "Watch some files; Rerun a command";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "commando";
        broken = true;
      }) {};
 
@@ -3556,6 +3603,7 @@ self: {
        ];
        description = "Cluster algorithms, PCA, and chemical conformere analysis";
        license = lib.licenses.agpl3Only;
+       mainProgram = "conclusion";
      }) {};
 
   "Concurrent-Cache" = callPackage
@@ -3604,6 +3652,7 @@ self: {
        description = "Information retrieval library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "condor";
      }) {};
 
   "ConfigFile" = callPackage
@@ -3684,6 +3733,7 @@ self: {
        description = "Restart a command on STDIN activity";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "conscript";
        broken = true;
      }) {};
 
@@ -3742,6 +3792,7 @@ self: {
        description = "Implementation of the context algebra";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ContextAlgebra";
        broken = true;
      }) {};
 
@@ -3978,6 +4029,7 @@ self: {
        description = "Real-Time Game Tournament Evaluator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DAG-Tournament";
        broken = true;
      }) {};
 
@@ -4008,6 +4060,7 @@ self: {
        ];
        description = "RFC 4918 WebDAV support";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hdav";
      }) {};
 
   "DBFunctor" = callPackage
@@ -4035,6 +4088,7 @@ self: {
        ];
        description = "DBFunctor - Functional Data Management => ETL/ELT Data Processing in Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "dbfunctor-example";
      }) {};
 
   "DBlimited" = callPackage
@@ -4049,6 +4103,7 @@ self: {
        description = "A command-line SQL interface for flat files (tdf,csv,etc.)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBlimited";
        broken = true;
      }) {};
 
@@ -4088,6 +4143,7 @@ self: {
        description = "Distributed Mutation Analysis framework for MuCheck";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dummy";
      }) {};
 
   "DOH" = callPackage
@@ -4167,6 +4223,7 @@ self: {
        description = "Darcs Patch Manager";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dpm";
        broken = true;
      }) {};
 
@@ -4280,6 +4337,7 @@ self: {
        description = "Database Supported Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vldot";
      }) {};
 
   "DSTM" = callPackage
@@ -4358,6 +4416,7 @@ self: {
        description = "Dao is meta programming language with its own built-in interpreted language, designed with artificial intelligence applications in mind";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dao";
        broken = true;
      }) {};
 
@@ -4427,6 +4486,7 @@ self: {
        description = "A package for adding index column to data files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DataIndex";
        broken = true;
      }) {};
 
@@ -4491,6 +4551,7 @@ self: {
        description = "Write clients for Meteor's DDP Protocol";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "deadpan";
        broken = true;
      }) {};
 
@@ -4606,6 +4667,7 @@ self: {
        description = "A demonstration interpreter for type system delta-lambda (of N.G. De-bruijn)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Delta-Lambda";
        broken = true;
      }) {};
 
@@ -4775,7 +4837,10 @@ self: {
        librarySystemDepends = [ dsound ];
        description = "Partial binding to the Microsoft DirectSound API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {dsound = null;};
 
   "DisTract" = callPackage
@@ -4830,6 +4895,7 @@ self: {
        description = "Hash modules (currently Murmur3)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Dish";
        broken = true;
      }) {};
 
@@ -4899,6 +4965,7 @@ self: {
        description = "Frameshift-aware alignment of protein sequences with DNA sequences";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DnaProteinAlignment";
      }) {};
 
   "DocTest" = callPackage
@@ -4917,6 +4984,7 @@ self: {
        description = "Test interactive Haskell examples";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doctest";
      }) {};
 
   "Docs" = callPackage
@@ -4947,6 +5015,7 @@ self: {
        description = "A tool for deriving hylomorphisms";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DrHylo";
      }) {};
 
   "DrIFT" = callPackage
@@ -4996,6 +5065,7 @@ self: {
        description = "An implementation of the Dung argumentation frameworks";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dungell";
        broken = true;
      }) {};
 
@@ -5229,6 +5299,7 @@ self: {
        executableToolDepends = [ happy ];
        description = "Peter's Syntax Diagram Drawing Tool";
        license = lib.licenses.bsd3;
+       mainProgram = "ebnf2ps";
      }) {};
 
   "EdisonAPI" = callPackage
@@ -5280,6 +5351,7 @@ self: {
        description = "Query language and report generator for edit logs";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "report";
      }) {};
 
   "Eight-Ball-Pool-Hack-Cheats" = callPackage
@@ -5379,6 +5451,7 @@ self: {
        description = "derives heuristic rules from nominal data";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "emping";
        broken = true;
      }) {};
 
@@ -5481,6 +5554,7 @@ self: {
        description = "Render math formula in ASCII, and perform some simplifications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "eq";
        broken = true;
      }) {};
 
@@ -5555,6 +5629,7 @@ self: {
        description = "A new implementation of the LambdaMOO server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "etamoo";
      }) {inherit (pkgs) pcre;};
 
   "Etage" = callPackage
@@ -5591,6 +5666,7 @@ self: {
        description = "Data-flow based graph algorithms";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "etage-graph-test";
      }) {};
 
   "Eternal10Seconds" = callPackage
@@ -5606,6 +5682,7 @@ self: {
        description = "A 2-D shooting game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Eternal10Seconds";
      }) {};
 
   "Etherbunny" = callPackage
@@ -5628,6 +5705,7 @@ self: {
        description = "A network analysis toolkit for Haskell";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "etherbunny";
      }) {inherit (pkgs) libpcap;};
 
   "EuroIT" = callPackage
@@ -5655,9 +5733,7 @@ self: {
        ];
        description = "Library for computer music research and education";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "EventSocket" = callPackage
@@ -5733,6 +5809,7 @@ self: {
        description = "Compose music";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fcomp";
      }) {};
 
   "FM-SBLEX" = callPackage
@@ -5799,9 +5876,7 @@ self: {
        librarySystemDepends = [ ftgl ];
        description = "Portable TrueType font rendering for OpenGL using the Freetype2 library";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) ftgl;};
 
   "FTGL-bytestring" = callPackage
@@ -5839,6 +5914,7 @@ self: {
        description = "A command-line FTP client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "FTPLine";
      }) {};
 
   "Facebook-Password-Hacker-Online-Latest-Version" = callPackage
@@ -5957,6 +6033,7 @@ self: {
        description = "Annotate ps and pdf documents";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flm";
      }) {};
 
   "FerryCore" = callPackage
@@ -5989,6 +6066,7 @@ self: {
        description = "Evaluation using F-Algebras";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Feval";
        broken = true;
      }) {};
 
@@ -6092,6 +6170,7 @@ self: {
        description = "File content extraction/rearrangement";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Files";
        broken = true;
      }) {};
 
@@ -6231,6 +6310,7 @@ self: {
        description = "Wiki";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flippi";
      }) {};
 
   "FloatingHex" = callPackage
@@ -6436,6 +6516,7 @@ self: {
        description = "Utilities to generate and solve puzzles";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "foster";
      }) {};
 
   "FpMLv53" = callPackage
@@ -6466,6 +6547,7 @@ self: {
        executableSystemDepends = [ libX11 ];
        description = "Generates colorful wallpapers";
        license = lib.licenses.mit;
+       mainProgram = "FractalArt";
      }) {inherit (pkgs.xorg) libX11;};
 
   "Fractaler" = callPackage
@@ -6483,6 +6565,7 @@ self: {
        ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Fractaler";
        broken = true;
      }) {};
 
@@ -6611,6 +6694,7 @@ self: {
        description = "An experimental programming language with typed algebraic effects";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "frank";
      }) {};
 
   "FreeTypeGL" = callPackage
@@ -6664,6 +6748,7 @@ self: {
        description = "Funge-98 interpreter written in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fungi";
        broken = true;
      }) {};
 
@@ -6690,6 +6775,7 @@ self: {
        description = "GGg cipher";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "GGg";
        broken = true;
      }) {};
 
@@ -6769,6 +6855,7 @@ self: {
        description = "GLFW-b demo";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "GLFW-b-demo";
        broken = true;
      }) {};
 
@@ -7018,6 +7105,7 @@ self: {
        description = "GLFW OpenGL context creation for GPipe";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "playground";
        broken = true;
      }) {};
 
@@ -7091,6 +7179,7 @@ self: {
        description = "An Io interpreter in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ganymede";
        broken = true;
      }) {};
 
@@ -7120,6 +7209,7 @@ self: {
        description = "Several games";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gebop";
      }) {};
 
   "GenI" = callPackage
@@ -7154,6 +7244,7 @@ self: {
        description = "A natural language generator (specifically, an FB-LTAG surface realiser)";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "geni";
      }) {};
 
   "GenSmsPdu" = callPackage
@@ -7168,6 +7259,7 @@ self: {
        description = "Automatic SMS message generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gensmspdu";
      }) {};
 
   "Genbank" = callPackage
@@ -7187,6 +7279,7 @@ self: {
        description = "Libary for processing the NCBI genbank format";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "GenbankTest";
      }) {};
 
   "Gene-CluEDO" = callPackage
@@ -7213,6 +7306,7 @@ self: {
        description = "Hox gene clustering";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "GeneCluEDO";
      }) {};
 
   "GeneralTicTacToe" = callPackage
@@ -7227,6 +7321,7 @@ self: {
        description = "A general TicTacToe game implementation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "GeneralTicTacToe";
        broken = true;
      }) {};
 
@@ -7267,6 +7362,7 @@ self: {
        description = "MCFGs for Genus-1 RNA Pseudoknots";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "GenussFold";
      }) {};
 
   "GeoIp" = callPackage
@@ -7474,6 +7570,7 @@ self: {
        description = "SDL Frontend for Glome ray tracer";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Glome";
      }) {};
 
   "GoogleChart" = callPackage
@@ -7630,6 +7727,7 @@ self: {
        description = "Graph500 benchmark-related definitions and data set generator";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "graph500gen";
        broken = true;
      }) {};
 
@@ -7664,6 +7762,7 @@ self: {
        description = "Test harness for TriangleCount analysis";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TriangleCountTest";
      }) {};
 
   "GraphSCC" = callPackage
@@ -7772,6 +7871,7 @@ self: {
        description = "Notification utility for Growl";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "growlnotify";
      }) {};
 
   "Gtk2hsGenerics" = callPackage
@@ -7836,6 +7936,7 @@ self: {
        description = "A graphical REPL and development environment for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "guihaskell";
      }) {};
 
   "GuiTV" = callPackage
@@ -7869,6 +7970,7 @@ self: {
        description = "The Haskell/R mixed programming environment";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "H";
      }) {};
 
   "HABQT" = callPackage
@@ -7894,6 +7996,7 @@ self: {
        description = "Hierarchical adaptive Bayesian quantum tomography for quantum bits";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HABQT-simulation";
        broken = true;
      }) {};
 
@@ -8035,6 +8138,7 @@ self: {
        ];
        description = "High-level library for building command line interfaces";
        license = lib.licenses.bsd3;
+       mainProgram = "hangman";
      }) {};
 
   "HCard" = callPackage
@@ -8195,9 +8299,7 @@ self: {
        librarySystemDepends = [ pfstools ];
        description = "Utilities for reading, manipulating, and writing HDR images";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {inherit (pkgs) pfstools;};
@@ -8253,6 +8355,7 @@ self: {
        description = "The library for generating a graphical interface on the web";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HFitUI-exe";
        broken = true;
      }) {};
 
@@ -8284,9 +8387,7 @@ self: {
        '';
        description = "HFuse is a binding for the Linux FUSE library";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) fuse;};
 
   "HGE2D" = callPackage
@@ -8869,6 +8970,7 @@ self: {
        executableHaskellDepends = [ base regex-applicative ];
        description = "A preprocessor for HList labelable labels";
        license = lib.licenses.bsd3;
+       mainProgram = "HListPP";
      }) {};
 
   "HLogger" = callPackage
@@ -8884,6 +8986,7 @@ self: {
        description = "Simple, concurrent and easy-to-use logging library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "logger-0.0.1.0-test";
        broken = true;
      }) {};
 
@@ -8979,6 +9082,7 @@ self: {
        description = "Happy Network Manager";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HNM";
      }) {};
 
   "HNumeric" = callPackage
@@ -9028,6 +9132,7 @@ self: {
        description = "A binding for the OpenCV computer vision library";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cannyVideo";
        broken = true;
      }) {inherit (pkgs) opencv;};
 
@@ -9053,6 +9158,7 @@ self: {
        testHaskellDepends = [ base HTF ];
        description = "Generation of PDF documents";
        license = lib.licenses.bsd3;
+       mainProgram = "HPDF-Demo";
      }) {};
 
   "HPath" = callPackage
@@ -9076,6 +9182,7 @@ self: {
        description = "Extract Haskell declarations by name";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpath";
        broken = true;
      }) {};
 
@@ -9126,6 +9233,7 @@ self: {
        description = "A minimal monadic PLplot interface for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Example";
      }) {plplotd-gnome2 = null;};
 
   "HPong" = callPackage
@@ -9145,6 +9253,7 @@ self: {
        description = "A simple OpenGL Pong game based on GLFW";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpong";
      }) {};
 
   "HQu" = callPackage
@@ -9171,9 +9280,7 @@ self: {
        benchmarkHaskellDepends = [ base gauge ];
        description = "quantitative finance library";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {inherit (pkgs) gsl;};
@@ -9303,6 +9410,7 @@ self: {
        description = "Haskell raytracer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HRay";
      }) {};
 
   "HSFFIG" = callPackage
@@ -9344,6 +9452,7 @@ self: {
        description = "Gene Expression Programming evolutionary algorithm in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HSGEP_Regression";
      }) {};
 
   "HSH" = callPackage
@@ -9442,9 +9551,7 @@ self: {
        ];
        description = "Library for computer music education";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "HSoundFile" = callPackage
@@ -9546,6 +9653,7 @@ self: {
        ];
        description = "The Haskell Test Framework";
        license = lib.licenses.lgpl21Only;
+       mainProgram = "htfpp";
      }) {};
 
   "HTTP" = callPackage
@@ -9621,6 +9729,7 @@ self: {
        description = "Tableau based theorem prover for hybrid logics";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htab";
      }) {};
 
   "HTicTacToe" = callPackage
@@ -9639,6 +9748,7 @@ self: {
        description = "An SDL tic-tac-toe game";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HTicTacToe";
        broken = true;
      }) {};
 
@@ -9727,6 +9837,7 @@ self: {
        description = "A (prototyped) easy to use XMPP library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hxmpp-0.0.1.0-test";
      }) {};
 
   "HXQ" = callPackage
@@ -9761,6 +9872,7 @@ self: {
        description = "HaLeX enables modelling, manipulation and visualization of regular languages";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "halex";
        broken = true;
      }) {};
 
@@ -9822,6 +9934,7 @@ self: {
        description = "the Haskell Refactorer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-hare";
      }) {};
 
   "HaTeX" = callPackage
@@ -9861,6 +9974,7 @@ self: {
        description = "This package is deprecated. From version 3, HaTeX does not need this anymore.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "metahatex";
      }) {};
 
   "HaTeX-qq" = callPackage
@@ -9897,6 +10011,7 @@ self: {
        description = "An implementation of the Version Space Algebra learning framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tests";
      }) {};
 
   "HaXml" = callPackage
@@ -9953,6 +10068,7 @@ self: {
        description = "A Procmail Replacement as Haskell EDSL";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackmail";
        broken = true;
      }) {};
 
@@ -10020,6 +10136,7 @@ self: {
        description = "The classic game of Hangman";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Hangman";
        broken = true;
      }) {};
 
@@ -10039,6 +10156,7 @@ self: {
        description = "Yet another Hangman game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hangman-ascii";
        broken = true;
      }) {};
 
@@ -10083,6 +10201,7 @@ self: {
        description = "Harmony Analysis and Retrieval of Music";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "harmtrace";
      }) {};
 
   "HarmTrace-Base" = callPackage
@@ -10172,6 +10291,7 @@ self: {
        description = "Minimalist R5RS Scheme interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haschoo";
      }) {};
 
   "Hashell" = callPackage
@@ -10191,6 +10311,7 @@ self: {
        description = "Simple shell written in Haskell";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hashell";
      }) {};
 
   "HaskRel" = callPackage
@@ -10233,6 +10354,7 @@ self: {
        description = "Haskell source code analysis program";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HaskellAnalysisProgram";
        broken = true;
      }) {};
 
@@ -10333,6 +10455,7 @@ self: {
        description = "A concurrent bittorrent client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HaskellTorrent";
        broken = true;
      }) {};
 
@@ -10348,6 +10471,7 @@ self: {
        description = "Haskell Tutorials by Evgeny Ukhanov";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Haskell.Tutorials";
        broken = true;
      }) {};
 
@@ -10367,6 +10491,7 @@ self: {
        description = "A reproduction of the Atari 1979 classic \"Asteroids\"";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Haskelloids";
        broken = true;
      }) {};
 
@@ -10492,6 +10617,7 @@ self: {
        description = "Line oriented editor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hedi";
      }) {};
 
   "HerbiePlugin" = callPackage
@@ -10613,6 +10739,7 @@ self: {
        description = "A playground for testing Hipmunk";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HipmunkPlayground";
      }) {};
 
   "Hish" = callPackage
@@ -10633,6 +10760,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hish";
        broken = true;
      }) {};
 
@@ -10662,6 +10790,7 @@ self: {
        description = "An MPD client designed for a Home Theatre PC";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmpf";
        broken = true;
      }) {};
 
@@ -10840,6 +10969,7 @@ self: {
        description = "A Cricket scoring application";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hricket";
        broken = true;
      }) {};
 
@@ -11130,6 +11260,7 @@ self: {
        description = "Stream Editor in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Hsed";
      }) {};
 
   "Hsmtlib" = callPackage
@@ -11184,6 +11315,7 @@ self: {
        description = "Easily bulk import CSV data to SQL Server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HulkImport-exe";
        broken = true;
      }) {};
 
@@ -11223,6 +11355,7 @@ self: {
        description = "The library for generating a WebGL scene for the web";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Hydrogen-exe";
      }) {};
 
   "I1M" = callPackage
@@ -11268,6 +11401,7 @@ self: {
        description = "Iterated Function System generation for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "IFS";
        broken = true;
      }) {};
 
@@ -11289,6 +11423,7 @@ self: {
        description = "Editor and interpreter for Interaction Nets";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "INblobs";
      }) {};
 
   "IOR" = callPackage
@@ -11380,6 +11515,7 @@ self: {
        description = "A RESTful microService for IPv6-related data";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ipv6db";
        broken = true;
      }) {};
 
@@ -11725,6 +11861,7 @@ self: {
        description = "A utility to print the SourceFile attribute of one or more Java class files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "javasf";
      }) {};
 
   "Javav" = callPackage
@@ -11739,6 +11876,7 @@ self: {
        description = "A utility to print the target version of Java class files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "javav";
        broken = true;
      }) {};
 
@@ -11751,9 +11889,7 @@ self: {
        libraryHaskellDepends = [ base Euterpea random ];
        description = "Library for modeling jazz improvisation";
        license = "unknown";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "Jdh" = callPackage
@@ -11798,6 +11934,7 @@ self: {
        description = "A transpiler from Python to C++ for competitive programming";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jikka";
        broken = true;
      }) {};
 
@@ -11822,6 +11959,7 @@ self: {
        description = "Design-by-contract for JavaScript";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jscc";
      }) {};
 
   "JsonGrammar" = callPackage
@@ -11861,6 +11999,7 @@ self: {
        description = "JuPyTer notebook parser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jupyter-extract";
      }) {};
 
   "JuicyPixels" = callPackage
@@ -11901,6 +12040,7 @@ self: {
        description = "BLP format decoder/encoder over JuicyPixels library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blp2any";
        broken = true;
      }) {};
 
@@ -11931,6 +12071,7 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "Blurhash is a very compact represenation of a placeholder for an image";
        license = lib.licenses.bsd3;
+       mainProgram = "JuicyPixels-blurhash-exe";
      }) {};
 
   "JuicyPixels-canvas" = callPackage
@@ -12210,6 +12351,7 @@ self: {
        description = "debug features for kics";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mkstrict";
      }) {};
 
   "KiCS-prophecy" = callPackage
@@ -12226,6 +12368,7 @@ self: {
        description = "a transformation used by the kics debugger";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "prophecy";
      }) {};
 
   "Kleislify" = callPackage
@@ -12278,9 +12421,7 @@ self: {
        ];
        description = "Library for automated composition and musical learning";
        license = "unknown";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "KyotoCabinet" = callPackage
@@ -12350,6 +12491,7 @@ self: {
        description = "LC-3 virtual machine";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LC3";
        broken = true;
      }) {};
 
@@ -12437,6 +12579,7 @@ self: {
        description = "LTS: Labelled Transition System";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LTS";
        broken = true;
      }) {};
 
@@ -12466,6 +12609,7 @@ self: {
        ];
        description = "A basic lambda calculator with beta reduction and a REPL";
        license = lib.licenses.bsd3;
+       mainProgram = "LambdaCalculator";
      }) {};
 
   "LambdaDB" = callPackage
@@ -12481,6 +12625,7 @@ self: {
        testHaskellDepends = [ base QuickCheck ];
        description = "On-memory Database using Lambda Function environment";
        license = lib.licenses.bsd3;
+       mainProgram = "LambdaDB-exe";
      }) {};
 
   "LambdaDesigner" = callPackage
@@ -12536,10 +12681,9 @@ self: {
        ];
        description = "A game engine library for tactical squad ASCII roguelike dungeon crawlers";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LambdaHack";
      }) {};
 
   "LambdaINet" = callPackage
@@ -12560,6 +12704,7 @@ self: {
        description = "Graphical Interaction Net Evaluator for Optimal Evaluation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LambdaINet";
      }) {};
 
   "LambdaNet" = callPackage
@@ -12620,6 +12765,7 @@ self: {
        description = "Simple shell for evaluating lambda expressions";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdaShell";
      }) {};
 
   "Lambdajudge" = callPackage
@@ -12733,6 +12879,7 @@ self: {
        description = "A simple sandboxing tool for Haskell packages";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LazyVault";
        broken = true;
      }) {};
 
@@ -12776,6 +12923,7 @@ self: {
        description = "A Snake II clone written using SDL";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Level0";
        broken = true;
      }) {};
 
@@ -12891,6 +13039,7 @@ self: {
        description = "Check a bunch of local html files for broken links";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "linkchecker";
      }) {};
 
   "Liquorice" = callPackage
@@ -13012,6 +13161,7 @@ self: {
        description = "Converter to convert from .lhs to .md and vice versa.";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lhsc";
        broken = true;
      }) {};
 
@@ -13159,6 +13309,7 @@ self: {
        description = "An execution and testing framework for the Linden Scripting Language (LSL)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LslPlus";
      }) {};
 
   "Lucu" = callPackage
@@ -13180,6 +13331,7 @@ self: {
        description = "HTTP Daemonic Library";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lucu-implant-file";
      }) {};
 
   "Lykah" = callPackage
@@ -13209,6 +13361,7 @@ self: {
        description = "A static website and blog generator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lykah";
      }) {};
 
   "MASMGen" = callPackage
@@ -13255,6 +13408,7 @@ self: {
        description = "Folding algorithm based on nucleotide cyclic motifs";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "MCFoldDP";
      }) {};
 
   "MFlow" = callPackage
@@ -13374,6 +13528,7 @@ self: {
        description = "Builds decks out of a meta";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mtg-builder";
        broken = true;
      }) {};
 
@@ -13531,6 +13686,7 @@ self: {
        description = "Console-based Role Playing Game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mazesofmonad";
        broken = true;
      }) {};
 
@@ -13657,6 +13813,7 @@ self: {
        description = "Haskell mailing list manager";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mhailist";
      }) {};
 
   "Michelangelo" = callPackage
@@ -13713,6 +13870,7 @@ self: {
        description = "A toy dependently typed programming language with type-based termination";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "miniagda";
        broken = true;
      }) {};
 
@@ -13828,6 +13986,7 @@ self: {
        description = "A FRP library based on signal functions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "MoeExample";
        broken = true;
      }) {};
 
@@ -13937,6 +14096,7 @@ self: {
        description = "Automatically generate layered monads";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mlab";
      }) {};
 
   "MonadPrompt" = callPackage
@@ -14004,6 +14164,7 @@ self: {
        description = "2-D arcade scroller";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "monadius";
        broken = true;
      }) {};
 
@@ -14024,6 +14185,7 @@ self: {
        ];
        description = "A minimalistic CLI Pomodoro timer";
        license = lib.licenses.mit;
+       mainProgram = "monadoro";
      }) {};
 
   "Monaris" = callPackage
@@ -14043,6 +14205,7 @@ self: {
        description = "A simple tetris clone";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Monaris";
      }) {};
 
   "Monatron" = callPackage
@@ -14128,6 +14291,7 @@ self: {
        description = "Automated Mutation Testing for HUnit tests";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mucheck-hunit";
      }) {};
 
   "MuCheck-Hspec" = callPackage
@@ -14143,6 +14307,7 @@ self: {
        description = "Automated Mutation Testing for Hspec tests";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mucheck-hspec";
      }) {};
 
   "MuCheck-QuickCheck" = callPackage
@@ -14158,6 +14323,7 @@ self: {
        description = "Automated Mutation Testing for QuickCheck tests";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mucheck-quickcheck";
      }) {};
 
   "MuCheck-SmallCheck" = callPackage
@@ -14173,6 +14339,7 @@ self: {
        description = "Automated Mutation Testing for SmallCheck tests";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mucheck-smallcheck";
      }) {};
 
   "Munkres" = callPackage
@@ -14264,6 +14431,7 @@ self: {
        description = "Most likely order of mutation events in RNA";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "MutationOrder";
      }) {};
 
   "MyPrimes" = callPackage
@@ -14280,6 +14448,7 @@ self: {
        description = "Generate all primes";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "PrimesList";
        broken = true;
      }) {};
 
@@ -14364,6 +14533,7 @@ self: {
        ];
        description = "NGLess implements ngless, a DSL for processing sequencing data";
        license = lib.licenses.mit;
+       mainProgram = "ngless";
      }) {};
 
   "NGrams" = callPackage
@@ -14378,6 +14548,7 @@ self: {
        description = "Simple application for calculating n-grams using Google";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ngrams";
        broken = true;
      }) {};
 
@@ -14452,6 +14623,7 @@ self: {
        description = "Generate NXC Code from DSL";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "legoDSL";
        broken = true;
      }) {};
 
@@ -14507,6 +14679,7 @@ self: {
        ];
        description = "NanoID generator";
        license = lib.licenses.bsd3;
+       mainProgram = "nanoid";
      }) {};
 
   "NanoProlog" = callPackage
@@ -14522,6 +14695,7 @@ self: {
        description = "Very small interpreter for a Prolog-like language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nano-prolog";
        broken = true;
      }) {};
 
@@ -14553,6 +14727,7 @@ self: {
        description = "Instances of NcStore for hypercuboids";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Main";
      }) {};
 
   "NaturalLanguageAlphabets" = callPackage
@@ -14617,6 +14792,7 @@ self: {
        description = "Context Algebra of near";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "NearContextAlgebra";
      }) {};
 
   "Neks" = callPackage
@@ -14743,6 +14919,7 @@ self: {
        description = "Ninja game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Ninjas";
      }) {};
 
   "NoHoed" = callPackage
@@ -14819,6 +14996,7 @@ self: {
        description = "A Nomic game in haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Nomyx";
      }) {};
 
   "Nomyx-Core" = callPackage
@@ -15017,6 +15195,7 @@ self: {
        description = "Nussinov78 using the ADPfusion library";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Nussinov78";
      }) {};
 
   "Nutri" = callPackage
@@ -15068,6 +15247,7 @@ self: {
        description = "ONC RPC (aka Sun RPC) and XDR library";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsrpcgen";
        broken = true;
      }) {};
 
@@ -15599,6 +15779,7 @@ self: {
        description = "A Programming Language in Construction";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Ordinary-exe";
        broken = true;
      }) {};
 
@@ -15616,6 +15797,7 @@ self: {
        description = "spam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test1";
        broken = true;
      }) {};
 
@@ -15784,6 +15966,7 @@ self: {
        description = "Page-oriented extraction and composition library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pio";
      }) {};
 
   "Paillier" = callPackage
@@ -15824,6 +16007,7 @@ self: {
        description = "Pandoc support for literate Agda";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "agdapandoc";
        broken = true;
      }) {};
 
@@ -16017,6 +16201,7 @@ self: {
        executableHaskellDepends = [ base cmdargs ];
        description = "CLI for pasting to lpaste.net";
        license = lib.licenses.gpl3Only;
+       mainProgram = "pastepipe";
      }) {};
 
   "PathTree" = callPackage
@@ -16148,6 +16333,7 @@ self: {
        description = "Personal Happstack Server Utils";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Phsu";
        broken = true;
      }) {};
 
@@ -16193,6 +16379,7 @@ self: {
        ];
        description = "Play Hangman Game";
        license = lib.licenses.bsd3;
+       mainProgram = "playHangmanGame";
      }) {};
 
   "PlayingCards" = callPackage
@@ -16252,6 +16439,7 @@ self: {
        description = "So far just a lint like program for PL/SQL. Diff and refactoring tools are planned";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "PlslLint";
      }) {};
 
   "Plural" = callPackage
@@ -16277,6 +16465,7 @@ self: {
        description = "An imaginary world";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Pollutocracy";
        broken = true;
      }) {};
 
@@ -16292,6 +16481,7 @@ self: {
        description = "high-performance distributed reverse / forward proxy & tunneling for TCP";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "PortFusion";
        broken = true;
      }) {};
 
@@ -16307,9 +16497,7 @@ self: {
        librarySystemDepends = [ alsa-lib ];
        description = "A binding for PortMedia/PortMidi";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) alsa-lib;};
 
   "PortMidi-simple" = callPackage
@@ -16323,9 +16511,7 @@ self: {
        libraryHaskellDepends = [ base PortMidi ];
        description = "Simplified PortMidi wrapper";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "PostgreSQL" = callPackage
@@ -16476,6 +16662,7 @@ self: {
        executableHaskellDepends = [ base old-time random ];
        description = "Propositional Logic";
        license = lib.licenses.bsd3;
+       mainProgram = "program";
      }) {};
 
   "Proper" = callPackage
@@ -16528,6 +16715,7 @@ self: {
        description = "A Perl 6 Implementation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pugs";
      }) {};
 
   "Pup-Events" = callPackage
@@ -16548,6 +16736,7 @@ self: {
        description = "A networked event handling framework for hooking into other programs";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pupevents-all";
      }) {};
 
   "Pup-Events-Client" = callPackage
@@ -16734,6 +16923,7 @@ self: {
        description = "Annotation Framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qapp";
        broken = true;
      }) {};
 
@@ -16848,6 +17038,7 @@ self: {
        executableHaskellDepends = [ base pandoc-types ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "R-pandoc";
        broken = true;
      }) {};
 
@@ -17029,6 +17220,7 @@ self: {
        description = "Multi-target RNA sequence design";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "RNAdesign";
      }) {};
 
   "RNAdraw" = callPackage
@@ -17049,6 +17241,7 @@ self: {
        description = "Draw RNA secondary structures";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "RNAdotplot";
        broken = true;
      }) {};
 
@@ -17138,6 +17331,7 @@ self: {
        executableHaskellDepends = [ base containers lens mtl ];
        testHaskellDepends = [ base containers lens mtl ];
        license = lib.licenses.mit;
+       mainProgram = "RSolve-exe";
      }) {};
 
   "RabbitMQ" = callPackage
@@ -17179,9 +17373,8 @@ self: {
        ];
        description = "A puzzle game written in Haskell with a cat in lead role";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "raincat";
      }) {};
 
   "Random123" = callPackage
@@ -17228,6 +17421,7 @@ self: {
        description = "Randomness intuition trainer";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "randometer";
        broken = true;
      }) {};
 
@@ -17273,6 +17467,7 @@ self: {
        description = "HTTP to XMPP omegle chats gate";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Ranka";
      }) {};
 
   "Rasenschach" = callPackage
@@ -17294,6 +17489,7 @@ self: {
        description = "Soccer simulation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Rasenschach";
        broken = true;
      }) {};
 
@@ -17344,6 +17540,7 @@ self: {
        testHaskellDepends = [ base hspec system-filepath text ];
        description = "Simple command line argument parsing";
        license = lib.licenses.bsd3;
+       mainProgram = "ReadArgsEx";
      }) {};
 
   "Redmine" = callPackage
@@ -17418,6 +17615,7 @@ self: {
        description = "A utility for computing distributions of material to review among reviewers";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "referees";
        broken = true;
      }) {};
 
@@ -17511,6 +17709,7 @@ self: {
        description = "Parallel implementation of Ritt-Wu's algorithm";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Ritt-Wu-exe";
        broken = true;
      }) {};
 
@@ -17562,6 +17761,7 @@ self: {
        description = "Limits the size of a directory's contents";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "RollingDirectory";
      }) {};
 
   "RoyalMonad" = callPackage
@@ -17665,6 +17865,7 @@ self: {
        description = "ESCRIPT: a human friendly language for programming Bitcoin scripts";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SCRIPTWriter-exe";
      }) {};
 
   "SCalendar" = callPackage
@@ -17853,6 +18054,7 @@ self: {
        description = "An example of using the SG and OpenGL libraries";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sgdemo";
      }) {};
 
   "SGplus" = callPackage
@@ -17922,6 +18124,7 @@ self: {
        description = "The Simple Javascript Wrench";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sjw";
        broken = true;
      }) {};
 
@@ -17990,6 +18193,7 @@ self: {
        description = "STG Symbolic Execution";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SSTG-exe";
        broken = true;
      }) {};
 
@@ -18100,6 +18304,7 @@ self: {
        description = "Code generation tool for Quartz code from a SVG";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "svg2q";
      }) {};
 
   "SVGFonts" = callPackage
@@ -18169,6 +18374,7 @@ self: {
        description = "Generate a parser (in Haskell) with the SableCC parser generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sable2hs";
        broken = true;
      }) {};
 
@@ -18233,6 +18439,7 @@ self: {
        description = "Saturnin CI / Job System";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "saturnin";
        broken = true;
      }) {};
 
@@ -18321,6 +18528,7 @@ self: {
        description = "Size limited temp filesystem based on fuse";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ScratchFs";
        broken = true;
      }) {};
 
@@ -18341,6 +18549,7 @@ self: {
        description = "A cross platform P2P VPN application built using Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scurry";
      }) {};
 
   "SecureHash-SHA3" = callPackage
@@ -18394,6 +18603,7 @@ self: {
        description = "Selects a representative subset of sequences from multiple sequence alignment";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SelectSequencesFromMSA";
      }) {};
 
   "Semantique" = callPackage
@@ -18413,6 +18623,7 @@ self: {
        description = "Command-line tool for maintaining the Semantique database";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "semantique";
        broken = true;
      }) {};
 
@@ -18502,6 +18713,7 @@ self: {
        description = "Shell script analysis tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shellcheck";
      }) {};
 
   "ShellCheck" = callPackage
@@ -18531,6 +18743,7 @@ self: {
        ];
        description = "Shell script analysis tool";
        license = lib.licenses.gpl3Only;
+       mainProgram = "shellcheck";
      }) {};
 
   "Shellac" = callPackage
@@ -18749,6 +18962,7 @@ self: {
        description = "Chrome extension to aide in development";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "devtools";
      }) {};
 
   "Shpadoinkle-disembodied" = callPackage
@@ -18845,6 +19059,7 @@ self: {
        description = "Isreal Swan will make a snowman for you!";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "isreal";
        broken = true;
      }) {};
 
@@ -18963,6 +19178,7 @@ self: {
        executableHaskellDepends = [ base GLUT ];
        description = "A vector shooter game";
        license = lib.licenses.bsd3;
+       mainProgram = "shu-thing";
      }) {};
 
   "SimpleAES" = callPackage
@@ -19061,6 +19277,7 @@ self: {
        description = "A simple static file server, for when apache is overkill";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "simpleserver";
      }) {};
 
   "SimpleTableGenerator" = callPackage
@@ -19094,6 +19311,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Prototypical type checker for Type Theory with Sized Natural Numbers";
        license = "unknown";
+       mainProgram = "Sit.bin";
      }) {};
 
   "SizeCompare" = callPackage
@@ -19224,6 +19442,7 @@ self: {
        description = "Football simulation framework for teaching functional programming";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sfRecord";
      }) {};
 
   "SoccerFunGL" = callPackage
@@ -19277,6 +19496,7 @@ self: {
        description = "Static code analysis using graph-theoretic techniques";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SourceGraph";
      }) {};
 
   "Southpaw" = callPackage
@@ -19311,6 +19531,7 @@ self: {
        ];
        description = "Video game";
        license = lib.licenses.bsd3;
+       mainProgram = "spaceInvaders";
      }) {};
 
   "SpacePrivateers" = callPackage
@@ -19333,6 +19554,7 @@ self: {
        description = "Simple space pirate roguelike";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SpacePrivateers";
      }) {};
 
   "SpinCounter" = callPackage
@@ -19559,6 +19781,7 @@ self: {
        description = "A simple MVCC like library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Stasis";
        broken = true;
      }) {};
 
@@ -19660,6 +19883,7 @@ self: {
        description = "Converts SDF to Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Sdf2Haskell";
      }) {};
 
   "Strafunski-StrategyLib" = callPackage
@@ -19789,6 +20013,7 @@ self: {
        description = "Suffix array construction";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mkesa";
        broken = true;
      }) {};
 
@@ -19866,6 +20091,7 @@ self: {
        description = "Testing By Convention";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tbc";
        broken = true;
      }) {};
 
@@ -19937,6 +20163,7 @@ self: {
        ];
        description = "Testing in monads and transformers without explicit specs";
        license = lib.licenses.lgpl3Only;
+       mainProgram = "TLT-exe";
      }) {};
 
   "TORCS" = callPackage
@@ -19959,6 +20186,7 @@ self: {
        description = "Bindings to the TORCS vehicle simulator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Simple";
        broken = true;
      }) {};
 
@@ -20028,6 +20256,7 @@ self: {
        description = "A client for Quill databases";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Tables";
        broken = true;
      }) {};
 
@@ -20043,6 +20272,7 @@ self: {
        description = "Tool to render CSV into tables of various formats";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tablify";
        broken = true;
      }) {};
 
@@ -20063,6 +20293,7 @@ self: {
        ];
        description = "Tahin Password Generator";
        license = lib.licenses.bsd3;
+       mainProgram = "tahin";
      }) {};
 
   "Tainted" = callPackage
@@ -20148,6 +20379,7 @@ self: {
        ];
        description = "Run TLT tests from Tasty";
        license = lib.licenses.lgpl3Only;
+       mainProgram = "TLT-exe";
      }) {};
 
   "Taxonomy" = callPackage
@@ -20211,6 +20443,7 @@ self: {
        description = "Render general Haskell math to LaTeX. Or: math typesetting with high signal-to-noise–ratio.";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TeXmyMath-example";
      }) {};
 
   "TeaHS" = callPackage
@@ -20252,6 +20485,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Efficient pure ternary tree Sets and Maps";
        license = lib.licenses.bsd3;
+       mainProgram = "tdict";
      }) {};
 
   "TestExplode" = callPackage
@@ -20338,6 +20572,7 @@ self: {
        executableHaskellDepends = [ base safe ];
        description = "Tic Tac Toe in your command line!";
        license = lib.licenses.asl20;
+       mainProgram = "Tic-Tac-Toe";
      }) {};
 
   "TicTacToe" = callPackage
@@ -20391,6 +20626,7 @@ self: {
        description = "A simple tile-based digital clock screen saver";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TimePiece";
        broken = true;
      }) {};
 
@@ -20432,6 +20668,7 @@ self: {
        description = "Game for Lounge Marmelade";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "titim";
        broken = true;
      }) {};
 
@@ -20448,6 +20685,7 @@ self: {
        description = "Constraint solving framework employed by the Helium Compiler";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "topsolver";
        broken = true;
      }) {};
 
@@ -20518,6 +20756,7 @@ self: {
        description = "eDSL in R for Safe Variable Transformarion";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TransformeR-exe";
        broken = true;
      }) {};
 
@@ -20533,6 +20772,7 @@ self: {
        description = "Tutorial on monad transformers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TransformersStepByStep";
        broken = true;
      }) {};
 
@@ -20668,6 +20908,7 @@ self: {
        description = "Typing speed game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TypeClass";
      }) {};
 
   "TypeCompose" = callPackage
@@ -20695,6 +20936,7 @@ self: {
        description = "TypeIlluminator is a prototype tool exploring debugging of type errors/";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "typeilluminator";
      }) {};
 
   "TypeNat" = callPackage
@@ -20721,6 +20963,7 @@ self: {
        executableHaskellDepends = [ base containers directory time ];
        description = "Command Line Typing speed tester";
        license = lib.licenses.gpl3Only;
+       mainProgram = "typingtester";
      }) {};
 
   "UISF" = callPackage
@@ -20754,6 +20997,7 @@ self: {
        description = "A small command-line accounting tool";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "umm";
      }) {};
 
   "URLT" = callPackage
@@ -20809,6 +21053,7 @@ self: {
        description = "Processing popular picture formats into .c or .raw format in RGB565";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "UTFTConverter";
        broken = true;
      }) {};
 
@@ -20830,7 +21075,7 @@ self: {
        ];
        description = "It provides the functionality like unix \"uniq\" utility";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ kiwi ];
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "Unixutils" = callPackage
@@ -20860,9 +21105,7 @@ self: {
        libraryHaskellDepends = [ base unix ];
        description = "A simple interface to shadow passwords (aka, shadow.h)";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "Updater" = callPackage
@@ -20941,6 +21184,7 @@ self: {
        description = "Provides access to Vkontakte social network via public API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vkq";
        broken = true;
      }) {};
 
@@ -21069,6 +21313,7 @@ self: {
        description = "A solver for the WordBrain game";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Verba";
        broken = true;
      }) {};
 
@@ -21161,6 +21406,7 @@ self: {
        description = "Villefort is a task manager and time tracker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Villefort";
      }) {};
 
   "Vulkan" = callPackage
@@ -21185,8 +21431,10 @@ self: {
        ];
        description = "Bindings to the VulkanMemoryAllocator library";
        license = lib.licenses.bsd3;
-       platforms = [ "aarch64-linux" "x86_64-linux" ];
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       badPlatforms = [
+         "i686-linux" "x86_64-darwin" "aarch64-darwin" "armv7l-linux"
+       ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {};
 
   "WAVE" = callPackage
@@ -21204,6 +21452,7 @@ self: {
        description = "WAVE audio file IO library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sinewave";
      }) {};
 
   "WEditor" = callPackage
@@ -21234,6 +21483,7 @@ self: {
        description = "Text-editor widget with dynamic line-wrapping for use with Brick";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "brick-example";
      }) {};
 
   "WEditorHyphen" = callPackage
@@ -21279,6 +21529,7 @@ self: {
        description = "A simple library to access to the WL 500gP router from the Haskell code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -21459,6 +21710,7 @@ self: {
        description = "Logic interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "WeberLogic";
        broken = true;
      }) {};
 
@@ -21487,6 +21739,7 @@ self: {
        description = "Regexp-like engine to scrap web data";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "webrexp";
        broken = true;
      }) {};
 
@@ -21537,7 +21790,10 @@ self: {
        sha256 = "1nivdwjp9x9i64xg8gf3xj8khm9dfq6n5m8kvvlhz7i7ypl4mv72";
        description = "A binding to Windows Win32 API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32_2_13_2_0" = callPackage
@@ -21548,7 +21804,11 @@ self: {
        sha256 = "1gmhqb0v3ds7csrmzw211jqjjp955akgp7ykngwnpqb6kpbvpcf4";
        description = "A binding to Windows Win32 API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
+       hydraPlatforms = lib.platforms.none;
      }) {};
 
   "Win32-console" = callPackage
@@ -21560,7 +21820,10 @@ self: {
        libraryHaskellDepends = [ base Win32 ];
        description = "Binding to the Win32 console API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-dhcp-server" = callPackage
@@ -21572,7 +21835,10 @@ self: {
        libraryHaskellDepends = [ base text Win32 Win32-errors ];
        description = "Win32 DHCP Server Management API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-errors" = callPackage
@@ -21589,7 +21855,10 @@ self: {
        testHaskellDepends = [ base hspec QuickCheck Win32 ];
        description = "Alternative error handling for Win32 foreign calls";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-extras" = callPackage
@@ -21604,7 +21873,10 @@ self: {
        librarySystemDepends = [ imm32 msimg32 ];
        description = "Provides missing Win32 API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {imm32 = null; msimg32 = null;};
 
   "Win32-junction-point" = callPackage
@@ -21616,7 +21888,10 @@ self: {
        libraryHaskellDepends = [ base text Win32 Win32-errors ];
        description = "Support for manipulating NTFS junction points";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-notify" = callPackage
@@ -21630,7 +21905,10 @@ self: {
        libraryHaskellDepends = [ base containers directory Win32 ];
        description = "A binding to part of the Win32 library for file notification";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-security" = callPackage
@@ -21644,7 +21922,10 @@ self: {
        libraryHaskellDepends = [ base text Win32 Win32-errors ];
        description = "Haskell bindings to a security-related functions of the Windows API";
        license = lib.licenses.mit;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-services" = callPackage
@@ -21657,7 +21938,10 @@ self: {
        librarySystemDepends = [ Advapi32 ];
        description = "Windows service applications";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {Advapi32 = null;};
 
   "Win32-services-wrapper" = callPackage
@@ -21673,7 +21957,10 @@ self: {
        ];
        description = "Wrapper code for making a Win32 service";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "Win32-shortcut" = callPackage
@@ -21688,7 +21975,6 @@ self: {
        librarySystemDepends = [ libossp_uuid ole32 ];
        description = "Support for manipulating shortcuts (.lnk files) on Windows";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
      }) {inherit (pkgs) libossp_uuid; ole32 = null;};
 
   "Wired" = callPackage
@@ -21746,6 +22032,7 @@ self: {
        description = "Bigram word pair alignments";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "WordAlign";
      }) {};
 
   "WordNet" = callPackage
@@ -21791,6 +22078,7 @@ self: {
        description = "Plaintext prose redundancy linter";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wordlint";
        broken = true;
      }) {};
 
@@ -21966,7 +22254,10 @@ self: {
        librarySystemDepends = [ xinput ];
        description = "Bindings for the DirectX XInput library";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {inherit (pkgs.xorg) xinput;};
 
   "XML" = callPackage
@@ -22057,6 +22348,7 @@ self: {
        description = "An implementation of a polynomial-time top-down parser suitable for NLP";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "solarman.cgi";
      }) {};
 
   "Xauth" = callPackage
@@ -22088,6 +22380,7 @@ self: {
        description = "Gtk command launcher with identicon";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Xec";
        broken = true;
      }) {};
 
@@ -22136,6 +22429,7 @@ self: {
        description = "Yet Another Pong Clone using SDL";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "YACPong";
      }) {};
 
   "YFrob" = callPackage
@@ -22184,6 +22478,7 @@ self: {
        description = "A simple blog engine powered by Yesod";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Yablog";
      }) {};
 
   "YamlReference" = callPackage
@@ -22212,6 +22507,7 @@ self: {
        description = "YAML reference implementation";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yaml2yeast";
        broken = true;
      }) {};
 
@@ -22260,6 +22556,7 @@ self: {
        description = "Software synthesizer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yampasynth-wav";
        broken = true;
      }) {};
 
@@ -22310,6 +22607,7 @@ self: {
        description = "A functional MUD client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yogurt";
      }) {inherit (pkgs) readline;};
 
   "Z-Botan" = callPackage
@@ -22480,6 +22778,7 @@ self: {
        description = "A Z-machine interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zmachine";
        broken = true;
      }) {};
 
@@ -22552,6 +22851,7 @@ self: {
        description = "Compare genome assemblies";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "a50";
      }) {};
 
   "abacate" = callPackage
@@ -22582,6 +22882,7 @@ self: {
        ];
        description = "Generate instances of the ABC Logic Puzzle";
        license = lib.licenses.bsd3;
+       mainProgram = "abc-puzzle";
      }) {};
 
   "abcBridge" = callPackage
@@ -22931,6 +23232,7 @@ self: {
        description = "Basic Linear Algebra using native CUBLAS library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "accelerate-cublas-demo";
      }) {};
 
   "accelerate-cuda" = callPackage
@@ -23102,6 +23404,7 @@ self: {
        description = "Compare different implementations of the Fast Fourier Transform";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "accelerate-fourier-benchmark";
      }) {};
 
   "accelerate-io" = callPackage
@@ -23513,6 +23816,7 @@ self: {
        ];
        description = "Add ACID guarantees to any serializable Haskell data structure";
        license = lib.licenses.publicDomain;
+       mainProgram = "acid-state-repair";
      }) {};
 
   "acid-state-dist" = callPackage
@@ -23596,6 +23900,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "A full featured empty project";
        license = lib.licenses.bsd3;
+       mainProgram = "acme-box";
      }) {};
 
   "acme-cadre" = callPackage
@@ -23674,6 +23979,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Maybe gives you a cute boy";
        license = lib.licenses.publicDomain;
+       mainProgram = "CuteBoy";
      }) {};
 
   "acme-cutegirl" = callPackage
@@ -23688,6 +23994,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Maybe gives you a cute girl";
        license = lib.licenses.gpl3Only;
+       mainProgram = "CuteGirl";
      }) {};
 
   "acme-default" = callPackage
@@ -23795,6 +24102,7 @@ self: {
        description = "Evil inventions in the Tri-State area";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "evilplan";
        broken = true;
      }) {};
 
@@ -24272,6 +24580,7 @@ self: {
        description = "Haskell code presentation tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "activehs";
      }) {};
 
   "activehs-base" = callPackage
@@ -24438,6 +24747,7 @@ self: {
        ];
        description = "Convert adblock config files to privoxy format";
        license = lib.licenses.gpl3Only;
+       mainProgram = "adblock2privoxy";
      }) {};
 
   "addLicenseInfo" = callPackage
@@ -24451,6 +24761,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "Adds license info to the top of a file";
        license = lib.licenses.bsd3;
+       mainProgram = "addLicenseInfo";
      }) {};
 
   "addy" = callPackage
@@ -24694,6 +25005,7 @@ self: {
        description = "Parse Advent of Code ASCII art letters";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "advent-of-code-ocr";
        broken = true;
      }) {};
 
@@ -25267,6 +25579,7 @@ self: {
        ];
        description = "Derivation of Aeson instances for GADTs";
        license = lib.licenses.bsd3;
+       mainProgram = "readme";
      }) {};
 
   "aeson-generic-compat" = callPackage
@@ -25543,6 +25856,7 @@ self: {
        ];
        description = "JSON pretty-printing library and command-line tool";
        license = lib.licenses.bsd3;
+       mainProgram = "aeson-pretty";
      }) {};
 
   "aeson-qq" = callPackage
@@ -26043,6 +26357,7 @@ self: {
        description = "Infinite state model checking of iterative C programs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "afv";
      }) {};
 
   "ag-pictgen" = callPackage
@@ -26057,6 +26372,7 @@ self: {
        description = "Attribute Grammar picture generation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ag-pictgen";
        broken = true;
      }) {};
 
@@ -26087,6 +26403,7 @@ self: {
        description = "An implementation of language server protocal (LSP) for Agda 2";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "als";
        broken = true;
      }) {};
 
@@ -26109,6 +26426,7 @@ self: {
        description = "Http server for Agda (prototype)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "agda-server";
      }) {};
 
   "agda-snippets" = callPackage
@@ -26130,6 +26448,7 @@ self: {
        description = "Render just the Agda snippets of a literate Agda file to HTML";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "agda-snippets";
        broken = true;
      }) {};
 
@@ -26171,6 +26490,7 @@ self: {
        description = "Check for unused code in an Agda project";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "agda-unused";
        broken = true;
      }) {};
 
@@ -26191,6 +26511,7 @@ self: {
        testToolDepends = [ goldplate ];
        description = "Translate .agda files into .lagda.tex files.";
        license = lib.licenses.publicDomain;
+       mainProgram = "agda2lagda";
      }) {};
 
   "agentx" = callPackage
@@ -26227,6 +26548,7 @@ self: {
        executableHaskellDepends = [ base containers ];
        description = "Unification and Matching in an Abelian Group";
        license = "GPL";
+       mainProgram = "agum";
      }) {};
 
   "aig" = callPackage
@@ -26276,6 +26598,7 @@ self: {
        description = "Aeronautical Information Package (AIP)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "aip";
      }) {};
 
   "air" = callPackage
@@ -26657,6 +26980,7 @@ self: {
        ];
        description = "a diceware passphrase generator";
        license = lib.licenses.mit;
+       mainProgram = "alea";
      }) {};
 
   "alerta" = callPackage
@@ -26705,6 +27029,7 @@ self: {
        testHaskellDepends = [ base process ];
        description = "Alex is a tool for generating lexical analysers in Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "alex";
      }) {};
 
   "alex-meta" = callPackage
@@ -26796,6 +27121,7 @@ self: {
        description = "Fast Aho-Corasick string searching";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dump-automaton";
        broken = true;
      }) {};
 
@@ -26844,6 +27170,7 @@ self: {
        description = "Algorithmic automation for various DAWs";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "alga";
        broken = true;
      }) {};
 
@@ -27081,6 +27408,7 @@ self: {
        description = "An implementation of Knuth's algorithm S";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sample";
        broken = true;
      }) {};
 
@@ -27137,6 +27465,7 @@ self: {
        description = "Helps to create experimental music from a file (or its part) and a Ukrainian text";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "acb";
      }) {};
 
   "algorithmic-composition-basic" = callPackage
@@ -27250,6 +27579,7 @@ self: {
        ];
        description = "Find relative time displacement of two recordings of the same music";
        license = lib.licenses.bsd3;
+       mainProgram = "align-audio";
      }) {};
 
   "align-text" = callPackage
@@ -27264,6 +27594,7 @@ self: {
        description = "A simple unix filter to align text on specified substrings";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "align";
        broken = true;
      }) {};
 
@@ -27389,6 +27720,7 @@ self: {
        description = "a practical affine language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "alms";
      }) {};
 
   "alpaca-netcode" = callPackage
@@ -27427,6 +27759,7 @@ self: {
        description = "A compiler for the Alpha language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "alpha";
      }) {};
 
   "alphachar" = callPackage
@@ -27503,9 +27836,6 @@ self: {
        libraryPkgconfigDepends = [ alsa-lib ];
        description = "Binding to the ALSA Library API (Exceptions)";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
      }) {inherit (pkgs) alsa-lib;};
 
   "alsa-gui" = callPackage
@@ -27559,9 +27889,7 @@ self: {
        libraryToolDepends = [ c2hs ];
        description = "Bindings to the ALSA simple mixer API";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) alsa-lib;};
 
   "alsa-pcm" = callPackage
@@ -27581,9 +27909,7 @@ self: {
        libraryPkgconfigDepends = [ alsa-lib ];
        description = "Binding to the ALSA Library API (PCM audio)";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) alsa-lib;};
 
   "alsa-pcm-tests" = callPackage
@@ -27620,9 +27946,7 @@ self: {
        libraryPkgconfigDepends = [ alsa-lib ];
        description = "Binding to the ALSA Library API (MIDI sequencer)";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) alsa-lib;};
 
   "alsa-seq-tests" = callPackage
@@ -27746,6 +28070,7 @@ self: {
        description = "Implement a menu experience fit for web users";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "alto";
      }) {};
 
   "altsvc" = callPackage
@@ -27848,6 +28173,7 @@ self: {
        description = "Connector for Amazon Products API";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "repl";
        broken = true;
      }) {};
 
@@ -28525,6 +28851,7 @@ self: {
        description = "A Haskell equivalent of \"aws rds generate-db-auth-token\"";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "generate-db-auth-token";
      }) {};
 
   "amazonka-core" = callPackage
@@ -30499,6 +30826,7 @@ self: {
        description = "Toolsuite for automated design of business processes";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ampersand";
      }) {};
 
   "amqp" = callPackage
@@ -30526,6 +30854,7 @@ self: {
        ];
        description = "Client library for AMQP servers (currently only RabbitMQ)";
        license = lib.licenses.bsd3;
+       mainProgram = "amqp-builder";
      }) {};
 
   "amqp-conduit" = callPackage
@@ -30613,6 +30942,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {server = null;};
 
@@ -30627,6 +30957,7 @@ self: {
        executableHaskellDepends = [ base deepseq parsec ];
        description = "Interpreter for AM";
        license = "GPL";
+       mainProgram = "amrun";
      }) {};
 
   "anagrep" = callPackage
@@ -30649,6 +30980,7 @@ self: {
        benchmarkHaskellDepends = [ base bytestring criterion ];
        description = "Find strings with permutations (anagrams) that match a regular expression";
        license = lib.licenses.bsd3;
+       mainProgram = "anagrep";
      }) {};
 
   "analyze" = callPackage
@@ -30712,6 +31044,7 @@ self: {
        ];
        description = "Simple literate programming preprocessor";
        license = lib.licenses.gpl3Only;
+       mainProgram = "anansi";
      }) {};
 
   "anansi-hscolour" = callPackage
@@ -30771,6 +31104,7 @@ self: {
        description = "Anatomy: Atomo documentation system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "anatomy";
      }) {};
 
   "android" = callPackage
@@ -30824,6 +31158,7 @@ self: {
        description = "A pretty printer for Android Lint errors";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "android-lint-summary";
        broken = true;
      }) {};
 
@@ -30853,6 +31188,7 @@ self: {
        description = "Process management and supervision daemon";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "angel";
        broken = true;
      }) {};
 
@@ -30883,6 +31219,7 @@ self: {
        description = "A small, general-purpose programming language";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "angle";
        broken = true;
      }) {};
 
@@ -30917,6 +31254,7 @@ self: {
        description = "text-file based ASCII animator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "animascii";
        broken = true;
      }) {};
 
@@ -30955,6 +31293,7 @@ self: {
        description = "Animation for sprites";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "animate-example";
      }) {};
 
   "animate-frames" = callPackage
@@ -30977,6 +31316,7 @@ self: {
        description = "Convert sprite frames to animate files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "animate-frames";
      }) {};
 
   "animate-preview" = callPackage
@@ -31003,6 +31343,7 @@ self: {
        description = "Preview tool for sprite animation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "animate-preview";
      }) {};
 
   "animate-sdl2" = callPackage
@@ -31036,6 +31377,7 @@ self: {
        description = "Tools for interacting with Anki database";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "anki-tools-test";
        broken = true;
      }) {};
 
@@ -31061,7 +31403,8 @@ self: {
        description = "Medium-level language that desugars to Morte";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "annah";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "annihilator" = callPackage
@@ -31271,6 +31614,7 @@ self: {
        description = "A web interface to Antisplice dungeons";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ironforge-yesod";
      }) {};
 
   "antfarm" = callPackage
@@ -31294,6 +31638,7 @@ self: {
        description = "Referring expressions for definitions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "antfarm";
        broken = true;
      }) {};
 
@@ -31321,6 +31666,7 @@ self: {
        description = "This is an IRC bot for Mafia and Resistance";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "anticiv";
      }) {};
 
   "antigate" = callPackage
@@ -31355,6 +31701,7 @@ self: {
        description = "Define the language containment (=subtyping) relation on regulare expressions";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -31725,6 +32072,7 @@ self: {
        description = "Haskell binding to the ANTLR parser generator C runtime library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "antlrcmkenums";
      }) {antlr3c = null;};
 
   "anydbm" = callPackage
@@ -31871,6 +32219,7 @@ self: {
        description = "Get all your structure and rip it apart";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -31969,6 +32318,7 @@ self: {
        description = "Server and community browser for the game Tremulous";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "apelsin";
      }) {};
 
   "api-builder" = callPackage
@@ -32054,6 +32404,7 @@ self: {
        testHaskellDepends = [ base bytestring hs-coindesk-api ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mnb-app";
        broken = true;
      }) {hs-coindesk-api = null;};
 
@@ -32096,6 +32447,7 @@ self: {
        description = "JSON-RPC API client for Accumulate blockchain";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "acme-app";
      }) {};
 
   "api-rpc-factom" = callPackage
@@ -32122,6 +32474,7 @@ self: {
        description = "RPC API client for Factom";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "factom-app";
      }) {};
 
   "api-rpc-pegnet" = callPackage
@@ -32531,6 +32884,7 @@ self: {
        description = "Apple Push Notification service HTTP/2 integration";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "apns-http2-example";
        broken = true;
      }) {};
 
@@ -32562,6 +32916,7 @@ self: {
        description = "a faster debian repository";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "apotiki";
      }) {};
 
   "app-lens" = callPackage
@@ -32633,6 +32988,7 @@ self: {
        description = "app container types and tools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "appc";
        broken = true;
      }) {};
 
@@ -32808,6 +33164,7 @@ self: {
        ];
        description = "Perform refactorings specified by the refact library";
        license = lib.licenses.bsd3;
+       mainProgram = "refactor";
      }) {};
 
   "apply-refact_0_10_0_0" = callPackage
@@ -32842,6 +33199,7 @@ self: {
        description = "Perform refactorings specified by the refact library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "refactor";
      }) {};
 
   "apply-unordered" = callPackage
@@ -32944,6 +33302,7 @@ self: {
        description = "Easy-to-use emulation of approximate, ranges and tolerances in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "approx-exe";
        broken = true;
      }) {};
 
@@ -33018,6 +33377,7 @@ self: {
        executableHaskellDepends = [ base bytestring ];
        description = "Wipes time stamps from .a files (like ar -D)";
        license = lib.licenses.mit;
+       mainProgram = "ar-timestamp-wiper";
      }) {};
 
   "arb-fft" = callPackage
@@ -33042,6 +33402,7 @@ self: {
        description = "Pure Haskell arbitrary length FFT library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "profile-256";
        broken = true;
      }) {};
 
@@ -33151,6 +33512,7 @@ self: {
        description = "Simple logging library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "arbor-monad-logger-example";
        broken = true;
      }) {};
 
@@ -33252,7 +33614,7 @@ self: {
        ];
        description = "Automatic Rule-Based Time Tracker";
        license = lib.licenses.gpl2Only;
-       maintainers = with lib.maintainers; [ rvl ];
+       maintainers = [ lib.maintainers.rvl ];
      }) {};
 
   "arcgrid" = callPackage
@@ -33267,6 +33629,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Parse ESRI/ArcInfo (ArcGrid) raster GIS files";
        license = lib.licenses.bsd3;
+       mainProgram = "arcgrid-dump";
      }) {};
 
   "arcgrid-viewer" = callPackage
@@ -33282,6 +33645,7 @@ self: {
        ];
        description = "Simple viewer for ESRI/ArcInfo (ArcGrid) geospatial data";
        license = lib.licenses.bsd3;
+       mainProgram = "arcgrid-viewer";
      }) {};
 
   "arch-hs" = callPackage
@@ -33344,7 +33708,7 @@ self: {
        ];
        description = "Arch Linux official and AUR web interface binding";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ berberman ];
+       maintainers = [ lib.maintainers.berberman ];
      }) {};
 
   "archive" = callPackage
@@ -33367,6 +33731,7 @@ self: {
        description = "A library and programs for creating hardlinked incremental archives or backups";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "archive";
        broken = true;
      }) {debian-mirror = null; help = null;};
 
@@ -33450,6 +33815,7 @@ self: {
        description = "Archive supplied URLs in WebCite & Internet Archive";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "archiver";
        broken = true;
      }) {};
 
@@ -33510,6 +33876,7 @@ self: {
        description = "Convert Arch Linux package updates in RSS to pretty markdown";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "archnews";
        broken = true;
      }) {};
 
@@ -33588,6 +33955,7 @@ self: {
        description = "An interpreter for the Argh! programming language in wxHaskell";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "argh";
      }) {};
 
   "argo" = callPackage
@@ -33619,6 +33987,7 @@ self: {
        ];
        description = "Parse and render JSON";
        license = lib.licenses.mit;
+       mainProgram = "argo";
      }) {};
 
   "argon" = callPackage
@@ -33646,6 +34015,7 @@ self: {
        description = "Measure your code's complexity";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "argon";
      }) {};
 
   "argon2" = callPackage
@@ -33698,6 +34068,7 @@ self: {
        description = "A computer assisted argumentation transcription and editing software";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ArguEdit.bin";
        broken = true;
      }) {};
 
@@ -33727,6 +34098,7 @@ self: {
        description = "Go-to-definition for Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ariadne-server";
      }) {};
 
   "arion" = callPackage
@@ -33751,6 +34123,7 @@ self: {
        description = "Watcher and runner for Hspec";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "arion";
        broken = true;
      }) {};
 
@@ -33782,7 +34155,8 @@ self: {
        ];
        description = "Run docker-compose with help from Nix/NixOS";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       mainProgram = "arion";
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "arith-encode" = callPackage
@@ -33844,6 +34218,7 @@ self: {
        ];
        description = "Natural number arithmetic";
        license = lib.licenses.mit;
+       mainProgram = "arithmetic";
      }) {};
 
   "arithmetic-circuits" = callPackage
@@ -33939,6 +34314,7 @@ self: {
        description = "Space-based real time strategy game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "armada";
        broken = true;
      }) {};
 
@@ -33975,6 +34351,7 @@ self: {
        description = "Library for reading ARPA n-gram models";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "arpa";
        broken = true;
      }) {};
 
@@ -34072,6 +34449,7 @@ self: {
        description = "A simple interpreter for arrayForth, the language used on GreenArrays chips";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "array-forth";
      }) {};
 
   "array-list" = callPackage
@@ -34256,6 +34634,7 @@ self: {
        description = "preprocessor translating arrow notation into Haskell 98";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "arrowp";
        broken = true;
      }) {};
 
@@ -34278,6 +34657,7 @@ self: {
        description = "A preprocessor and quasiquoter for translating arrow notation";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "arrowp";
        broken = true;
      }) {};
 
@@ -34343,6 +34723,7 @@ self: {
        ];
        description = "Archive execution tool";
        license = lib.licenses.bsd3;
+       mainProgram = "arx";
      }) {};
 
   "arxiv" = callPackage
@@ -34457,6 +34838,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "ASCII Art to Unicode Box Drawing converter";
        license = lib.licenses.bsd3;
+       mainProgram = "aa2u";
      }) {};
 
   "ascii-case" = callPackage
@@ -34508,6 +34890,7 @@ self: {
        description = "Flattens European non-ASCII characaters into ASCII";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ascii-flatten";
        broken = true;
      }) {};
 
@@ -34536,6 +34919,7 @@ self: {
        ];
        description = "ASCII animations for the holidays!";
        license = lib.licenses.gpl3Only;
+       mainProgram = "ascii-holidays";
      }) {};
 
   "ascii-numbers" = callPackage
@@ -34722,6 +35106,7 @@ self: {
        description = "Process Ascii Vectors for Advantest 93k";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SelectSigs";
        broken = true;
      }) {};
 
@@ -34776,6 +35161,7 @@ self: {
        ];
        description = "Pretty rendering of Ascii diagram into svg or png";
        license = lib.licenses.bsd3;
+       mainProgram = "asciidiagram";
      }) {};
 
   "asic" = callPackage
@@ -34790,6 +35176,7 @@ self: {
        description = "Action Script Instrumentation Compiler";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "asic";
      }) {};
 
   "asif" = callPackage
@@ -34833,6 +35220,7 @@ self: {
        description = "Library for creating and querying segmented feeds";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "asif";
      }) {};
 
   "asil" = callPackage
@@ -34970,6 +35358,7 @@ self: {
        ];
        description = "Dump ASN1 structure";
        license = lib.licenses.bsd3;
+       mainProgram = "asn1dump";
      }) {};
 
   "aspell-pipe" = callPackage
@@ -34996,6 +35385,7 @@ self: {
        description = "Haskell Assembler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "has";
        broken = true;
      }) {ghc-binary = null;};
 
@@ -35316,6 +35706,7 @@ self: {
        description = "an incomplete 2d space game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "astrds";
        broken = true;
      }) {};
 
@@ -35355,6 +35746,7 @@ self: {
        description = "A GTK-based abstract syntax tree viewer for custom languages and parsers";
        license = lib.licenses.bsdOriginal;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "astview";
      }) {};
 
   "astview-utils" = callPackage
@@ -35491,6 +35883,7 @@ self: {
        description = "A thread manager for async";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "thread-clean-up-test";
        broken = true;
      }) {};
 
@@ -35619,6 +36012,7 @@ self: {
        description = "Utility functions for working with aterms as generated by Minitermite";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ppaterm";
      }) {};
 
   "atl" = callPackage
@@ -35943,6 +36337,7 @@ self: {
        description = "A highly dynamic, extremely simple, very fun programming language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "atomo";
        broken = true;
      }) {};
 
@@ -36014,6 +36409,7 @@ self: {
        description = "A source-code formatter for ATS";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "atsfmt";
      }) {};
 
   "ats-pkg" = callPackage
@@ -36049,6 +36445,7 @@ self: {
        description = "A build tool for ATS";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "atspkg";
      }) {};
 
   "ats-setup" = callPackage
@@ -36149,6 +36546,7 @@ self: {
        description = "A script I use to run \"attic\" for my backups";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "attic-schedule";
        broken = true;
      }) {};
 
@@ -36198,6 +36596,7 @@ self: {
        description = "Minimal mail delivery agent (MDA) for local mail with maildir support";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "attomail";
        broken = true;
      }) {};
 
@@ -36579,6 +36978,7 @@ self: {
        description = "Embedded Turtle language compiler in Haskell, with Epic output";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "atuin";
      }) {};
 
   "audacity" = callPackage
@@ -36641,6 +37041,7 @@ self: {
        description = "A Haskell FFI wrapper for the Augeas API";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-haskell-augeas";
        broken = true;
      }) {inherit (pkgs) augeas;};
 
@@ -36661,6 +37062,7 @@ self: {
        description = "Renaming media collections in a breeze";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "augur";
        broken = true;
      }) {};
 
@@ -36735,6 +37137,7 @@ self: {
        description = "A secure package manager for Arch Linux and the AUR";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "aura";
      }) {};
 
   "authenticate" = callPackage
@@ -36877,7 +37280,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "Template Haskell to automatically pass values to functions";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {};
 
   "autodocodec" = callPackage
@@ -36978,6 +37381,7 @@ self: {
        executableHaskellDepends = [ base Cabal directory filepath ];
        description = "Automatically re-export modules";
        license = lib.licenses.mit;
+       mainProgram = "autoexporter";
      }) {};
 
   "autom" = callPackage
@@ -37104,6 +37508,7 @@ self: {
        description = "Generate dependencies for KDE 5 Nix expressions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kf5-deps";
      }) {};
 
   "autopack" = callPackage
@@ -37131,6 +37536,7 @@ self: {
        libraryHaskellDepends = [ base directory mtl process unix ];
        description = "EDSL for Procmail scripts";
        license = lib.licenses.bsd3;
+       mainProgram = "autoproc";
      }) {};
 
   "avahi" = callPackage
@@ -37145,6 +37551,7 @@ self: {
        executableHaskellDepends = [ base bytestring dbus text ];
        description = "Minimal DBus bindings for Avahi daemon (http://avahi.org)";
        license = lib.licenses.bsd3;
+       mainProgram = "avahi-browse";
      }) {};
 
   "avatar-generator" = callPackage
@@ -37159,6 +37566,7 @@ self: {
        description = "A simple random avatar icon generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "avatar-generator";
        broken = true;
      }) {};
 
@@ -37319,6 +37727,7 @@ self: {
        description = "Aviation Navigation functions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wind-correction";
      }) {};
 
   "aviation-units" = callPackage
@@ -37448,6 +37857,7 @@ self: {
        description = "Tool for decoding avro";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "avro-decode";
        broken = true;
      }) {};
 
@@ -37469,6 +37879,7 @@ self: {
        description = "Parse aviation weather reports";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "metar";
        broken = true;
      }) {};
 
@@ -37611,6 +38022,7 @@ self: {
        testHaskellDepends = [ base hedgehog neat-interpolation ];
        description = "Generate signed cookies for AWS CloudFront";
        license = lib.licenses.mit;
+       mainProgram = "aws-cloudfront-signed-cookies";
      }) {};
 
   "aws-cloudfront-signed-cookies_0_2_0_11" = callPackage
@@ -37635,6 +38047,7 @@ self: {
        description = "Generate signed cookies for AWS CloudFront";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "aws-cloudfront-signed-cookies";
      }) {};
 
   "aws-cloudfront-signer" = callPackage
@@ -37738,6 +38151,7 @@ self: {
        description = "Helper function and types for working with amazonka";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "aws-easy-demo";
      }) {};
 
   "aws-ec2" = callPackage
@@ -37903,6 +38317,7 @@ self: {
        description = "A producer & consumer client library for AWS Kinesis";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kinesis-cli";
      }) {};
 
   "aws-kinesis-reshard" = callPackage
@@ -37932,6 +38347,7 @@ self: {
        description = "Reshard AWS Kinesis streams in response to Cloud Watch metrics";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kinesis-reshard";
      }) {};
 
   "aws-lambda" = callPackage
@@ -38023,6 +38439,7 @@ self: {
        description = "Haskell on AWS Lambda Runtime API";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-lambda";
        broken = true;
      }) {};
 
@@ -38063,6 +38480,7 @@ self: {
        description = "Keep your AWS credentials file up to date with MFA-carrying credentials";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "aws-mfa-credentials";
      }) {};
 
   "aws-performance-tests" = callPackage
@@ -38089,6 +38507,7 @@ self: {
        description = "Performance Tests for the Haskell bindings for Amazon Web Services (AWS)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dynamodb-performance";
        broken = true;
      }) {};
 
@@ -38425,6 +38844,7 @@ self: {
        description = "The Axel programming language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "axel";
        broken = true;
      }) {};
 
@@ -38637,6 +39057,7 @@ self: {
        description = "A simple library for accessing Azure blob storage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "azurify";
        broken = true;
      }) {};
 
@@ -38706,6 +39127,7 @@ self: {
        description = "A tool and library for building virtual machine images";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "b9c";
        broken = true;
      }) {};
 
@@ -38737,6 +39159,7 @@ self: {
        description = "An implementation of a simple 2-player board game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "babylon";
      }) {};
 
   "backblaze-b2-hs" = callPackage
@@ -38770,6 +39193,7 @@ self: {
        description = "A client library to access Backblaze B2 cloud storage in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "backblaze-b2-hs";
      }) {};
 
   "backdropper" = callPackage
@@ -38788,6 +39212,7 @@ self: {
        description = "Rotates backdrops for X11 displays using Imagemagic";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "backdropper_consol";
      }) {};
 
   "backprop" = callPackage
@@ -38835,6 +39260,7 @@ self: {
        description = "Backstop a target directory by source directories";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "backstop";
        broken = true;
      }) {};
 
@@ -38895,6 +39321,7 @@ self: {
        executableHaskellDepends = [ base gd X11 ];
        description = "braindead utility to compose Xinerama backgrounds";
        license = "unknown";
+       mainProgram = "bacteria";
      }) {};
 
   "bag" = callPackage
@@ -38942,6 +39369,7 @@ self: {
        description = "Continuous integration system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bake-test";
        broken = true;
      }) {};
 
@@ -39009,6 +39437,7 @@ self: {
        description = "bamboo-launcher";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bamboo";
      }) {};
 
   "bamboo-plugin-highlight" = callPackage
@@ -39106,6 +39535,7 @@ self: {
        description = "A Windows Installer (MSI) generator framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsDotnetGen";
      }) {};
 
   "bamstats" = callPackage
@@ -39120,6 +39550,7 @@ self: {
        description = "A program to extract various information from BAM alignmnet files";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bam";
      }) {};
 
   "ban-instance" = callPackage
@@ -39244,7 +39675,10 @@ self: {
        ];
        description = "Create status bar menus for macOS from executables";
        license = lib.licenses.bsd3;
-       platforms = [ "aarch64-darwin" "x86_64-darwin" ];
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux"
+       ];
+       mainProgram = "barbly";
      }) {};
 
   "barchart" = callPackage
@@ -39260,6 +39694,7 @@ self: {
        description = "Creating Bar Charts in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "barchart";
        broken = true;
      }) {};
 
@@ -39308,6 +39743,7 @@ self: {
        description = "A web based environment for learning and tinkering with Haskell";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "barley";
      }) {};
 
   "barrie" = callPackage
@@ -39945,6 +40381,7 @@ self: {
        ];
        description = "A Generic Base91 Encoder & Decoder";
        license = lib.licenses.mit;
+       mainProgram = "base91";
      }) {};
 
   "basement" = callPackage
@@ -40027,6 +40464,7 @@ self: {
        description = "Baserock Definitions Schema";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "baserock";
      }) {};
 
   "basex-client" = callPackage
@@ -40143,6 +40581,7 @@ self: {
        description = "An interpreter for a small functional language";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "baskell";
        broken = true;
      }) {};
 
@@ -40174,6 +40613,7 @@ self: {
        executableHaskellDepends = [ base directory filepath Glob ];
        description = "Make Linux or MacOS do things like \"rename *.mp3 *.mp4\"";
        license = lib.licenses.publicDomain;
+       mainProgram = "batch_rename";
      }) {};
 
   "batchd" = callPackage
@@ -40373,6 +40813,7 @@ self: {
        testHaskellDepends = [ base QuickCheck ];
        description = "Compute number of possible arrangements in the battleship game";
        license = lib.licenses.bsd3;
+       mainProgram = "battleship-combinatorics";
      }) {};
 
   "battleships" = callPackage
@@ -40444,6 +40885,7 @@ self: {
        description = "HTML Coverage Reports for Rules_Haskell";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bazel-coverage-report-renderer";
        broken = true;
      }) {};
 
@@ -40459,6 +40901,7 @@ self: {
        executableHaskellDepends = [ base filepath ];
        description = "Locate Bazel runfiles location";
        license = lib.licenses.asl20;
+       mainProgram = "bazel-runfiles-exe";
      }) {};
 
   "bbdb" = callPackage
@@ -40627,10 +41070,9 @@ self: {
        ];
        description = "BDCS API Server";
        license = lib.licenses.gpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bdcs-api-server";
      }) {inherit (pkgs) libgit2-glib;};
 
   "bdd" = callPackage
@@ -40679,6 +41121,7 @@ self: {
        description = "Update CSS in the browser without reloading the page";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bdo";
        broken = true;
      }) {};
 
@@ -40944,6 +41387,7 @@ self: {
        description = "A pretty-printer for higher-order logic";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "beautifHOL";
      }) {};
 
   "bech32" = callPackage
@@ -40972,6 +41416,7 @@ self: {
        description = "Implementation of the Bech32 cryptocurrency address format (BIP 0173)";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bech32";
        broken = true;
      }) {};
 
@@ -41103,7 +41548,8 @@ self: {
        ];
        description = "Command-line benchmark tool";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "bench";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "bench-graph" = callPackage
@@ -41143,6 +41589,7 @@ self: {
        testHaskellDepends = [ base split text ];
        description = "Show, plot and compare benchmark results";
        license = lib.licenses.bsd3;
+       mainProgram = "bench-show";
      }) {};
 
   "benchmark-function" = callPackage
@@ -41168,6 +41615,7 @@ self: {
        executableHaskellDepends = [ base bytestring time ];
        description = "Micro-benchmarking with detailed statistics";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "bencode" = callPackage
@@ -41304,6 +41752,7 @@ self: {
        description = "An implementation of Python 3";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "berp";
      }) {};
 
   "bert" = callPackage
@@ -41410,6 +41859,7 @@ self: {
        description = "A horizontal version of tetris for braille users";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "betris";
        broken = true;
      }) {};
 
@@ -41484,6 +41934,7 @@ self: {
        description = "Implementation of the BGAPI serial protocol";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bglibtest";
      }) {};
 
   "bgmax" = callPackage
@@ -41536,6 +41987,7 @@ self: {
        description = "Simple terminal GUI for local hoogle";
        license = "(BSD-3-Clause OR Apache-2.0)";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bhoogle";
        broken = true;
      }) {};
 
@@ -41560,6 +42012,7 @@ self: {
        description = "A database based bibliography manager for BibTeX";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bibdb";
        broken = true;
      }) {};
 
@@ -41731,6 +42184,7 @@ self: {
        description = "A parser for the Billboard chord dataset";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "billboard-parser";
      }) {};
 
   "billeksah-forms" = callPackage
@@ -41768,6 +42222,7 @@ self: {
        description = "Leksah plugin base";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "billeksah-main";
      }) {};
 
   "billeksah-main-static" = callPackage
@@ -41790,6 +42245,7 @@ self: {
        description = "Leksah plugin base";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "billeksah-main-static";
        broken = true;
      }) {leksah-dummy = null; leksah-main = null; 
          leksah-plugin-pane = null;};
@@ -41945,6 +42401,7 @@ self: {
        ];
        description = "Generate CSV Exports of your Binance Trade History";
        license = lib.licenses.bsd3;
+       mainProgram = "binance-exports";
      }) {};
 
   "binary_0_8_9_0" = callPackage
@@ -42757,6 +43214,7 @@ self: {
        executableHaskellDepends = [ base binary bytestring split ];
        description = "Very low-level FFI bindings for Codec2";
        license = lib.licenses.gpl2Only;
+       mainProgram = "bindings-codec2-demo";
      }) {inherit (pkgs) codec2;};
 
   "bindings-common" = callPackage
@@ -42795,9 +43253,7 @@ self: {
        libraryPkgconfigDepends = [ directfb ];
        description = "Low level bindings to DirectFB";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) directfb;};
 
   "bindings-eskit" = callPackage
@@ -42935,6 +43391,7 @@ self: {
        description = "Hamlib bindings for Haskell";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hamlib-hs-demo";
        broken = true;
      }) {inherit (pkgs) hamlib;};
 
@@ -43122,9 +43579,6 @@ self: {
        librarySystemDepends = [ lxc ];
        description = "Direct Haskell bindings to LXC (Linux containers) C API";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
      }) {inherit (pkgs) lxc;};
 
   "bindings-mmap" = callPackage
@@ -43191,9 +43645,7 @@ self: {
        libraryHaskellDepends = [ base bindings-DSL ];
        description = "parport bindings";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "bindings-portaudio" = callPackage
@@ -43273,9 +43725,7 @@ self: {
        libraryPkgconfigDepends = [ sane-backends ];
        description = "FFI bindings to libsane";
        license = lib.licenses.lgpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) sane-backends;};
 
   "bindings-sc3" = callPackage
@@ -43414,6 +43864,7 @@ self: {
        description = "Embed data into object files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "binembed";
        broken = true;
      }) {};
 
@@ -43432,6 +43883,7 @@ self: {
        description = "Example project using binembed to embed data in object files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "binembed-example";
      }) {};
 
   "bini" = callPackage
@@ -43499,6 +43951,7 @@ self: {
        description = "binary files splitter and merger";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "binsm";
        broken = true;
      }) {};
 
@@ -43795,6 +44248,7 @@ self: {
        description = "Plot a colorful tree";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "birch-beer";
      }) {};
 
   "bird" = callPackage
@@ -43816,6 +44270,7 @@ self: {
        description = "A simple, sinatra-inspired web framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bird";
      }) {};
 
   "birds-of-paradise" = callPackage
@@ -43848,6 +44303,7 @@ self: {
        ];
        description = "A small tool that clears cookies (and more)";
        license = lib.licenses.gpl3Only;
+       mainProgram = "bisc";
      }) {};
 
   "biscuit-haskell" = callPackage
@@ -43920,6 +44376,7 @@ self: {
        description = "Determine relevant parts of binary data";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bisect-binary";
        broken = true;
      }) {};
 
@@ -44386,6 +44843,7 @@ self: {
        description = "A library for working with bitcoin-core regtest networks";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bitcoind-rpc-explorer";
      }) {};
 
   "bitcoind-rpc" = callPackage
@@ -44424,6 +44882,7 @@ self: {
        description = "A command line tool to access bit.ly URL shortener.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bitly";
      }) {};
 
   "bitmap" = callPackage
@@ -44645,6 +45104,7 @@ self: {
        description = "Proof-of-concept tool for writing using binary choices";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bitspeak";
        broken = true;
      }) {inherit (pkgs) gtk2; inherit (pkgs) pango;};
 
@@ -44728,6 +45188,7 @@ self: {
        executableHaskellDepends = [ base text turtle ];
        description = "Bindings for the Bittrex API";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "bitvec" = callPackage
@@ -44879,6 +45340,7 @@ self: {
        description = "Backup utility for backing up to cloud storage services (S3 only right now)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bkr";
        broken = true;
      }) {};
 
@@ -44906,6 +45368,7 @@ self: {
        description = "a stupid cron";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bla";
      }) {};
 
   "black-jewel" = callPackage
@@ -44926,6 +45389,7 @@ self: {
        testHaskellDepends = [ base QuickCheck ];
        description = "The pirate bay client";
        license = lib.licenses.gpl3Only;
+       mainProgram = "black-jewel";
      }) {};
 
   "blacktip" = callPackage
@@ -44972,6 +45436,7 @@ self: {
        ];
        description = "Shake frontend for Agda blogging";
        license = lib.licenses.agpl3Only;
+       mainProgram = "blagda";
      }) {};
 
   "blake2" = callPackage
@@ -45033,6 +45498,7 @@ self: {
        description = "The BLAKE SHA-3 candidate hashes, in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blakesum";
      }) {};
 
   "blank-canvas" = callPackage
@@ -45180,6 +45646,7 @@ self: {
        description = "Blog in LaTeX";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blatex";
      }) {};
 
   "blaze" = callPackage
@@ -45287,6 +45754,7 @@ self: {
        ];
        description = "Tool to convert HTML to BlazeHtml code";
        license = lib.licenses.bsd3;
+       mainProgram = "blaze-from-html";
      }) {};
 
   "blaze-html" = callPackage
@@ -45556,6 +46024,7 @@ self: {
        description = "Password entry tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blindpass";
        broken = true;
      }) {};
 
@@ -45576,6 +46045,7 @@ self: {
        description = "Control library for blink(1) LED from ThingM";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blink1";
      }) {};
 
   "blip" = callPackage
@@ -45595,6 +46065,7 @@ self: {
        description = "Python to bytecode compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blip";
      }) {};
 
   "bliplib" = callPackage
@@ -45703,7 +46174,7 @@ self: {
        description = "blockfrost.io basic client";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "blockfrost-client-core" = callPackage
@@ -45766,6 +46237,7 @@ self: {
        description = "Blockhash perceptual image hash algorithm";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blockhash";
        broken = true;
      }) {};
 
@@ -45800,6 +46272,7 @@ self: {
        description = "Very simple static blog software";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blogination";
      }) {};
 
   "bloodhound" = callPackage
@@ -45915,6 +46388,7 @@ self: {
        description = "BLOSUM generator";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blosum";
      }) {};
 
   "bloxorz" = callPackage
@@ -45930,6 +46404,7 @@ self: {
        description = "OpenGL Logic Game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bloxorz";
      }) {};
 
   "blubber" = callPackage
@@ -45948,6 +46423,7 @@ self: {
        description = "The blubber client; connects to the blubber server";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blubber";
      }) {};
 
   "blubber-server" = callPackage
@@ -45970,6 +46446,7 @@ self: {
        description = "The blubber server, serves blubber clients";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blubber-server";
        broken = true;
      }) {};
 
@@ -45997,6 +46474,7 @@ self: {
        ];
        description = "Configurable blue light filter";
        license = lib.licenses.bsd3;
+       mainProgram = "blucontrol";
      }) {inherit (pkgs.xorg) libX11; inherit (pkgs.xorg) libXrandr;};
 
   "bludigon" = callPackage
@@ -46024,6 +46502,7 @@ self: {
        description = "Configurable blue light filter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bludigon";
        broken = true;
      }) {inherit (pkgs.xorg) libX11; inherit (pkgs.xorg) libXrandr;};
 
@@ -46077,6 +46556,7 @@ self: {
        description = "Utilities for Bluetile";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bluetilemockwin-obsolete";
        broken = true;
      }) {};
 
@@ -46094,6 +46574,7 @@ self: {
        description = "spam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test1";
        broken = true;
      }) {};
 
@@ -46117,6 +46598,7 @@ self: {
        description = "Convert between pointfree and pointful expressions";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blunt";
      }) {};
 
   "bm" = callPackage
@@ -46142,6 +46624,7 @@ self: {
        testHaskellDepends = [ base tasty tasty-hunit vector ];
        description = "open bookmarks and queries from the command line";
        license = lib.licenses.mit;
+       mainProgram = "bm";
      }) {};
 
   "bmp" = callPackage
@@ -46178,6 +46661,7 @@ self: {
        ];
        description = "Generate CSV Exports of Your BNB Staking Rewards";
        license = lib.licenses.bsd3;
+       mainProgram = "bnb-staking-csvs";
      }) {};
 
   "bno055-haskell" = callPackage
@@ -46225,6 +46709,7 @@ self: {
        ];
        description = "Three games for inclusion in a web server";
        license = "GPL";
+       mainProgram = "board-games";
      }) {};
 
   "boardgame" = callPackage
@@ -46240,6 +46725,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Modeling boardgames";
        license = lib.licenses.mit;
+       mainProgram = "boardgame";
      }) {};
 
   "bodhi" = callPackage
@@ -46272,6 +46758,7 @@ self: {
        description = "Copy a directory tree, making zero-size sparse copies of big files";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bogocopy";
        broken = true;
      }) {};
 
@@ -46291,6 +46778,7 @@ self: {
        executableHaskellDepends = [ base hogre hois random ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bogre-banana-snake";
      }) {};
 
   "boilerplate" = callPackage
@@ -46320,6 +46808,7 @@ self: {
        description = "Generate Haskell boilerplate";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "boilerplate";
      }) {};
 
   "bolt" = callPackage
@@ -46371,6 +46860,7 @@ self: {
        description = "Analytic sampler compiler for combinatorial systems";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bb";
        broken = true;
      }) {};
 
@@ -46423,6 +46913,7 @@ self: {
        description = "Bond schema compiler and code generator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gbc";
      }) {};
 
   "bond-haskell" = callPackage
@@ -46474,6 +46965,7 @@ self: {
        description = "Bond code generator for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hbc";
      }) {};
 
   "bookhound" = callPackage
@@ -46513,6 +47005,7 @@ self: {
        description = "Anonymous records and overloaded labels";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
        broken = true;
      }) {};
 
@@ -46699,6 +47192,7 @@ self: {
        ];
        description = "A bookmarks manager with an HTML generator";
        license = lib.licenses.gpl3Only;
+       mainProgram = "boomange";
      }) {};
 
   "boombox" = callPackage
@@ -46751,6 +47245,7 @@ self: {
        description = "Boomshine clone";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "boomslang";
      }) {};
 
   "boop" = callPackage
@@ -46787,6 +47282,7 @@ self: {
        description = "Mathematically sound sound synthesis";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "perfprof";
      }) {};
 
   "boots" = callPackage
@@ -46824,6 +47320,7 @@ self: {
        description = "Factory for quickly building an application";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "demo-app";
        broken = true;
      }) {};
 
@@ -46946,6 +47443,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "An educational game";
        license = lib.licenses.bsd3;
+       mainProgram = "boring-game-exe";
      }) {};
 
   "boring-window-switcher" = callPackage
@@ -46961,6 +47459,7 @@ self: {
        description = "A boring window switcher";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "boring-window-switcher";
        broken = true;
      }) {};
 
@@ -47000,6 +47499,7 @@ self: {
        description = "Build tool for Lambdabot";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "BotPP";
        broken = true;
      }) {};
 
@@ -47026,6 +47526,7 @@ self: {
        description = "Encoding and decoding for the Bottom spec";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bottom";
        broken = true;
      }) {};
 
@@ -47198,6 +47699,7 @@ self: {
        description = "audio-visual pseudo-physical simulation of colliding circles";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bowntz";
        broken = true;
      }) {};
 
@@ -47247,6 +47749,7 @@ self: {
        executableHaskellDepends = [ base optparse-generic ];
        description = "Box websockets";
        license = lib.licenses.bsd3;
+       mainProgram = "box-socket";
      }) {};
 
   "box-tuples" = callPackage
@@ -47323,6 +47826,7 @@ self: {
        description = "Types and functions to work with braids and Khovanov homology";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "KappaView";
        broken = true;
      }) {};
 
@@ -47338,6 +47842,7 @@ self: {
        description = "primitive imperative language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "brain-bleep";
        broken = true;
      }) {};
 
@@ -47353,6 +47858,7 @@ self: {
        executableHaskellDepends = [ array base mtl unix ];
        description = "Brainfuck interpreter";
        license = "GPL";
+       mainProgram = "bf";
      }) {};
 
   "brainfuck-monad" = callPackage
@@ -47378,6 +47884,7 @@ self: {
        executableHaskellDepends = [ array base ];
        description = "A simple BF interpreter";
        license = lib.licenses.bsd3;
+       mainProgram = "bfh";
      }) {};
 
   "brainheck" = callPackage
@@ -47397,6 +47904,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion text ];
        description = "Brainh*ck interpreter in haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "brainheck";
      }) {};
 
   "break" = callPackage
@@ -47410,7 +47918,7 @@ self: {
        libraryHaskellDepends = [ base mtl transformers ];
        description = "Break from a loop";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "breakout" = callPackage
@@ -47425,6 +47933,7 @@ self: {
        description = "A simple Breakout game implementation";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "breakout";
      }) {};
 
   "breve" = callPackage
@@ -47448,6 +47957,7 @@ self: {
        ];
        description = "a url shortener";
        license = lib.licenses.gpl3Only;
+       mainProgram = "breve";
      }) {};
 
   "brians-brain" = callPackage
@@ -47462,6 +47972,7 @@ self: {
        description = "A Haskell implementation of the Brian's Brain cellular automaton";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "brians-brain";
        broken = true;
      }) {};
 
@@ -47716,6 +48227,7 @@ self: {
        description = "Simple part of speech tagger";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "brillig";
        broken = true;
      }) {};
 
@@ -47752,6 +48264,7 @@ self: {
        ];
        description = "Haskell source code formatter";
        license = lib.licenses.agpl3Only;
+       mainProgram = "brittany";
      }) {};
 
   "broadcast-chan" = callPackage
@@ -47865,6 +48378,7 @@ self: {
        description = "Finds broken links in text files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "brok";
        broken = true;
      }) {};
 
@@ -48198,9 +48712,7 @@ self: {
        libraryHaskellDepends = [ base bytestring time unix ];
        description = "Bindings to the btrfs API";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {};
@@ -48242,6 +48754,7 @@ self: {
        description = "Automates most of your plain text accounting data entry in ledger format";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "buchhaltung";
      }) {};
 
   "buffer" = callPackage
@@ -48330,6 +48843,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Read from stdin and write to stdout in large blocks";
        license = lib.licenses.bsd3;
+       mainProgram = "buffer-pipe";
      }) {};
 
   "buffet" = callPackage
@@ -48360,6 +48874,7 @@ self: {
        description = "Assembles many Dockerfiles in one";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "buffet";
        broken = true;
      }) {};
 
@@ -48633,6 +49148,7 @@ self: {
        description = "Tools for working with buildbox benchmark result files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "buildbox-results";
      }) {};
 
   "builder" = callPackage
@@ -48687,6 +49203,7 @@ self: {
        description = "A library and an executable that provide an easy API for a Haskell IDE";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "buildwrapper";
      }) {};
 
   "bullet" = callPackage
@@ -48740,6 +49257,7 @@ self: {
        description = "Bulletproofs are short zero-knowledge proofs without a trusted setup";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bulletproofs-example";
      }) {};
 
   "bulmex" = callPackage
@@ -48785,6 +49303,7 @@ self: {
        description = "Automatically bump package versions, also transitively";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bumper";
        broken = true;
      }) {};
 
@@ -48802,6 +49321,7 @@ self: {
        description = "CLI tool to beautify JSON string";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bunz";
        broken = true;
      }) {};
 
@@ -48821,6 +49341,7 @@ self: {
        description = "List OP_RETURN cryptocurrency transaction outputs";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "burnt-explorer";
      }) {};
 
   "burrito" = callPackage
@@ -48957,9 +49478,8 @@ self: {
        testPkgconfigDepends = [ gio-unix ];
        description = "Draw sequence diagrams of D-Bus traffic";
        license = lib.licenses.lgpl21Plus;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "bustle";
      }) {gio-unix = null; inherit (pkgs) libpcap; 
          system-glib = pkgs.glib;};
 
@@ -49029,6 +49549,7 @@ self: {
        description = "butterfly tilings";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "butterflies-flat";
      }) {};
 
   "buttplug-hs-core" = callPackage
@@ -49059,6 +49580,7 @@ self: {
        ];
        description = "Client library for buttplug.io";
        license = lib.licenses.bsd3;
+       mainProgram = "buttplug-example";
      }) {};
 
   "bv" = callPackage
@@ -49361,6 +49883,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Patch byte-representable data in a bytestream";
        license = lib.licenses.mit;
+       mainProgram = "bytepatch";
      }) {};
 
   "bytes" = callPackage
@@ -50159,6 +50682,7 @@ self: {
        description = "Simpe mosquito MQTT binding able to work with the Amazons IoT";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "c-mosquitto";
        broken = true;
      }) {inherit (pkgs) mosquitto;};
 
@@ -50208,6 +50732,7 @@ self: {
        executableHaskellDepends = [ base c0parser ];
        description = "Simple C0 Syntax Check";
        license = "GPL";
+       mainProgram = "c0check";
      }) {};
 
   "c0parser" = callPackage
@@ -50268,6 +50793,7 @@ self: {
        description = "Translate C code into ATS";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "c2ats";
        broken = true;
      }) {};
 
@@ -50295,6 +50821,7 @@ self: {
        ];
        description = "C->Haskell FFI tool that gives some cross-language type safety";
        license = lib.licenses.gpl2Only;
+       mainProgram = "c2hs";
      }) {};
 
   "c2hs-extra" = callPackage
@@ -50332,6 +50859,7 @@ self: {
        testHaskellDepends = [ base here hspec logging monad-logger text ];
        description = "Convert C API header files to .hsc and .hsc.helper.c files";
        license = lib.licenses.bsd3;
+       mainProgram = "c2hsc";
      }) {};
 
   "ca" = callPackage
@@ -50398,6 +50926,7 @@ self: {
        description = "A maintenance command of Haskell cabal packages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cab";
        broken = true;
      }) {};
 
@@ -50444,6 +50973,7 @@ self: {
        description = "Check how up-to-date your .cabal dependencies are.";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-audit";
        broken = true;
      }) {};
 
@@ -50483,6 +51013,7 @@ self: {
        description = "A command line program for managing the dependency versions in a cabal file";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-bounds";
      }) {};
 
   "cabal-build-programs" = callPackage
@@ -50553,6 +51084,7 @@ self: {
        description = "CI Assistant for Haskell projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-cache";
      }) {};
 
   "cabal-cargs" = callPackage
@@ -50576,6 +51108,7 @@ self: {
        description = "A command line program for extracting compiler arguments from a cabal file";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-cargs";
      }) {};
 
   "cabal-clean" = callPackage
@@ -50594,6 +51127,7 @@ self: {
        ];
        description = "Remove outdated cabal build artefacts from `dist-newstyle`";
        license = lib.licenses.bsd3;
+       mainProgram = "cabal-clean";
      }) {};
 
   "cabal-constraints" = callPackage
@@ -50608,6 +51142,7 @@ self: {
        description = "Repeatable builds for cabalized Haskell projects";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-constraints";
        broken = true;
      }) {};
 
@@ -50631,6 +51166,7 @@ self: {
        description = "query tools for the local cabal database";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-db";
        broken = true;
      }) {};
 
@@ -50657,6 +51193,7 @@ self: {
        description = "Create a Debianization for a Cabal package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-debian";
        broken = true;
      }) {};
 
@@ -50674,6 +51211,7 @@ self: {
        description = "Compose a list of a project's transitive dependencies with their licenses";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-dependency-licenses";
        broken = true;
      }) {};
 
@@ -50726,6 +51264,7 @@ self: {
        description = "show dist dir of 'cabal copy/install'";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-dir";
        broken = true;
      }) {};
 
@@ -50762,6 +51301,7 @@ self: {
        description = "Cabal utility";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-edit";
        broken = true;
      }) {};
 
@@ -50786,6 +51326,7 @@ self: {
        ];
        description = "Cabal file access";
        license = lib.licenses.bsd3;
+       mainProgram = "cblfile";
      }) {};
 
   "cabal-file-th" = callPackage
@@ -50827,6 +51368,7 @@ self: {
        ];
        description = "Generate a FlatPak manifest from a Cabal package description";
        license = lib.licenses.bsd3;
+       mainProgram = "cabal-flatpak";
      }) {};
 
   "cabal-fmt" = callPackage
@@ -50854,7 +51396,8 @@ self: {
        doHaddock = false;
        description = "Format .cabal files";
        license = "GPL-3.0-or-later AND BSD-3-Clause";
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "cabal-fmt";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "cabal-ghc-dynflags" = callPackage
@@ -50885,6 +51428,7 @@ self: {
        description = "Set up ghci with options taken from a .cabal file";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-ghci";
        broken = true;
      }) {};
 
@@ -50904,6 +51448,7 @@ self: {
        description = "Generate graphs of install-time Cabal dependencies";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-graphdeps";
        broken = true;
      }) {};
 
@@ -50960,6 +51505,7 @@ self: {
        description = "Read information from cabal files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-info";
        broken = true;
      }) {};
 
@@ -50993,7 +51539,8 @@ self: {
        '';
        description = "The command-line interface for Cabal and Hackage";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "cabal";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "cabal-install-bundle" = callPackage
@@ -51014,6 +51561,7 @@ self: {
        description = "The (bundled) command-line interface for Cabal and Hackage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal";
        broken = true;
      }) {inherit (pkgs) zlib;};
 
@@ -51035,6 +51583,7 @@ self: {
        description = "Temporary version of cabal-install for ghc-7.2";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal";
        broken = true;
      }) {};
 
@@ -51056,6 +51605,7 @@ self: {
        description = "Temporary version of cabal-install for ghc-7.4";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal";
        broken = true;
      }) {};
 
@@ -51129,6 +51679,7 @@ self: {
        ];
        description = "Cabal support for creating Mac OSX application bundles";
        license = lib.licenses.bsd3;
+       mainProgram = "macosx-app";
      }) {};
 
   "cabal-meta" = callPackage
@@ -51151,6 +51702,7 @@ self: {
        description = "build multiple packages at once";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-meta";
        broken = true;
      }) {};
 
@@ -51170,6 +51722,7 @@ self: {
        description = "A monitor for cabal builds";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-mon";
        broken = true;
      }) {};
 
@@ -51189,6 +51742,7 @@ self: {
        description = "Avoid Cabal dependency hell by constraining to known good versions. (deprecated)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-nirvana";
        broken = true;
      }) {};
 
@@ -51201,7 +51755,7 @@ self: {
        libraryHaskellDepends = [ base Cabal lens process ];
        description = "Make Cabal aware of pkg-config package versions";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "cabal-plan" = callPackage
@@ -51231,6 +51785,7 @@ self: {
        ];
        description = "Library and utility for processing cabal's plan.json file";
        license = lib.licenses.gpl2Plus;
+       mainProgram = "cabal-plan";
      }) {};
 
   "cabal-progdeps" = callPackage
@@ -51245,6 +51800,7 @@ self: {
        description = "Show dependencies of program being built in current directory";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-progdeps";
        broken = true;
      }) {};
 
@@ -51284,6 +51840,7 @@ self: {
        ];
        description = "RPM packaging tool for Haskell Cabal-based packages";
        license = lib.licenses.gpl3Only;
+       mainProgram = "cabal-rpm";
      }) {};
 
   "cabal-scripts" = callPackage
@@ -51311,6 +51868,7 @@ self: {
        description = "The user interface for building and installing Cabal packages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-setup";
        broken = true;
      }) {};
 
@@ -51329,6 +51887,7 @@ self: {
        ];
        description = "Sign and verify Cabal packages";
        license = lib.licenses.bsd3;
+       mainProgram = "cabal-sign";
      }) {};
 
   "cabal-sort" = callPackage
@@ -51389,6 +51948,7 @@ self: {
        description = "Automated test tool for cabal projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-test";
      }) {};
 
   "cabal-test-bin" = callPackage
@@ -51406,6 +51966,7 @@ self: {
        testHaskellDepends = [ base hspec process regex-posix ];
        description = "A program for finding temporary build file during cabal-test";
        license = lib.licenses.bsd3;
+       mainProgram = "cabal-test-bin";
      }) {};
 
   "cabal-test-compat" = callPackage
@@ -51462,6 +52023,7 @@ self: {
        executableHaskellDepends = [ base directory filepath mtl process ];
        description = "Uninstall cabal packages";
        license = lib.licenses.bsd3;
+       mainProgram = "cabal-uninstall";
      }) {};
 
   "cabal-upload" = callPackage
@@ -51476,6 +52038,7 @@ self: {
        description = "Command-line tool for uploading packages to Hackage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal-upload";
        broken = true;
      }) {};
 
@@ -51497,6 +52060,7 @@ self: {
        description = "Create Arch Linux packages from Cabal packages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal2arch";
      }) {};
 
   "cabal2doap" = callPackage
@@ -51513,6 +52077,7 @@ self: {
        description = "Cabal to Description-of-a-Project (DOAP)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal2doap";
        broken = true;
      }) {};
 
@@ -51549,6 +52114,7 @@ self: {
        description = "A tool to generate .ghci file from .cabal";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal2ghci";
        broken = true;
      }) {};
 
@@ -51577,6 +52143,7 @@ self: {
        description = "Turn a .cabal file into a .json file";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal2json";
        broken = true;
      }) {};
 
@@ -51616,7 +52183,7 @@ self: {
        '';
        description = "Convert Cabal files into Nix build instructions";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "cabal2spec" = callPackage
@@ -51638,7 +52205,8 @@ self: {
        testHaskellDepends = [ base Cabal filepath tasty tasty-golden ];
        description = "Convert Cabal files into rpm spec files";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "cabal2spec";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "cabal2spec_2_6_3" = callPackage
@@ -51661,7 +52229,8 @@ self: {
        description = "Convert Cabal files into rpm spec files";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "cabal2spec";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "cabalQuery" = callPackage
@@ -51681,6 +52250,7 @@ self: {
        description = "A simple tool to query cabal files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabalQuery";
        broken = true;
      }) {};
 
@@ -51697,6 +52267,7 @@ self: {
        testHaskellDepends = [ base directory doctest filepath process ];
        description = "alias for cabal install from given git repo";
        license = lib.licenses.mit;
+       mainProgram = "cabalg";
      }) {};
 
   "cabalgraph" = callPackage
@@ -51717,6 +52288,7 @@ self: {
        description = "Generate pretty graphs of module trees from cabal files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabalgraph";
        broken = true;
      }) {};
 
@@ -51737,6 +52309,7 @@ self: {
        description = "Provides access to the cabal file data for shell scripts";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabalish";
        broken = true;
      }) {};
 
@@ -51753,6 +52326,7 @@ self: {
        description = "Create mandriva rpm from cabal package";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabalmdvspec";
      }) {};
 
   "cabalrpmdeps" = callPackage
@@ -51782,6 +52356,7 @@ self: {
        description = "Verify installed package version against user-specified constraints";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabalvchk";
        broken = true;
      }) {};
 
@@ -51802,6 +52377,7 @@ self: {
        description = "Cabal binary sandboxes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabin";
        broken = true;
      }) {};
 
@@ -51885,6 +52461,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A simple library to cache a single IO action with timeout";
        license = lib.licenses.asl20;
+       mainProgram = "test-cachedIO";
      }) {};
 
   "cached-json-file" = callPackage
@@ -51995,7 +52572,8 @@ self: {
        ];
        description = "Command line client for Nix binary cache hosting https://cachix.org";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ domenkozar ];
+       mainProgram = "cachix";
+       maintainers = [ lib.maintainers.domenkozar ];
      }) {inherit (pkgs) nix;};
 
   "cachix-api" = callPackage
@@ -52027,7 +52605,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Servant HTTP API specification for https://cachix.org";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ domenkozar ];
+       maintainers = [ lib.maintainers.domenkozar ];
      }) {};
 
   "cacophony" = callPackage
@@ -52149,6 +52727,7 @@ self: {
        executableHaskellDepends = [ base cairo glib gtk ];
        description = "A template for building new GUI applications using GTK and Cairo";
        license = lib.licenses.bsd3;
+       mainProgram = "cairo-appbase";
      }) {};
 
   "cairo-canvas" = callPackage
@@ -52207,6 +52786,7 @@ self: {
        description = "A build-system library and driver";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cake";
      }) {};
 
   "cake3" = callPackage
@@ -52255,6 +52835,7 @@ self: {
        description = "run turtle like LOGO with lojban";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cakyrespa";
      }) {};
 
   "cal-layout" = callPackage
@@ -52270,6 +52851,7 @@ self: {
        description = "Calendar Layout Algorithm";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bookings-test";
        broken = true;
      }) {};
 
@@ -52373,6 +52955,7 @@ self: {
        description = "A small compiler for arithmetic expressions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "calc";
      }) {};
 
   "calculator" = callPackage
@@ -52395,6 +52978,7 @@ self: {
        description = "A calculator repl, with variables, functions & Mathematica like dynamic plots";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "calculator";
      }) {};
 
   "caldims" = callPackage
@@ -52416,6 +53000,7 @@ self: {
        description = "Calculation tool and library supporting units";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "caldims";
      }) {};
 
   "caledon" = callPackage
@@ -52434,6 +53019,7 @@ self: {
        description = "a logic programming language based on the calculus of constructions";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "caledon";
        broken = true;
      }) {};
 
@@ -52450,6 +53036,7 @@ self: {
        ];
        description = "List years with the same calendars";
        license = lib.licenses.bsd3;
+       mainProgram = "calendar-recycling";
      }) {};
 
   "calenderweek" = callPackage
@@ -52466,6 +53053,7 @@ self: {
        description = "Commandline tool to get week of the year";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kw";
        broken = true;
      }) {};
 
@@ -52535,6 +53123,7 @@ self: {
        description = "Call Haskell functions from other languages via serialization and dynamic libraries";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "call-haskell-from-anything.so";
        broken = true;
      }) {};
 
@@ -52584,6 +53173,7 @@ self: {
        testHaskellDepends = [ base containers hspec HUnit QuickCheck ];
        description = "HIE-based Haskell call graph and source code visualizer";
        license = lib.licenses.bsd3;
+       mainProgram = "calligraphy";
      }) {};
 
   "camfort" = callPackage
@@ -52621,11 +53211,9 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "CamFort - Cambridge Fortran infrastructure";
        license = lib.licenses.asl20;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "camfort";
        broken = true;
      }) {inherit (pkgs) flint;};
 
@@ -52641,6 +53229,7 @@ self: {
        executableHaskellDepends = [ base bytestring Imlib terminfo ];
        description = "write image files onto 256(or 24bit) color terminals";
        license = lib.licenses.bsd3;
+       mainProgram = "camh";
      }) {};
 
   "campfire" = callPackage
@@ -52706,7 +53295,8 @@ self: {
        ];
        description = "Candid integration";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ nomeata ];
+       mainProgram = "hcandid";
+       maintainers = [ lib.maintainers.nomeata ];
      }) {};
 
   "canon" = callPackage
@@ -52877,6 +53467,7 @@ self: {
        description = "Application for analysis of java source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cantor";
        broken = true;
      }) {};
 
@@ -52919,6 +53510,7 @@ self: {
        description = "CAO Compiler";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cao";
      }) {};
 
   "cap" = callPackage
@@ -52934,6 +53526,7 @@ self: {
        description = "Interprets and debug the cap language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cap";
      }) {};
 
   "capability" = callPackage
@@ -53024,6 +53617,7 @@ self: {
        description = "Cap'n Proto for Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "capnpc-haskell";
      }) {};
 
   "capped-list" = callPackage
@@ -53053,6 +53647,7 @@ self: {
        description = "A simple wrapper over cabal-install to operate in project-private mode";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "capri";
        broken = true;
      }) {};
 
@@ -53164,6 +53759,7 @@ self: {
        description = "Simple web-server for organizing car-pooling for an event";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "car-pool";
      }) {};
 
   "caramia" = callPackage
@@ -53224,6 +53820,7 @@ self: {
        description = "Drop emails from threads being watched into special CC folder";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "carboncopy";
      }) {};
 
   "cardano-coin-selection" = callPackage
@@ -53278,6 +53875,7 @@ self: {
        description = "Library utilities for constructing and signing Cardano transactions";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cardano-tx";
        broken = true;
      }) {cardano-binary = null; cardano-crypto = null; 
          cardano-crypto-wrapper = null; cardano-ledger = null; 
@@ -53341,6 +53939,7 @@ self: {
        description = "Carte: A commandline pastebin server";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "carte";
        broken = true;
      }) {};
 
@@ -53371,6 +53970,7 @@ self: {
        description = "Specify Cabal files in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cartel-init";
      }) {};
 
   "cas-hashable" = callPackage
@@ -53634,6 +54234,7 @@ self: {
        testHaskellDepends = [ base HUnit ];
        description = "Convert between different cases";
        license = lib.licenses.bsd3;
+       mainProgram = "case-converter";
      }) {};
 
   "case-insensitive" = callPackage
@@ -53672,6 +54273,7 @@ self: {
        ];
        description = "A simplified, faster way to do case-insensitive matching";
        license = lib.licenses.bsd3;
+       mainProgram = "readme-example";
      }) {};
 
   "cased" = callPackage
@@ -53683,7 +54285,7 @@ self: {
        libraryHaskellDepends = [ base text ];
        description = "Track string casing in its type";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ jb55 ];
+       maintainers = [ lib.maintainers.jb55 ];
      }) {};
 
   "caseof" = callPackage
@@ -54211,6 +54813,7 @@ self: {
        description = "A tool to manage shared cabal-install sandboxes";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "castle";
        broken = true;
      }) {};
 
@@ -54227,6 +54830,7 @@ self: {
        description = "Equation Manipulator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "casui";
      }) {};
 
   "catalyst" = callPackage
@@ -54376,6 +54980,7 @@ self: {
        description = "Simple tool to display text files with line numbers and paging";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "catnplus";
        broken = true;
      }) {};
 
@@ -54461,7 +55066,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Cayenne Low Power Payload";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "cayley-client" = callPackage
@@ -54539,6 +55144,7 @@ self: {
        description = "Tool to maintain a database of CABAL packages and their dependencies";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cblrepo";
        broken = true;
      }) {};
 
@@ -54561,6 +55167,7 @@ self: {
        ];
        description = "A tool for manipulating CBOR";
        license = lib.licenses.bsd3;
+       mainProgram = "cbor-tool";
      }) {};
 
   "cborg" = callPackage
@@ -54717,6 +55324,7 @@ self: {
        benchmarkHaskellDepends = [ base bytestring criterion ];
        description = "Extract dependencies from C code";
        license = lib.licenses.bsd3;
+       mainProgram = "cdeps";
      }) {};
 
   "cedict" = callPackage
@@ -54735,6 +55343,7 @@ self: {
        description = "Convenient Chinese phrase & character lookup";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zi4pu3";
        broken = true;
      }) {};
 
@@ -54843,6 +55452,7 @@ self: {
        description = "A tool to build a novel";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "celtchar";
      }) {};
 
   "cerberus" = callPackage
@@ -54871,6 +55481,7 @@ self: {
        description = "Protect and control API access with cerberus";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cerberus";
      }) {};
 
   "cereal" = callPackage
@@ -55168,6 +55779,7 @@ self: {
        description = "cfipu processor for toy brainfuck-like language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cfipu";
      }) {};
 
   "cflp" = callPackage
@@ -55227,6 +55839,7 @@ self: {
        description = "cfopu processor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cfopu";
      }) {};
 
   "cg" = callPackage
@@ -55248,6 +55861,7 @@ self: {
        description = "Parser for categorial grammars";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "CG";
        broken = true;
      }) {};
 
@@ -55339,6 +55953,7 @@ self: {
        ];
        description = "Command line tool";
        license = lib.licenses.gpl2Only;
+       mainProgram = "cgrep";
      }) {};
 
   "cgroup-rts-threads" = callPackage
@@ -55396,6 +56011,7 @@ self: {
        description = "Mining Client for Kadena Chainweb";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chainweb-mining-client";
      }) {};
 
   "chakra" = callPackage
@@ -55436,6 +56052,7 @@ self: {
        ];
        description = "A REST Web Api server template for building (micro)services";
        license = lib.licenses.mit;
+       mainProgram = "chakra-exe";
      }) {};
 
   "chalk" = callPackage
@@ -55466,6 +56083,7 @@ self: {
        description = "Combinators for building and processing 2D images";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chalkboard-server-1_9_0_16";
        broken = true;
      }) {};
 
@@ -55530,6 +56148,7 @@ self: {
        executableHaskellDepends = [ directory ];
        description = "Parse VCS changelogs into ChangeLogs";
        license = lib.licenses.bsd3;
+       mainProgram = "change-monger";
      }) {};
 
   "changelogged" = callPackage
@@ -55559,6 +56178,7 @@ self: {
        ];
        description = "Changelog manager for Git projects";
        license = lib.licenses.bsd3;
+       mainProgram = "changelogged";
      }) {};
 
   "chapelure" = callPackage
@@ -55650,6 +56270,7 @@ self: {
        description = "Rapid prototyping websites with Snap and Heist";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "charade";
      }) {};
 
   "charset" = callPackage
@@ -55676,10 +56297,7 @@ self: {
        libraryHaskellDepends = [ base bytestring ];
        description = "Character set detection using Mozilla's Universal Character Set Detector";
        license = "LGPL";
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
      }) {};
 
   "charsetdetect-ae" = callPackage
@@ -55711,6 +56329,7 @@ self: {
        description = "Command-line utility to draw charts from input data easily";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chart";
      }) {};
 
   "chart-histogram" = callPackage
@@ -55770,6 +56389,7 @@ self: {
        description = "See readme.md";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chart-svg-various";
      }) {};
 
   "chart-unit" = callPackage
@@ -55823,6 +56443,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "charter-exe";
        broken = true;
      }) {};
 
@@ -55899,7 +56520,7 @@ self: {
        ];
        description = "A library of simple NLP algorithms";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "chatty" = callPackage
@@ -55972,6 +56593,7 @@ self: {
        description = "The ChatWork API in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sample-exe";
        broken = true;
      }) {};
 
@@ -55994,6 +56616,7 @@ self: {
        executableHaskellDepends = [ base blaze-html bytestring text ];
        description = "Experimental markdown processor";
        license = lib.licenses.bsd3;
+       mainProgram = "cheapskate";
      }) {};
 
   "cheapskate-highlight" = callPackage
@@ -56051,6 +56674,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cheapskate-terminal";
      }) {};
 
   "check-cfg-ambiguity" = callPackage
@@ -56153,6 +56777,7 @@ self: {
        description = "Generate checklists relevant to a given patch";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "checkmate";
        broken = true;
      }) {};
 
@@ -56336,6 +56961,7 @@ self: {
        description = "Parse and scrape recipe blogs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chez-grater";
        broken = true;
      }) {};
 
@@ -56433,6 +57059,7 @@ self: {
        description = "Helper for the Major System";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chitauri";
      }) {};
 
   "choice" = callPackage
@@ -56474,6 +57101,7 @@ self: {
        description = "Command-line program to choose random element from a stream";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "choose";
      }) {};
 
   "chorale" = callPackage
@@ -56643,6 +57271,7 @@ self: {
        description = "AST + surface language around chr";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chr-term";
      }) {};
 
   "chr-parse" = callPackage
@@ -56707,6 +57336,7 @@ self: {
        description = "neovim package manager";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chromatin";
      }) {};
 
   "chronograph" = callPackage
@@ -56786,6 +57416,7 @@ self: {
        benchmarkHaskellDepends = [ base ];
        description = "Benchmarking tool with focus on comparing results";
        license = lib.licenses.bsd3;
+       mainProgram = "chronos";
      }) {};
 
   "chs-cabal" = callPackage
@@ -56895,6 +57526,7 @@ self: {
        description = "Human-readable storage of text/binary objects";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chunky-test";
        broken = true;
      }) {};
 
@@ -57234,6 +57866,7 @@ self: {
        description = "Implementation of CipherSaber2 RC4 cryptography";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cs2";
      }) {};
 
   "circ" = callPackage
@@ -57305,6 +57938,7 @@ self: {
        ];
        description = "An implementation of the \"circuit breaker\" pattern to disable repeated calls to a failing system";
        license = lib.licenses.bsd3;
+       mainProgram = "circuit-breaker-exe";
      }) {};
 
   "circular" = callPackage
@@ -57322,7 +57956,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion vector ];
        description = "Circular fixed-sized mutable vectors";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "circus" = callPackage
@@ -57377,6 +58011,7 @@ self: {
        ];
        description = "DEPRECATED in favor of webex-teams-api";
        license = lib.licenses.mit;
+       mainProgram = "cisco-spark-api-exe";
      }) {};
 
   "citation-resolve" = callPackage
@@ -57495,6 +58130,7 @@ self: {
        description = "A Pandoc filter for processing bibliographic references with citeproc-hs";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "citeproc-hs";
      }) {};
 
   "cityhash" = callPackage
@@ -57535,6 +58171,7 @@ self: {
        description = "A new Haskeleton package";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cj-token";
        broken = true;
      }) {};
 
@@ -57617,6 +58254,7 @@ self: {
        description = "Simple CLI RPN calculator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clac";
      }) {};
 
   "clafer" = callPackage
@@ -57652,6 +58290,7 @@ self: {
        description = "Compiles Clafer models to other formats: Alloy, JavaScript, JSON, HTML, Dot";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clafer";
      }) {};
 
   "claferIG" = callPackage
@@ -57685,6 +58324,7 @@ self: {
        description = "claferIG is an interactive tool that generates instances of Clafer models";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "claferIG";
      }) {};
 
   "claferwiki" = callPackage
@@ -57759,6 +58399,7 @@ self: {
        description = "Command-line spaced-repetition software";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clanki";
        broken = true;
      }) {};
 
@@ -57877,6 +58518,7 @@ self: {
        description = "Clash: a functional hardware description language - As a library";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "v16-upgrade-primitives";
      }) {};
 
   "clash-lib-hedgehog" = callPackage
@@ -58078,6 +58720,7 @@ self: {
        description = "Automated Clash to Verilator bridge";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clashilator";
      }) {};
 
   "classify" = callPackage
@@ -58121,6 +58764,7 @@ self: {
        description = "Classify sounds produced by Xenopus laevis";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "classify-frog";
      }) {};
 
   "classy-influxdb-simple" = callPackage
@@ -58160,6 +58804,7 @@ self: {
        description = "Typeclass based support for Miso, the Tasty Web Framework for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "classy-miso-demo";
      }) {};
 
   "classy-parallel" = callPackage
@@ -58341,6 +58986,7 @@ self: {
        description = "a command-line interface for adminstrating some aspects of clckwrks";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clckwrks-cli";
      }) {};
 
   "clckwrks-dot-com" = callPackage
@@ -58363,6 +59009,7 @@ self: {
        description = "clckwrks.com";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clckwrks-dot-com-server";
      }) {};
 
   "clckwrks-plugin-bugs" = callPackage
@@ -58591,6 +59238,7 @@ self: {
        ];
        description = "Keep your home dir clean by finding old conf files";
        license = lib.licenses.bsd3;
+       mainProgram = "clean-home";
      }) {};
 
   "clean-unions" = callPackage
@@ -58663,6 +59311,7 @@ self: {
        description = "Colorized LESS";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cless";
      }) {};
 
   "cleveland" = callPackage
@@ -58714,6 +59363,7 @@ self: {
        description = "A CSS preprocessor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clevercss";
        broken = true;
      }) {};
 
@@ -58744,6 +59394,7 @@ self: {
        executableHaskellDepends = [ base basement foundation ];
        description = "CLI";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "cli-arguments" = callPackage
@@ -58869,6 +59520,7 @@ self: {
        description = "Toy game (tetris on billiard board). Hipmunk in action.";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "click-clack";
      }) {};
 
   "clickhouse-haskell" = callPackage
@@ -58931,6 +59583,7 @@ self: {
        ];
        description = "Securely store session data in a client-side cookie";
        license = lib.licenses.mit;
+       mainProgram = "clientsession-generate";
      }) {};
 
   "clif" = callPackage
@@ -58983,6 +59636,7 @@ self: {
        description = "A Clifford algebra library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pendulum";
      }) {};
 
   "clifm" = callPackage
@@ -59003,6 +59657,7 @@ self: {
        description = "Command Line Interface File Manager";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clifm";
        broken = true;
      }) {};
 
@@ -59026,6 +59681,7 @@ self: {
        ];
        description = "Building blocks for a GHCi-like REPL with colon-commands";
        license = lib.licenses.bsd3;
+       mainProgram = "climb-demo";
      }) {};
 
   "clingo" = callPackage
@@ -59099,6 +59755,7 @@ self: {
        description = "A parser/generator for Kindle-format clipping files (`My Clippings.txt`),";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clippings2tsv";
      }) {};
 
   "clisparkline" = callPackage
@@ -59147,6 +59804,7 @@ self: {
        description = "Post tweets from stdin";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tweet";
        broken = true;
      }) {};
 
@@ -59165,6 +59823,7 @@ self: {
        ];
        description = "Clone and benchmark Haskell cabal projects";
        license = lib.licenses.bsd3;
+       mainProgram = "cloben";
      }) {};
 
   "clock" = callPackage
@@ -59247,6 +59906,7 @@ self: {
        description = "Clone all github repositories from a given user";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clone-all";
        broken = true;
      }) {};
 
@@ -59414,6 +60074,7 @@ self: {
        description = "A cloud in the file system";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cloudyfs";
      }) {};
 
   "clr-bindings" = callPackage
@@ -59519,6 +60180,7 @@ self: {
        ];
        description = "A GHC linker wrapper tool to workaround a GHC >8.2 bug";
        license = lib.licenses.bsd3;
+       mainProgram = "clr-win-linker";
      }) {};
 
   "cltw" = callPackage
@@ -59532,6 +60194,7 @@ self: {
        executableHaskellDepends = [ base curl mtl random tagsoup ];
        description = "Command line Twitter utility";
        license = lib.licenses.bsd3;
+       mainProgram = "cltw";
      }) {};
 
   "clua" = callPackage
@@ -59550,6 +60213,7 @@ self: {
        description = "C to Lua data wrapper generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "clua";
      }) {};
 
   "clumpiness" = callPackage
@@ -59802,6 +60466,7 @@ self: {
        description = "Data model, parser, serialiser and transformations for Content MathML 3";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mathtest";
      }) {};
 
   "cmd-item" = callPackage
@@ -59857,6 +60522,7 @@ self: {
        ];
        description = "Helper to enter cmdargs command lines using a web browser";
        license = lib.licenses.bsd3;
+       mainProgram = "cmdargs-browser";
      }) {};
 
   "cmdlib" = callPackage
@@ -59997,6 +60663,7 @@ self: {
        description = "Write consistent git commit messages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cmt";
        broken = true;
      }) {};
 
@@ -60012,6 +60679,7 @@ self: {
        executableHaskellDepends = [ array base containers ];
        description = "Unification in a Commutative Monoid";
        license = "GPL";
+       mainProgram = "cmu";
      }) {};
 
   "cmv" = callPackage
@@ -60063,6 +60731,7 @@ self: {
        description = "Compiler/Translator for CnC Specification Files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cnc";
      }) {};
 
   "cndict" = callPackage
@@ -60178,6 +60847,7 @@ self: {
        executableHaskellDepends = [ base co-log-core polysemy ];
        description = "Composable Contravariant Comonadic Logging Library";
        license = lib.licenses.mpl20;
+       mainProgram = "play-colog-poly";
      }) {};
 
   "co-log-polysemy-formatting" = callPackage
@@ -60202,6 +60872,7 @@ self: {
        description = "A Polysemy logging effect for high quality (unstructured) logs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -60425,6 +61096,7 @@ self: {
        description = "Cross-platform structure serialisation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "codec-libevent-generate";
        broken = true;
      }) {};
 
@@ -60515,6 +61187,7 @@ self: {
        description = "Command line interface to interact with Codeforces";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cf";
        broken = true;
      }) {};
 
@@ -60535,6 +61208,7 @@ self: {
        description = "Tool that automatically runs arbitrary commands when files change on disk";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "codemonitor";
      }) {};
 
   "codepad" = callPackage
@@ -60607,6 +61281,7 @@ self: {
        description = "A ctags file generator for cabal project dependencies";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "codex";
        broken = true;
      }) {};
 
@@ -60725,6 +61400,7 @@ self: {
        description = "Generate clang-format config based on some existing code base";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "coformat-exe";
      }) {};
 
   "cofunctor" = callPackage
@@ -60763,6 +61439,7 @@ self: {
        description = "Utilities for Cognimeta products (such as perdure). API may change often.";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cognimeta-utils";
      }) {};
 
   "coin" = callPackage
@@ -60787,6 +61464,7 @@ self: {
        description = "Simple account manager";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "coin";
        broken = true;
      }) {};
 
@@ -60827,6 +61505,7 @@ self: {
        description = "Connector library for the coinbase exchange";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sandbox";
      }) {};
 
   "coinbase-pro" = callPackage
@@ -60939,6 +61618,7 @@ self: {
        description = "Colada implements incremental word class class induction using online LDA";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "colada";
      }) {};
 
   "colchis" = callPackage
@@ -60990,6 +61670,7 @@ self: {
        description = "Generate animated 3d objects in COLLADA";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Examples";
        broken = true;
      }) {};
 
@@ -61025,6 +61706,7 @@ self: {
        description = "Collapse the duplication output into clones and return their frequencies";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "collapse-duplication";
      }) {};
 
   "collapse-util" = callPackage
@@ -61039,6 +61721,7 @@ self: {
        description = "utility for collapsing adjacent writes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "collapse";
        broken = true;
      }) {};
 
@@ -61200,6 +61883,7 @@ self: {
        description = "Count colors in images";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "color-counter";
      }) {};
 
   "colorful-monoids" = callPackage
@@ -61226,6 +61910,7 @@ self: {
        executableHaskellDepends = [ ansi-terminal base haskell-lexer ];
        description = "Highligt Haskell source";
        license = lib.licenses.bsd3;
+       mainProgram = "hscolor";
      }) {};
 
   "colorless" = callPackage
@@ -61454,6 +62139,7 @@ self: {
        description = "Commonmark processing in pure haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "comark-hs";
      }) {};
 
   "comark-html" = callPackage
@@ -61597,6 +62283,7 @@ self: {
        description = "SKI Combinator interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lazyi";
        broken = true;
      }) {};
 
@@ -61816,6 +62503,7 @@ self: {
        description = "pattern matching against string based commands";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example1";
        broken = true;
      }) {};
 
@@ -61838,6 +62526,7 @@ self: {
        testHaskellDepends = [ base commandert text unordered-containers ];
        description = "A command line argument/option parser library";
        license = lib.licenses.mit;
+       mainProgram = "task-manager";
      }) {};
 
   "commandert" = callPackage
@@ -61916,6 +62605,7 @@ self: {
        ];
        description = "Command-line commonmark converter and highlighter";
        license = lib.licenses.bsd3;
+       mainProgram = "commonmark";
      }) {};
 
   "commonmark-extensions" = callPackage
@@ -63387,6 +64077,7 @@ self: {
        description = "Part-of-speech tagger for Croatian";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "concraft-hr";
      }) {};
 
   "concraft-pl" = callPackage
@@ -63416,6 +64107,7 @@ self: {
        description = "Morphological tagger for Polish";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "concraft-pl";
      }) {};
 
   "concrete-haskell" = callPackage
@@ -63497,6 +64189,7 @@ self: {
        description = "A parser driven by a standard RELAX NG schema with concrete syntax extensions";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parse-concrete";
        broken = true;
      }) {};
 
@@ -63574,6 +64267,7 @@ self: {
        ];
        description = "Benchmarks to compare concurrency APIs";
        license = lib.licenses.mit;
+       mainProgram = "makecharts";
      }) {};
 
   "concurrent-barrier" = callPackage
@@ -63641,6 +64335,7 @@ self: {
        testHaskellDepends = [ async base dns hspec ];
        description = "Concurrent DNS cache";
        license = lib.licenses.bsd3;
+       mainProgram = "main";
      }) {};
 
   "concurrent-extra" = callPackage
@@ -63867,6 +64562,7 @@ self: {
        description = "Information retrieval library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "condor";
      }) {};
 
   "condorcet" = callPackage
@@ -64216,6 +64912,7 @@ self: {
        description = "A file-finding conduit that allows user control over traversals";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "find-hs";
        broken = true;
      }) {};
 
@@ -64351,6 +65048,7 @@ self: {
        description = "Conduits for tokenizing streams";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "conduit-tokenize-attoparsec-example";
        broken = true;
      }) {};
 
@@ -64493,6 +65191,7 @@ self: {
        ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "confcrypt";
      }) {};
 
   "conferer" = callPackage
@@ -64777,6 +65476,7 @@ self: {
        ];
        description = "A simple config file swapping tool";
        license = lib.licenses.mit;
+       mainProgram = "confetti";
      }) {};
 
   "conffmt" = callPackage
@@ -64795,6 +65495,7 @@ self: {
        description = "A .conf file formatter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "conffmt";
      }) {};
 
   "confide" = callPackage
@@ -64885,7 +65586,7 @@ self: {
        testHaskellDepends = [ base config-value text ];
        description = "Schema definitions for the config-value package";
        license = lib.licenses.isc;
-       maintainers = with lib.maintainers; [ kiwi ];
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "config-select" = callPackage
@@ -64902,6 +65603,7 @@ self: {
        description = "A small program for swapping out dot files";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "config-select";
      }) {};
 
   "config-value" = callPackage
@@ -64916,7 +65618,7 @@ self: {
        testHaskellDepends = [ base text ];
        description = "Simple, layout-based value language similar to YAML or JSON";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ kiwi ];
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "config-value-getopt" = callPackage
@@ -65007,6 +65709,7 @@ self: {
        ];
        description = "Tools for specifying and parsing configurations";
        license = lib.licenses.mit;
+       mainProgram = "example";
      }) {};
 
   "configurator" = callPackage
@@ -65111,6 +65814,7 @@ self: {
        description = "A command line tool for resolving conflicts of file synchronizers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "confsolve";
        broken = true;
      }) {};
 
@@ -65173,6 +65877,7 @@ self: {
        description = "A BitTorrent client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "conjure";
        broken = true;
      }) {};
 
@@ -65208,6 +65913,7 @@ self: {
        description = "A logger for a concurrent program";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -65281,6 +65987,7 @@ self: {
        description = "Orders, Galois connections, and lattices";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doctest";
        broken = true;
      }) {};
 
@@ -65635,6 +66342,7 @@ self: {
        executableHaskellDepends = [ aeson base constraints ];
        description = "Utility package for constraints";
        license = lib.licenses.bsd3;
+       mainProgram = "readme";
      }) {};
 
   "constrictor" = callPackage
@@ -65839,6 +66547,7 @@ self: {
        description = "Extensive benchmark suite for containers package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "benchmark";
        broken = true;
      }) {};
 
@@ -65950,6 +66659,7 @@ self: {
        ];
        description = "Generate art from context-free grammars";
        license = lib.licenses.bsd3;
+       mainProgram = "examples";
      }) {};
 
   "context-free-grammar" = callPackage
@@ -66636,6 +67346,7 @@ self: {
        description = "Convert the annotation of a gene to another in a delimited file using a variety of different databases";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "convert-annotation";
      }) {};
 
   "convertible" = callPackage
@@ -66976,6 +67687,7 @@ self: {
        description = "Yet another shell monad";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
        broken = true;
      }) {};
 
@@ -67009,6 +67721,7 @@ self: {
        executableToolDepends = [ alex happy ];
        description = "compile your own mini functional language with Core";
        license = lib.licenses.mit;
+       mainProgram = "core-compiler-exe";
      }) {};
 
   "core-data" = callPackage
@@ -67042,6 +67755,7 @@ self: {
        description = "A subset of Haskell using in UCC for teaching purpose";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "core-haskell";
        broken = true;
      }) {};
 
@@ -67203,6 +67917,7 @@ self: {
        description = "A bliki written using yesod. Uses pandoc to process files stored in git.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "corebot-bliki";
        broken = true;
      }) {};
 
@@ -67221,6 +67936,7 @@ self: {
        testHaskellDepends = [ base process ];
        description = "Write your main like it can call itself back";
        license = lib.licenses.bsd3;
+       mainProgram = "corecursive-main-exe";
      }) {};
 
   "corenlp-parser" = callPackage
@@ -67318,6 +68034,7 @@ self: {
        description = "A CouchDB view server for Haskell";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "couch-hs";
        broken = true;
      }) {};
 
@@ -67584,7 +68301,7 @@ self: {
        testHaskellDepends = [ base hmatrix tasty tasty-hunit ];
        description = "Well-conditioned estimation of large-dimensional covariance matrices";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "covariance_0_2_0_0" = callPackage
@@ -67600,7 +68317,7 @@ self: {
        description = "Well-conditioned estimation of large-dimensional covariance matrices";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "coverage" = callPackage
@@ -67698,6 +68415,7 @@ self: {
        description = "Build tool for C";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cpkg";
      }) {};
 
   "cplex-hs" = callPackage
@@ -67763,6 +68481,7 @@ self: {
        executableHaskellDepends = [ base directory polyparse time ];
        description = "A liberalised re-implementation of cpp, the C pre-processor";
        license = "LGPL";
+       mainProgram = "cpphs";
      }) {};
 
   "cprng-aes" = callPackage
@@ -67882,6 +68601,7 @@ self: {
        description = "Modify the cpu frequency on OpenBSD systems";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cpuperf";
        broken = true;
      }) {};
 
@@ -68015,6 +68735,7 @@ self: {
        description = "Example for cqrs package";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cqrs-example";
      }) {};
 
   "cqrs-memory" = callPackage
@@ -68143,6 +68864,7 @@ self: {
        description = "Code review tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cr";
        broken = true;
      }) {};
 
@@ -68173,6 +68895,7 @@ self: {
        description = "Crack various integer, floating-point data formats";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "crackNum";
      }) {};
 
   "crackNum" = callPackage
@@ -68190,6 +68913,7 @@ self: {
        ];
        description = "Crack various integer and floating-point data formats";
        license = lib.licenses.bsd3;
+       mainProgram = "crackNum";
      }) {};
 
   "craft" = callPackage
@@ -68322,6 +69046,7 @@ self: {
        description = "HTTP Racing Library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "craze-example";
      }) {};
 
   "crc" = callPackage
@@ -68466,6 +69191,7 @@ self: {
        description = "Library to access secure credential storage providers";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "credential-store-exe";
        broken = true;
      }) {};
 
@@ -68513,6 +69239,7 @@ self: {
        description = "Secure Credentials Administration";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "credentials";
      }) {};
 
   "crf-chain1" = callPackage
@@ -68657,6 +69384,7 @@ self: {
        ];
        description = "Robust, reliable performance measurement and analysis";
        license = lib.licenses.bsd3;
+       mainProgram = "criterion-report";
      }) {};
 
   "criterion-cmp" = callPackage
@@ -68676,6 +69404,7 @@ self: {
        description = "A simple tool for comparing in Criterion benchmark results";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "criterion-cmp";
        broken = true;
      }) {};
 
@@ -68699,6 +69428,7 @@ self: {
        description = "A simple tool for visualising differences in Criterion benchmark results";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "criterion-compare";
        broken = true;
      }) {};
 
@@ -68763,6 +69493,7 @@ self: {
        description = "Convert criterion output to HTML reports";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "criterion-to-html";
        broken = true;
      }) {};
 
@@ -68844,6 +69575,7 @@ self: {
        description = "An offline renderer supporting ray tracing and photon mapping";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "crocodile";
        broken = true;
      }) {};
 
@@ -68955,6 +69687,7 @@ self: {
        description = "A runghc replacement with transparent caching";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "crunghc";
        broken = true;
      }) {};
 
@@ -69126,6 +69859,7 @@ self: {
        testHaskellDepends = [ base HUnit QuickCheck ];
        description = "An Enigma machine simulator with display";
        license = lib.licenses.bsd3;
+       mainProgram = "enigma";
      }) {};
 
   "crypto-keys-ssh" = callPackage
@@ -69162,6 +69896,7 @@ self: {
        description = "Multihash library on top of cryptonite crypto library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mh";
        broken = true;
      }) {};
 
@@ -69887,6 +70622,7 @@ self: {
        description = "Analytical CSG (Constructive Solid Geometry) library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "csg-raycaster";
        broken = true;
      }) {};
 
@@ -70258,6 +70994,7 @@ self: {
        ];
        description = "A small program that will read csv files and create qif files";
        license = lib.licenses.bsd3;
+       mainProgram = "csv-to-qif";
      }) {};
 
   "ctemplate" = callPackage
@@ -70361,6 +71098,7 @@ self: {
        executableToolDepends = [ alex happy ];
        description = "Implementation of Univalence in Cubical Sets";
        license = lib.licenses.mit;
+       mainProgram = "cubical";
      }) {};
 
   "cubicbezier" = callPackage
@@ -70424,6 +71162,7 @@ self: {
        description = "3D Yampa/GLUT Puzzle Game";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cuboid";
        broken = true;
      }) {};
 
@@ -70476,6 +71215,7 @@ self: {
        description = "Pure and impure Cuckoo Filter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "benchmarks";
        broken = true;
      }) {};
 
@@ -70498,6 +71238,7 @@ self: {
        description = "FFI binding to the CUDA interface for programming NVIDIA GPUs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nvidia-device-query";
      }) {};
 
   "cudd" = callPackage
@@ -70626,6 +71367,7 @@ self: {
        description = "A framework for declaratively writing curl based API tests";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "curl-runnings";
        broken = true;
      }) {};
 
@@ -70783,6 +71525,7 @@ self: {
        description = "Compile the functional logic language Curry to several intermediate formats";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "curry-frontend";
        broken = true;
      }) {};
 
@@ -70804,6 +71547,7 @@ self: {
        description = "A package for simple, fast radiocarbon calibration";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "currycarbon";
        broken = true;
      }) {};
 
@@ -70888,6 +71632,7 @@ self: {
        description = "Terminal tool for viewing tabular data";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cursedcsv";
      }) {};
 
   "cursor" = callPackage
@@ -71100,10 +71845,9 @@ self: {
        testToolDepends = [ c2hs ];
        description = "Cuts out uninteresting parts of videos by detecting silences";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cut-the-crap";
        broken = true;
      }) {pocketsphinx = null; sphinxbase = null;};
 
@@ -71122,6 +71866,7 @@ self: {
        ];
        description = "Cut files according to a position list";
        license = lib.licenses.bsd3;
+       mainProgram = "cutter";
      }) {};
 
   "cv-combinators" = callPackage
@@ -71142,6 +71887,7 @@ self: {
        description = "Functional Combinators for Computer Vision";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-cv-combinators";
      }) {};
 
   "cve" = callPackage
@@ -71182,6 +71928,7 @@ self: {
        ];
        description = "multi-dimensional arrays";
        license = lib.licenses.bsd3;
+       mainProgram = "cybus-exe";
      }) {};
 
   "cyclotomic" = callPackage
@@ -71300,7 +72047,10 @@ self: {
        executableHaskellDepends = [ base c-storable-deriving vect Win32 ];
        description = "A raw binding for the directX 11";
        license = lib.licenses.mit;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {D3DCompiler = null; d3d11 = null; d3dx11 = null; 
          d3dxof = null; dxgi = null; dxguid = null;};
 
@@ -71416,6 +72166,7 @@ self: {
        description = "Basic Slack bot framework";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "danibot";
        broken = true;
      }) {};
 
@@ -71448,6 +72199,7 @@ self: {
        description = "Dao is meta programming language with its own built-in interpreted language, designed with artificial intelligence applications in mind";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dao";
        broken = true;
      }) {};
 
@@ -71468,6 +72220,7 @@ self: {
        description = "Prints a series of dates";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dapi";
      }) {};
 
   "darcs" = callPackage
@@ -71517,6 +72270,7 @@ self: {
        '';
        description = "a distributed, interactive, smart revision control system";
        license = lib.licenses.gpl2Plus;
+       mainProgram = "darcs";
      }) {};
 
   "darcs-benchmark" = callPackage
@@ -71540,6 +72294,7 @@ self: {
        description = "Comparative benchmark suite for darcs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs-benchmark";
      }) {};
 
   "darcs-beta" = callPackage
@@ -71572,6 +72327,7 @@ self: {
        description = "a distributed, interactive, smart revision control system";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs";
      }) {inherit (pkgs) curl;};
 
   "darcs-buildpackage" = callPackage
@@ -71614,6 +72370,7 @@ self: {
        description = "David's Advanced Version Control System";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs";
        broken = true;
      }) {inherit (pkgs) curl; inherit (pkgs) ncurses; 
          inherit (pkgs) zlib;};
@@ -71636,6 +72393,7 @@ self: {
        description = "Import/export git fast-import streams to/from darcs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs-fastconvert";
      }) {};
 
   "darcs-graph" = callPackage
@@ -71655,6 +72413,7 @@ self: {
        description = "Generate graphs of darcs repository activity";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs-graph";
        broken = true;
      }) {};
 
@@ -71674,6 +72433,7 @@ self: {
        description = "Darcs repository monitor (sends email)";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs-monitor";
        broken = true;
      }) {};
 
@@ -71706,6 +72466,7 @@ self: {
        description = "Outputs dependencies of darcs patches in dot format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "darcs2dot";
        broken = true;
      }) {};
 
@@ -71786,6 +72547,7 @@ self: {
        description = "Utility and parser for DarkPlaces demo files";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "demoinfo";
      }) {};
 
   "darkplaces-rcon" = callPackage
@@ -71834,6 +72596,7 @@ self: {
        description = "Darplaces rcon utility";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "drcon";
      }) {};
 
   "darkplaces-text" = callPackage
@@ -71874,6 +72637,7 @@ self: {
        description = "Convert package Haddock to Dash docsets (IDE docs)";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dash-haskell";
      }) {};
 
   "data-accessor" = callPackage
@@ -72553,6 +73317,7 @@ self: {
        description = "Embed files and other binary blobs inside executables without Template Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "embedtool";
        broken = true;
      }) {};
 
@@ -72639,6 +73404,7 @@ self: {
        testHaskellDepends = [ base containers data-default hspec ];
        description = "Generate data-files Cabal file field from existing files";
        license = lib.licenses.bsd3;
+       mainProgram = "data-files-gen";
      }) {};
 
   "data-filter" = callPackage
@@ -72902,6 +73668,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Json Token datatype";
        license = lib.licenses.bsd3;
+       mainProgram = "data-json-token-exe";
      }) {};
 
   "data-kiln" = callPackage
@@ -72997,7 +73764,7 @@ self: {
        libraryHaskellDepends = [ base mtl template-haskell ];
        description = "Simple lenses, minimum dependencies";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "data-lens-template" = callPackage
@@ -73082,6 +73849,7 @@ self: {
        ];
        description = "A Haskell implementation of MessagePack";
        license = lib.licenses.bsd3;
+       mainProgram = "msgpack-parser";
      }) {};
 
   "data-msgpack-types" = callPackage
@@ -73228,6 +73996,7 @@ self: {
        description = "Read PDF form fields";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdfreader";
        broken = true;
      }) {};
 
@@ -73509,7 +74278,7 @@ self: {
        ];
        description = "ARM SVD and CubeMX XML parser and pretty printer for STM32 family";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "data-store" = callPackage
@@ -73579,6 +74348,7 @@ self: {
        description = "Program that infers the fastest data structure available for your program";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dsinf";
      }) {};
 
   "data-sword" = callPackage
@@ -73876,6 +74646,7 @@ self: {
        description = "Datadog tracing client and mock agent";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "datadog-agent";
      }) {};
 
   "dataenc" = callPackage
@@ -73922,6 +74693,7 @@ self: {
        description = "Fixing data-flow problems";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "firstfollow-example";
      }) {};
 
   "dataflow" = callPackage
@@ -73946,6 +74718,7 @@ self: {
        description = "Generate Graphviz documents from a Haskell representation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dataflow";
      }) {};
 
   "dataflower" = callPackage
@@ -73991,6 +74764,7 @@ self: {
        description = "An implementation of datalog in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "datalog-repl";
        broken = true;
      }) {};
 
@@ -74010,6 +74784,7 @@ self: {
        description = "Tool to help pack files into the minimum number of CDs/DVDs/etc";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "datapacker";
        broken = true;
      }) {};
 
@@ -74180,6 +74955,7 @@ self: {
        description = "Generates DDL suggestions based on a CSV file";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dawdle";
        broken = true;
      }) {};
 
@@ -74268,6 +75044,7 @@ self: {
        description = "Decompiler Bytecode Java";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dbjava";
      }) {};
 
   "dbm" = callPackage
@@ -74287,6 +75064,7 @@ self: {
        description = "A *simple* database migration tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dbm";
        broken = true;
      }) {};
 
@@ -74317,6 +75095,7 @@ self: {
        description = "An implementation of relational database \"migrations\"";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "moo";
        broken = true;
      }) {};
 
@@ -74340,6 +75119,7 @@ self: {
        description = "The dbmigrations tool built for MySQL databases";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "moo-mysql";
        broken = true;
      }) {};
 
@@ -74360,6 +75140,7 @@ self: {
        description = "The dbmigrations tool built for PostgreSQL databases";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "moo-postgresql";
        broken = true;
      }) {};
 
@@ -74376,6 +75157,7 @@ self: {
        description = "The dbmigrations tool built for SQLite databases";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "moo-sqlite";
        broken = true;
      }) {};
 
@@ -74483,6 +75265,7 @@ self: {
        ];
        description = "Expose a dbus server to control hslogger";
        license = lib.licenses.bsd3;
+       mainProgram = "dbus-hslogger-client";
      }) {};
 
   "dbus-qq" = callPackage
@@ -74536,6 +75319,7 @@ self: {
        ];
        description = "Generate bindings for DBus calls by using DBus introspection and dbus-th";
        license = lib.licenses.bsd3;
+       mainProgram = "dbus-introspect-hs";
      }) {};
 
   "dclabel" = callPackage
@@ -74593,6 +75377,7 @@ self: {
        description = "DCPU-16 Emulator & Assembler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dcpu16-exe";
        broken = true;
      }) {};
 
@@ -74879,6 +75664,7 @@ self: {
        description = "Disciplined Disciple Compiler test driver and buildbot";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ddc-war";
      }) {};
 
   "ddci-core" = callPackage
@@ -74898,6 +75684,7 @@ self: {
        description = "Disciple Core language interactive interpreter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ddci-core";
      }) {};
 
   "dde" = callPackage
@@ -74950,6 +75737,7 @@ self: {
        description = "detect dead code in haskell projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dead-code-detection";
        broken = true;
      }) {};
 
@@ -75052,6 +75840,7 @@ self: {
        executableHaskellDepends = [ base filepath transformers ];
        description = "Debian package build sequence tools";
        license = lib.licenses.bsd3;
+       mainProgram = "odebuild";
      }) {};
 
   "debug" = callPackage
@@ -75081,6 +75870,7 @@ self: {
        description = "Simple trace-based debugger";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "debug-pp";
      }) {};
 
   "debug-diff" = callPackage
@@ -75132,6 +75922,7 @@ self: {
        description = "secure remote debugging";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "debug-me";
        broken = true;
      }) {};
 
@@ -75150,6 +75941,7 @@ self: {
        description = "A preprocessor for the debug package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "debug-pp";
        broken = true;
      }) {debug-hoed = null;};
 
@@ -75189,6 +75981,7 @@ self: {
        description = "More useful trace functions for investigating bugs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -75349,6 +76142,7 @@ self: {
        ];
        description = "Decode a UTF-8 byte stream on standard input";
        license = lib.licenses.mit;
+       mainProgram = "decode-utf8";
      }) {};
 
   "decoder-conduit" = callPackage
@@ -75385,6 +76179,7 @@ self: {
        description = "A type-checker for the λΠ-modulo calculus";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dedukti";
      }) {};
 
   "deep-map" = callPackage
@@ -75462,6 +76257,7 @@ self: {
        ];
        description = "Call DeepL to translate you files";
        license = lib.licenses.bsd3;
+       mainProgram = "deepl";
      }) {};
 
   "deeplearning-hs" = callPackage
@@ -75490,6 +76286,7 @@ self: {
        description = "Deep Learning in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "deeplearning_demonstration";
      }) {};
 
   "deepseq_1_4_7_0" = callPackage
@@ -75817,6 +76614,7 @@ self: {
        description = "Tests for deka, decimal floating point arithmetic";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "deka-dectest";
      }) {};
 
   "delaunay" = callPackage
@@ -75940,6 +76738,7 @@ self: {
        description = "Online entropy-based model of lexical category acquisition";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "delta-h";
      }) {};
 
   "delude" = callPackage
@@ -75982,6 +76781,7 @@ self: {
        description = "Functions supporting bulk file and directory name normalization";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "denominate";
        broken = true;
      }) {};
 
@@ -76358,6 +77158,7 @@ self: {
        description = "A simple configuration management tool for Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "depends";
      }) {};
 
   "dephd" = callPackage
@@ -76520,6 +77321,7 @@ self: {
        description = "A program and library to derive instances for data types";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "derive";
        broken = true;
      }) {};
 
@@ -76598,6 +77400,7 @@ self: {
        description = "derive Semigroup/Monoid/IsList";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-derive-monoid";
        broken = true;
      }) {};
 
@@ -76791,6 +77594,7 @@ self: {
        testHaskellDepends = [ base HUnit ];
        description = "Parse and render JSON simply";
        license = lib.licenses.mit;
+       mainProgram = "derulo";
      }) {};
 
   "describe" = callPackage
@@ -76860,6 +77664,7 @@ self: {
        description = "Library, interpreter, and CLI for Descript programming language";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "descript-cli";
      }) {};
 
   "descriptive" = callPackage
@@ -76899,6 +77704,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "a simple build tool for OCaml projects";
        license = lib.licenses.bsd3;
+       mainProgram = "desert";
      }) {};
 
   "despair" = callPackage
@@ -76987,6 +77793,7 @@ self: {
        description = "Markov chain text generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "detrospector";
        broken = true;
      }) {};
 
@@ -77002,6 +77809,7 @@ self: {
        description = "Get rid of unicode (utf-8) symbols in Haskell sources";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "deunicode";
        broken = true;
      }) {};
 
@@ -77022,6 +77830,7 @@ self: {
        description = "A small tool to make it easier to update program managed by Angel";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "devil";
        broken = true;
      }) {};
 
@@ -77134,6 +77943,7 @@ self: {
        description = "A generic data integrity layer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dfinity-radix-tree-example";
      }) {inherit (pkgs) leveldb;};
 
   "dfrac" = callPackage
@@ -77165,6 +77975,7 @@ self: {
        description = "Build Debian From Scratch CD/DVD images";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dfsbuild";
        broken = true;
      }) {};
 
@@ -77245,7 +78056,8 @@ self: {
        description = "A configuration language guaranteed to terminate";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall_1_38_1" = callPackage
@@ -77303,7 +78115,8 @@ self: {
        description = "A configuration language guaranteed to terminate";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall" = callPackage
@@ -77360,7 +78173,8 @@ self: {
        doCheck = false;
        description = "A configuration language guaranteed to terminate";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall_1_41_1" = callPackage
@@ -77443,7 +78257,8 @@ self: {
        description = "A configuration language guaranteed to terminate";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-bash" = callPackage
@@ -77467,7 +78282,8 @@ self: {
        ];
        description = "Compile Dhall to Bash";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-to-bash";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-bash_1_0_40" = callPackage
@@ -77490,7 +78306,8 @@ self: {
        description = "Compile Dhall to Bash";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-to-bash";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-check" = callPackage
@@ -77509,6 +78326,7 @@ self: {
        description = "Check all dhall files in a project";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dhall-check";
        broken = true;
      }) {};
 
@@ -77572,7 +78390,8 @@ self: {
        ];
        description = "Generate HTML docs from a dhall package";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-docs";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-fly" = callPackage
@@ -77606,6 +78425,7 @@ self: {
        description = "Translate concourse config from Dhall to YAML";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dhall-fly";
        broken = true;
      }) {};
 
@@ -77638,7 +78458,7 @@ self: {
        ];
        description = "Convert between Dhall and JSON or YAML";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-json_1_7_10" = callPackage
@@ -77669,7 +78489,7 @@ self: {
        description = "Convert between Dhall and JSON or YAML";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-lex" = callPackage
@@ -77720,7 +78540,8 @@ self: {
        ];
        description = "Language Server Protocol (LSP) server for Dhall";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-lsp-server";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-nix" = callPackage
@@ -77744,7 +78565,8 @@ self: {
        ];
        description = "Dhall to Nix compiler";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-to-nix";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-nix_1_1_24" = callPackage
@@ -77767,7 +78589,8 @@ self: {
        description = "Dhall to Nix compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-to-nix";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-nixpkgs" = callPackage
@@ -77790,7 +78613,8 @@ self: {
        ];
        description = "Convert Dhall projects to Nix packages";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-to-nixpkgs";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-openapi" = callPackage
@@ -77815,7 +78639,8 @@ self: {
        ];
        description = "Convert an OpenAPI specification to a Dhall package";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "openapi-to-dhall";
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhall-recursive-adt" = callPackage
@@ -77854,7 +78679,8 @@ self: {
        description = "Template text using Dhall";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "dhall-to-text";
+       maintainers = [ lib.maintainers.Gabriel439 ];
        broken = true;
      }) {};
 
@@ -77876,6 +78702,7 @@ self: {
        ];
        description = "Render dhall text with shell commands as function arguments";
        license = lib.licenses.mit;
+       mainProgram = "dhall-text-shell";
      }) {};
 
   "dhall-to-cabal" = callPackage
@@ -77958,7 +78785,7 @@ self: {
        ];
        description = "Convert between Dhall and YAML";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dhcp-lease-parser" = callPackage
@@ -78012,6 +78839,7 @@ self: {
        description = "Dhall/YAML configurable concurrent integration test executor";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dhrun";
        broken = true;
      }) {};
 
@@ -78176,7 +79004,7 @@ self: {
        doHaddock = false;
        description = "Embedded domain-specific language for declarative vector graphics";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "diagrams-boolean" = callPackage
@@ -78217,6 +79045,7 @@ self: {
        ];
        description = "Braille diagrams with plain text";
        license = lib.licenses.bsd3;
+       mainProgram = "brldia";
      }) {};
 
   "diagrams-builder" = callPackage
@@ -78403,6 +79232,7 @@ self: {
        description = "Preprocessor for embedding diagrams in Haddock documentation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "diagrams-haddock";
      }) {};
 
   "diagrams-hsqml" = callPackage
@@ -78522,6 +79352,7 @@ self: {
        description = "A Pandoc filter to express diagrams inline using the Haskell EDSL _Diagrams_";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "diagrams-pandoc";
      }) {};
 
   "diagrams-pdf" = callPackage
@@ -78781,6 +79612,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "I/O in Haskell Report 1.2";
        license = lib.licenses.bsd3;
+       mainProgram = "examples";
      }) {};
 
   "dib" = callPackage
@@ -78805,6 +79637,7 @@ self: {
        description = "A simple, forward build system";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dib";
        broken = true;
      }) {};
 
@@ -78821,6 +79654,7 @@ self: {
        libraryHaskellDepends = [ base parsec random-fu transformers ];
        description = "Simplistic D&D style dice-rolling system";
        license = lib.licenses.publicDomain;
+       mainProgram = "dice";
      }) {};
 
   "dice-entropy-conduit" = callPackage
@@ -78854,6 +79688,7 @@ self: {
        description = "Convert a Diceware wordlist into a printer-ready LaTeX file";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dice2tex";
        broken = true;
      }) {};
 
@@ -78899,6 +79734,7 @@ self: {
        description = "Tools to handle StarDict dictionaries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bench";
        broken = true;
      }) {};
 
@@ -78929,6 +79765,7 @@ self: {
        description = "Parsec parsers for the DICT format produced by dictfmt -t";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dictparser";
        broken = true;
      }) {};
 
@@ -79036,6 +79873,7 @@ self: {
        description = "Diff two .cabal files syntactically";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "diffcabal";
        broken = true;
      }) {};
 
@@ -79102,6 +79940,7 @@ self: {
        description = "Finds out whether an entity comes from different distributions (statuses)";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "differential";
      }) {};
 
   "diffmap" = callPackage
@@ -79470,6 +80309,7 @@ self: {
        ];
        description = "ASCII based Diagram drawing in Haskell (Idea based on ditaa)";
        license = lib.licenses.gpl2Only;
+       mainProgram = "dihaa";
      }) {};
 
   "dijkstra-simple" = callPackage
@@ -79588,6 +80428,7 @@ self: {
        description = "Dingo Example";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dingo-example";
      }) {};
 
   "dingo-widgets" = callPackage
@@ -79655,6 +80496,7 @@ self: {
        ];
        description = "Gemini client";
        license = lib.licenses.gpl3Only;
+       mainProgram = "diohsc";
      }) {};
 
   "diophantine" = callPackage
@@ -79709,6 +80551,7 @@ self: {
        description = "Play Diplomacy over HTTP";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "diplomacy-server";
      }) {};
 
   "dir-traverse" = callPackage
@@ -79901,6 +80744,7 @@ self: {
        description = "Recursively build, navigate, and operate on a tree of directory contents";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
      }) {};
 
   "directory-layout" = callPackage
@@ -79965,6 +80809,7 @@ self: {
        description = "Deletes a directory and retains its contents in the parent directory";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "direm";
        broken = true;
      }) {};
 
@@ -79998,7 +80843,7 @@ self: {
        testHaskellDepends = [ base hspec log-domain mwc-random vector ];
        description = "Multivariate Dirichlet distribution";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "dirstream" = callPackage
@@ -80016,7 +80861,7 @@ self: {
        ];
        description = "Easily stream directory contents in constant memory";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "dirtree" = callPackage
@@ -80088,6 +80933,7 @@ self: {
        description = "Functional programming language for teaching discrete math";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "disco";
      }) {};
 
   "discogs-haskell" = callPackage
@@ -80164,6 +81010,7 @@ self: {
        executableHaskellDepends = [ base text unliftio ];
        description = "Write bots for Discord in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "ping-pong";
      }) {};
 
   "discord-haskell-voice" = callPackage
@@ -80241,6 +81088,7 @@ self: {
        description = "Discord verification bot";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "discord-register-exe";
      }) {};
 
   "discord-rest" = callPackage
@@ -80565,6 +81413,7 @@ self: {
        description = "Generate/Upload cabal package to Hackage";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dist-upload";
        broken = true;
      }) {};
 
@@ -80613,6 +81462,7 @@ self: {
        description = "Serializable closures for distributed programming";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-client-server";
        broken = true;
      }) {};
 
@@ -80946,6 +81796,7 @@ self: {
        description = "Peer-to-peer node discovery for Cloud Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jollycloud";
      }) {};
 
   "distributed-process-platform" = callPackage
@@ -81224,7 +82075,7 @@ self: {
        testHaskellDepends = [ base deepseq hspec lens ];
        description = "Types and functions to manipulate the Nixpkgs distribution";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "distribution-nixpkgs_1_7_0" = callPackage
@@ -81246,7 +82097,7 @@ self: {
        description = "Types and functions to manipulate the Nixpkgs distribution";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "distribution-opensuse" = callPackage
@@ -81268,6 +82119,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Types, functions, and tools to manipulate the openSUSE distribution";
        license = lib.licenses.bsd3;
+       mainProgram = "guess-changelog";
      }) {};
 
   "distribution-plot" = callPackage
@@ -81349,6 +82201,7 @@ self: {
        description = "Quantify the diversity of a population";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "diversity";
      }) {};
 
   "dixi" = callPackage
@@ -81387,6 +82240,7 @@ self: {
        description = "A wiki implemented with a firm theoretical foundation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dixi";
      }) {};
 
   "djembe" = callPackage
@@ -81419,6 +82273,7 @@ self: {
        ];
        description = "Generate Haskell code from a type";
        license = lib.licenses.bsd3;
+       mainProgram = "djinn";
      }) {};
 
   "djinn-ghc" = callPackage
@@ -81485,6 +82340,7 @@ self: {
        description = "Fedora image download tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dl-fedora";
      }) {};
 
   "dlist" = callPackage
@@ -81573,6 +82429,7 @@ self: {
        description = "AVAYA DMCC API bindings and WebSockets server for AVAYA";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dmcc-ws";
        broken = true;
      }) {};
 
@@ -81609,6 +82466,7 @@ self: {
        description = "dmenu script for killing applications. Sortable by process id or CPU/MEM usage.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dmenu-pkill";
      }) {};
 
   "dmenu-pmount" = callPackage
@@ -81627,6 +82485,7 @@ self: {
        description = "Mounting and unmounting linux devices as user with dmenu and pmount";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dmenu-pmount";
      }) {};
 
   "dmenu-search" = callPackage
@@ -81645,6 +82504,7 @@ self: {
        description = "dmenu script for searching the web with customizable search engines";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dmenu-search";
      }) {};
 
   "dns" = callPackage
@@ -81704,6 +82564,7 @@ self: {
        description = "Caching DNS resolver library and mass DNS resolver utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "massdns";
      }) {};
 
   "dnsrbl" = callPackage
@@ -81881,6 +82742,7 @@ self: {
        description = "Helps to order the 7 or less Ukrainian words to obtain somewhat suitable for poetry or music text";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dobutokO-poetry";
      }) {};
 
   "dobutokO-poetry-general" = callPackage
@@ -81934,6 +82796,7 @@ self: {
        description = "Helps to create experimental music from a file (or its part) and a Ukrainian text";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dobutokO2";
      }) {};
 
   "dobutokO3" = callPackage
@@ -81994,6 +82857,7 @@ self: {
        description = "Document review Web application, like http://book.realworldhaskell.org/";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doc-review";
      }) {};
 
   "doccheck" = callPackage
@@ -82013,6 +82877,7 @@ self: {
        description = "Checks Haddock comments for pitfalls and version changes";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doccheck";
        broken = true;
      }) {};
 
@@ -82033,6 +82898,7 @@ self: {
        description = "Generate an HTML index of installed Haskell packages and their documentation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "docidx";
        broken = true;
      }) {};
 
@@ -82092,6 +82958,7 @@ self: {
        description = "Builds a docker image and caches all of its intermediate stages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "docker-build-cacher";
        broken = true;
      }) {};
 
@@ -82127,6 +82994,7 @@ self: {
        description = "A build tool for multiple docker image layers";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dockercook";
        broken = true;
      }) {};
 
@@ -82343,6 +83211,7 @@ self: {
        ];
        description = "Test interactive Haskell examples";
        license = lib.licenses.mit;
+       mainProgram = "doctest";
      }) {};
 
   "doctest_0_20_0" = callPackage
@@ -82376,6 +83245,7 @@ self: {
        description = "Test interactive Haskell examples";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doctest";
      }) {};
 
   "doctest-discover" = callPackage
@@ -82398,6 +83268,7 @@ self: {
        doHaddock = false;
        description = "Easy way to run doctests via cabal";
        license = lib.licenses.publicDomain;
+       mainProgram = "doctest-discover";
      }) {};
 
   "doctest-discover-configurator" = callPackage
@@ -82423,6 +83294,7 @@ self: {
        description = "Easy way to run doctests via cabal (no aeson dependency, uses configurator instead)";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doctest-discover";
        broken = true;
      }) {};
 
@@ -82439,6 +83311,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "Generate driver file for doctest's cabal integration";
        license = lib.licenses.bsd3;
+       mainProgram = "doctest-driver-gen";
      }) {};
 
   "doctest-exitcode-stdio" = callPackage
@@ -82476,6 +83349,7 @@ self: {
        ];
        description = "Alternative doctest implementation that extracts comments to modules";
        license = lib.licenses.bsd3;
+       mainProgram = "doctest-extract-0.1";
      }) {};
 
   "doctest-lib" = callPackage
@@ -82601,6 +83475,7 @@ self: {
        description = "DocuSign examples";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "docusign-example";
        broken = true;
      }) {};
 
@@ -82629,6 +83504,7 @@ self: {
        description = "Documentation generator for Vim plug-ins";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "docvim";
        broken = true;
      }) {};
 
@@ -82659,6 +83535,7 @@ self: {
        description = "Automatic Bibtex and fulltext of scientific articles";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doi";
        broken = true;
      }) {};
 
@@ -82892,6 +83769,7 @@ self: {
        testHaskellDepends = [ base containers hspec lens mtl random ];
        description = "A simulator for the board game Dominion";
        license = lib.licenses.bsd3;
+       mainProgram = "dominion";
      }) {};
 
   "domplate" = callPackage
@@ -83006,6 +83884,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dot-linker";
        broken = true;
      }) {};
 
@@ -83020,6 +83899,7 @@ self: {
        executableHaskellDepends = [ base containers graphviz hxt text ];
        description = "Converter from GraphViz .dot format to yEd GraphML";
        license = lib.licenses.bsd3;
+       mainProgram = "dot2graphml";
      }) {};
 
   "dotenv" = callPackage
@@ -83048,6 +83928,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Loads environment variables from dotenv files";
        license = lib.licenses.mit;
+       mainProgram = "dotenv";
      }) {};
 
   "dotfs" = callPackage
@@ -83080,6 +83961,7 @@ self: {
        description = "Filesystem to manage and parse dotfiles";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dotfs";
        broken = true;
      }) {};
 
@@ -83273,6 +84155,7 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "A proof assistant for Magic: The Gathering puzzles";
        license = lib.licenses.bsd3;
+       mainProgram = "dovin";
      }) {};
 
   "dow" = callPackage
@@ -83292,6 +84175,7 @@ self: {
        description = "Dungeons of Wor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dow";
      }) {};
 
   "downhill" = callPackage
@@ -83357,6 +84241,7 @@ self: {
        description = "Simple tool to download images from RSS feeds (e.g. Flickr, Picasa)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "download-media-content";
      }) {};
 
   "downloader" = callPackage
@@ -83622,6 +84507,7 @@ self: {
        ];
        description = "a lightweight DNS proxy server";
        license = lib.licenses.bsd3;
+       mainProgram = "dprox";
      }) {};
 
   "drClickOn" = callPackage
@@ -83727,6 +84613,7 @@ self: {
        description = "Library and program for querying DVB (Dresdner Verkehrsbetriebe AG)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dresdner-verkehrsbetriebe";
        broken = true;
      }) {};
 
@@ -83874,6 +84761,7 @@ self: {
        description = "Dropbox API client";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exe";
        broken = true;
      }) {};
 
@@ -83916,6 +84804,7 @@ self: {
        description = "A command line tool for resolving dropbox conflicts. Deprecated! Please use confsolve.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dropsolve";
      }) {};
 
   "drunken-bishop" = callPackage
@@ -83996,6 +84885,7 @@ self: {
        description = "SQL backend for Database Supported Haskell (DSH)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sqltests";
      }) {};
 
   "dsmc" = callPackage
@@ -84131,6 +85021,7 @@ self: {
        executableHaskellDepends = [ base bytestring ];
        description = "Harmonix (Guitar Hero, Rock Band) DTA/DTB metadata library";
        license = lib.licenses.bsd3;
+       mainProgram = "dtab";
      }) {};
 
   "dtd" = callPackage
@@ -84243,6 +85134,7 @@ self: {
        description = "Network multiplayer 2D shooting game";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dual";
        broken = true;
      }) {};
 
@@ -84369,6 +85261,7 @@ self: {
        description = "A tiny language, a subset of Haskell (with type classes) aimed at aiding teachers to teach Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "duet";
        broken = true;
      }) {};
 
@@ -84445,7 +85338,7 @@ self: {
        testHaskellDepends = [ base tasty tasty-hunit transformers ];
        description = "Generalised reactive framework supporting classic, arrowized and monadic FRP";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "dunai-core" = callPackage
@@ -84512,6 +85405,7 @@ self: {
        description = "Frontend development build tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "duplo";
      }) {};
 
   "dura" = callPackage
@@ -84565,6 +85459,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
+       mainProgram = "dustme";
      }) {};
 
   "dvault" = callPackage
@@ -84584,6 +85479,7 @@ self: {
        description = "Dead simple password manager";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dvault";
        broken = true;
      }) {};
 
@@ -84725,7 +85621,10 @@ self: {
        libraryHaskellDepends = [ base Win32 ];
        description = "Backend for a binding to the Microsoft DirectX 9 API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "dx9d3d" = callPackage
@@ -84738,7 +85637,10 @@ self: {
        librarySystemDepends = [ d3d9 ];
        description = "A binding to the Microsoft DirectX 9 API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {d3d9 = null;};
 
   "dx9d3dx" = callPackage
@@ -84751,7 +85653,10 @@ self: {
        librarySystemDepends = [ d3dx9 ];
        description = "A binding to the Microsoft DirectX 9 D3DX API";
        license = lib.licenses.bsd3;
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {d3dx9 = null;};
 
   "dyckword" = callPackage
@@ -85034,6 +85939,7 @@ self: {
        description = "Library Type Safe implementation of Dynamic Pipeline Paradigm (DPP)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "examples";
        broken = true;
      }) {};
 
@@ -85236,6 +86142,7 @@ self: {
        description = "Configure dzen2 bars in Dhall language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dzen-dhall";
        broken = true;
      }) {};
 
@@ -85313,6 +86220,7 @@ self: {
        description = "Ear Clipping Triangulation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "earclipper";
        broken = true;
      }) {};
 
@@ -85349,6 +86257,7 @@ self: {
        description = "Early return syntax in do-notation (GHC plugin)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "early";
        broken = true;
      }) {};
 
@@ -85570,6 +86479,7 @@ self: {
        description = "Parser combinators & EBNF, BFFs!";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ebnf-parse";
        broken = true;
      }) {};
 
@@ -85610,6 +86520,7 @@ self: {
        description = "A handy tool for uploading unikernels to Amazon's EC2";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ec2-unikernel";
      }) {};
 
   "eccrypto" = callPackage
@@ -85690,6 +86601,7 @@ self: {
        description = "A ECMA-262 interpreter library";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ecma262";
        broken = true;
      }) {};
 
@@ -85774,6 +86686,7 @@ self: {
        description = "Command line file filtering with haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "eddie";
        broken = true;
      }) {};
 
@@ -85807,6 +86720,7 @@ self: {
        description = "Templating language with similar syntax and features to Liquid or Jinja2";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ede";
        broken = true;
      }) {};
 
@@ -85854,6 +86768,7 @@ self: {
        description = "A Tool to Visualize Parallel Functional Program Executions";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "edentv";
      }) {};
 
   "edf" = callPackage
@@ -85884,6 +86799,7 @@ self: {
        description = "Top view space combat arcade game";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "edge";
      }) {};
 
   "edges" = callPackage
@@ -86033,6 +86949,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Programs demoing the use of symmetric, stateful edit lenses";
        license = lib.licenses.bsd3;
+       mainProgram = "lens-editor";
      }) {};
 
   "editable" = callPackage
@@ -86097,6 +87014,7 @@ self: {
        ];
        description = "Edit stdin using an editor before sending to stdout";
        license = lib.licenses.bsd3;
+       mainProgram = "editpipe";
      }) {};
 
   "effect-handlers" = callPackage
@@ -86424,6 +87342,7 @@ self: {
        description = "A tutorial program for the Egison programming language";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "egison-tutorial";
      }) {};
 
   "egyptian-fractions" = callPackage
@@ -86454,6 +87373,7 @@ self: {
        description = "like eruby, ehaskell is embedded haskell";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ehs";
        broken = true;
      }) {};
 
@@ -86533,6 +87453,7 @@ self: {
        executableToolDepends = [ markdown-unlit ];
        description = "IO with Exceptions tracked on the type-level";
        license = lib.licenses.mpl20;
+       mainProgram = "readme";
      }) {};
 
   "either" = callPackage
@@ -87067,6 +87988,7 @@ self: {
        description = "Arrows with holes";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -87217,7 +88139,7 @@ self: {
        description = "elm-export persistent entities";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ jb55 ];
+       maintainers = [ lib.maintainers.jb55 ];
        broken = true;
      }) {};
 
@@ -87244,6 +88166,7 @@ self: {
        ];
        description = "Tool for sharing and using Elm libraries";
        license = lib.licenses.bsd3;
+       mainProgram = "elm-get";
      }) {};
 
   "elm-hybrid" = callPackage
@@ -87278,6 +88201,7 @@ self: {
        ];
        description = "Set up basic structure for an elm project";
        license = lib.licenses.mit;
+       mainProgram = "elm-init";
      }) {};
 
   "elm-make" = callPackage
@@ -87298,6 +88222,7 @@ self: {
        ];
        description = "A build tool for Elm projects";
        license = lib.licenses.bsd3;
+       mainProgram = "elm-make";
      }) {};
 
   "elm-package" = callPackage
@@ -87327,6 +88252,7 @@ self: {
        ];
        description = "Package manager for Elm libraries";
        license = lib.licenses.bsd3;
+       mainProgram = "elm-package";
      }) {};
 
   "elm-reactor" = callPackage
@@ -87351,6 +88277,7 @@ self: {
        ];
        description = "Interactive development tool for Elm programs";
        license = lib.licenses.bsd3;
+       mainProgram = "elm-reactor";
      }) {};
 
   "elm-repl" = callPackage
@@ -87376,6 +88303,7 @@ self: {
        ];
        description = "a REPL for Elm";
        license = lib.licenses.bsd3;
+       mainProgram = "elm-repl";
      }) {};
 
   "elm-server" = callPackage
@@ -87395,6 +88323,7 @@ self: {
        ];
        description = "Server for developing Elm projects";
        license = lib.licenses.bsd3;
+       mainProgram = "elm-server";
      }) {};
 
   "elm-street" = callPackage
@@ -87511,6 +88440,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Turn your Elm project into buildable Nix project";
        license = lib.licenses.bsd3;
+       mainProgram = "elm2nix";
      }) {};
 
   "elminator" = callPackage
@@ -87566,6 +88496,7 @@ self: {
        description = "Generate easy-to-remember, hard-to-guess passwords";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "elocrypt";
        broken = true;
      }) {};
 
@@ -87589,6 +88520,7 @@ self: {
        description = "A tiny language for understanding the lambda-calculus";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "elsa";
      }) {};
 
   "elynx" = callPackage
@@ -87606,7 +88538,8 @@ self: {
        ];
        description = "Validate and (optionally) redo ELynx analyses";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       mainProgram = "elynx";
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "elynx-markov" = callPackage
@@ -87628,7 +88561,7 @@ self: {
        benchmarkHaskellDepends = [ base ];
        description = "Simulate molecular sequences along trees";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "elynx-nexus" = callPackage
@@ -87641,7 +88574,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "Import and export Nexus files";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "elynx-seq" = callPackage
@@ -87662,7 +88595,7 @@ self: {
        ];
        description = "Handle molecular sequences";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "elynx-tools" = callPackage
@@ -87682,7 +88615,7 @@ self: {
        ];
        description = "Tools for ELynx";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "elynx-tree" = callPackage
@@ -87710,7 +88643,7 @@ self: {
        ];
        description = "Handle phylogenetic trees";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "ema" = callPackage
@@ -87734,7 +88667,7 @@ self: {
        ];
        description = "Static site generator library with hot reload";
        license = lib.licenses.agpl3Only;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "emacs-keys" = callPackage
@@ -87884,6 +88817,7 @@ self: {
        ];
        description = "Perform basic syntax and deliverability checks on email addresses";
        license = lib.licenses.agpl3Only;
+       mainProgram = "email-validator";
      }) {};
 
   "emailaddress" = callPackage
@@ -87945,6 +88879,7 @@ self: {
        ];
        description = "Embed the values in scope in the haddock documentation of the module";
        license = lib.licenses.bsd3;
+       mainProgram = "embeddock";
      }) {};
 
   "embeddock-example" = callPackage
@@ -87988,6 +88923,7 @@ self: {
        description = "support for embroidery formats in haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "emd" = callPackage
@@ -88050,6 +88986,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "emoji utility";
        license = lib.licenses.bsd3;
+       mainProgram = "emoji-example";
      }) {};
 
   "emojis" = callPackage
@@ -88239,6 +89176,7 @@ self: {
        ];
        description = "An English language stemmer (Porter2)";
        license = lib.licenses.bsd3;
+       mainProgram = "eng-stemmer-example";
      }) {};
 
   "engine-io" = callPackage
@@ -88359,6 +89297,7 @@ self: {
        description = "An application (and library) to convert quipper circuits into Qpmc models";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "entangle";
      }) {};
 
   "entropy" = callPackage
@@ -88462,6 +89401,7 @@ self: {
        description = "Making fmt available with rio";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "demo-enum-text-rio";
      }) {};
 
   "enum-types" = callPackage
@@ -88522,6 +89462,7 @@ self: {
        description = "enumerate all the values in a finite type (automatically)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-enumerate";
      }) {};
 
   "enumerate-function" = callPackage
@@ -88543,6 +89484,7 @@ self: {
        description = "simple package for inverting functions and testing totality, via brute enumeration of the domain";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-enumerate-function";
      }) {};
 
   "enumeration" = callPackage
@@ -88814,6 +89756,7 @@ self: {
        description = "Display efficiently the state of the local environment";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "envstatus";
        broken = true;
      }) {};
 
@@ -88836,7 +89779,7 @@ self: {
        ];
        description = "An environmentally friendly way to deal with environment variables";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "envy-extensible" = callPackage
@@ -88941,6 +89884,7 @@ self: {
        description = "Compiler for a simple functional language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "epic";
        broken = true;
      }) {};
 
@@ -88988,6 +89932,7 @@ self: {
        ];
        description = "EPUB E-Book construction support library";
        license = lib.licenses.bsd3;
+       mainProgram = "xhtml2epub";
      }) {};
 
   "epub-metadata" = callPackage
@@ -89011,6 +89956,7 @@ self: {
        ];
        description = "Library for parsing epub document metadata";
        license = lib.licenses.bsd3;
+       mainProgram = "epub-metadata-example";
      }) {};
 
   "epub-tools" = callPackage
@@ -89049,6 +89995,7 @@ self: {
        description = "Rename epub ebook files based on meta information";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "epubname";
        broken = true;
      }) {};
 
@@ -89079,6 +90026,7 @@ self: {
        ];
        description = "Shell command for finding equal files";
        license = "GPL";
+       mainProgram = "equal-files";
      }) {};
 
   "equational-reasoning" = callPackage
@@ -89175,6 +90123,7 @@ self: {
        description = "An entity-relationship diagram generator from a plain text description";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "erd";
        broken = true;
      }) {};
 
@@ -89269,6 +90218,7 @@ self: {
        description = "DEPRECATED in favor of eros-http";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "erosc";
      }) {};
 
   "eros-http" = callPackage
@@ -89289,6 +90239,7 @@ self: {
        description = "JSON HTTP interface to Eros";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "eros-http";
      }) {};
 
   "errata" = callPackage
@@ -89307,6 +90258,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Source code error pretty printing";
        license = lib.licenses.mit;
+       mainProgram = "errata-example";
      }) {};
 
   "errno" = callPackage
@@ -89522,7 +90474,7 @@ self: {
        ];
        description = "Simplified error-handling";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "errors-ext" = callPackage
@@ -89567,6 +90519,7 @@ self: {
        description = "A script to concatenate AIP ERSA";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ersaconcat";
        broken = true;
      }) {};
 
@@ -89636,6 +90589,7 @@ self: {
        description = "Easy Runtime Templates";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ert";
        broken = true;
      }) {};
 
@@ -89676,6 +90630,7 @@ self: {
        ];
        description = "Produce Text with terminal escape sequences";
        license = lib.licenses.mit;
+       mainProgram = "escaped-example";
      }) {};
 
   "escoger" = callPackage
@@ -89703,6 +90658,7 @@ self: {
        description = "Terminal fuzzy selector";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "escoger";
        broken = true;
      }) {};
 
@@ -89728,6 +90684,7 @@ self: {
        description = "Esotericbot is a sophisticated, lightweight IRC bot";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "esotericbot";
      }) {};
 
   "espial" = callPackage
@@ -89897,7 +90854,7 @@ self: {
        ];
        description = "General purpose live coding framework";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "essence-of-live-coding-PortMidi" = callPackage
@@ -89913,9 +90870,7 @@ self: {
        ];
        description = "General purpose live coding framework - PortMidi backend";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "essence-of-live-coding-gloss" = callPackage
@@ -89931,7 +90886,7 @@ self: {
        ];
        description = "General purpose live coding framework - Gloss backend";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "essence-of-live-coding-gloss-example" = callPackage
@@ -89951,6 +90906,7 @@ self: {
        description = "General purpose live coding framework - Gloss example";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "essence-of-live-coding-gloss-example";
        broken = true;
      }) {};
 
@@ -89967,7 +90923,7 @@ self: {
        ];
        description = "General purpose live coding framework - pulse backend";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "essence-of-live-coding-pulse-example" = callPackage
@@ -89987,6 +90943,7 @@ self: {
        description = "General purpose live coding framework - pulse backend example";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "essence-of-live-coding-pulse-example";
        broken = true;
      }) {};
 
@@ -90004,7 +90961,7 @@ self: {
        ];
        description = "General purpose live coding framework - QuickCheck integration";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "essence-of-live-coding-vivid" = callPackage
@@ -90303,6 +91260,7 @@ self: {
        description = "A web frontend for ethereum-analyzer";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ethereum-analyzer-webui";
      }) {};
 
   "ethereum-client-haskell" = callPackage
@@ -90413,6 +91371,7 @@ self: {
        ];
        description = "Random etymology online entry";
        license = lib.licenses.bsd3;
+       mainProgram = "ety";
      }) {};
 
   "euler" = callPackage
@@ -90575,6 +91534,7 @@ self: {
        testHaskellDepends = [ base bytestring eve lens mtl text vty ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "eve-cli-exe";
      }) {};
 
   "eved" = callPackage
@@ -90695,6 +91655,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
+       mainProgram = "event-transformer-exe";
      }) {};
 
   "eventful-core" = callPackage
@@ -90866,6 +91827,7 @@ self: {
        executableHaskellDepends = [ aeson base filepath text ];
        description = "Visualise an eventlog";
        license = lib.licenses.bsd3;
+       mainProgram = "eventlog2html";
      }) {};
 
   "eventloop" = callPackage
@@ -90991,6 +91953,7 @@ self: {
        ];
        description = "Server-Sent Events the UNIX way";
        license = lib.licenses.mit;
+       mainProgram = "eventsourced";
      }) {};
 
   "eventsourcing" = callPackage
@@ -91062,7 +92025,6 @@ self: {
        ];
        description = "EventStore TCP Client";
        license = lib.licenses.bsd3;
-       platforms = [ "x86_64-darwin" "x86_64-linux" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {};
@@ -91151,6 +92113,7 @@ self: {
        description = "An interpreter for EWE programming language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ewe";
        broken = true;
      }) {};
 
@@ -91230,7 +92193,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion ];
        description = "Exact real arithmetic";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {};
 
   "exact-real-positional" = callPackage
@@ -91258,6 +92221,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Example Haskell Project";
        license = lib.licenses.bsd3;
+       mainProgram = "example-haskell-project";
      }) {};
 
   "except-exceptions" = callPackage
@@ -91479,6 +92443,7 @@ self: {
        description = "Tool to run stack exec prj-exe more easy";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "execs";
        broken = true;
      }) {};
 
@@ -91504,6 +92469,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Provides the SHA1 hash of the program executable";
        license = lib.licenses.mit;
+       mainProgram = "inject-executable-hash";
      }) {};
 
   "executable-path" = callPackage
@@ -91560,6 +92526,7 @@ self: {
        description = "Tool to search/generate (haskell) expressions with a given type";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exference";
      }) {};
 
   "exh" = callPackage
@@ -91628,6 +92595,7 @@ self: {
        description = "Exheres generator for cabal packages";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exherbo-cabal";
        broken = true;
      }) {};
 
@@ -91986,6 +92954,7 @@ self: {
        ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exp-cache-benchmarks";
        broken = true;
      }) {};
 
@@ -92155,6 +93124,7 @@ self: {
        description = "Show how expressions are parsed";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "explain";
        broken = true;
      }) {};
 
@@ -92283,6 +93253,7 @@ self: {
        description = "Experimental Plot data Reconstructor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "explore";
      }) {};
 
   "exploring-interpreters" = callPackage
@@ -92417,6 +93388,7 @@ self: {
        description = "A simple expressions language based on row types";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "expresso";
        broken = true;
      }) {};
 
@@ -92460,6 +93432,7 @@ self: {
        description = "automated printing for extemp speakers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "extemp";
      }) {};
 
   "extend-record-data-th" = callPackage
@@ -92690,6 +93663,7 @@ self: {
        ];
        description = "Inspect extensions in cabal and hpack files";
        license = lib.licenses.mit;
+       mainProgram = "extensioneer";
      }) {};
 
   "extensions" = callPackage
@@ -92718,6 +93692,7 @@ self: {
        description = "Parse Haskell Language Extensions";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "extensions";
        broken = true;
      }) {};
 
@@ -92772,6 +93747,7 @@ self: {
        description = "Given a hackage package outputs the list of its dependencies";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "extract-dependencies";
      }) {};
 
   "extractable-singleton" = callPackage
@@ -92802,6 +93778,7 @@ self: {
        description = "Extract an ELF's metadata and sections into files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "extractelf";
        broken = true;
      }) {};
 
@@ -92903,6 +93880,7 @@ self: {
        description = "Spam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test1";
        broken = true;
      }) {};
 
@@ -92941,6 +93919,7 @@ self: {
        description = "Factoring integers and polynomials";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "factor";
        broken = true;
      }) {};
 
@@ -92967,6 +93946,7 @@ self: {
        ];
        description = "Rational arithmetic in an irrational world";
        license = lib.licenses.gpl3Plus;
+       mainProgram = "factory";
      }) {};
 
   "facts" = callPackage
@@ -93353,6 +94333,7 @@ self: {
        description = "Falling sand game/cellular automata simulation using regular parallel arrays";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "falling-turnip";
        broken = true;
      }) {};
 
@@ -93373,6 +94354,7 @@ self: {
        description = "A fun falling blocks game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fallingblocks";
      }) {};
 
   "familiar-reflection" = callPackage
@@ -93547,7 +94529,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A fast logging system";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "fast-math" = callPackage
@@ -93611,6 +94593,7 @@ self: {
        ];
        description = "Fast incremental vi and emacs tags";
        license = lib.licenses.bsd3;
+       mainProgram = "fast-tags";
      }) {};
 
   "fast-tagsoup" = callPackage
@@ -93872,6 +94855,7 @@ self: {
        description = "A compiler for Fay, a Haskell subset that compiles to JavaScript";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fay";
      }) {};
 
   "fay-base" = callPackage
@@ -94093,6 +95077,7 @@ self: {
        description = "High-level bindings to Facebook Messenger Platform API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -94122,6 +95107,7 @@ self: {
        description = "Fedora packager tool to build package branches";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fbrnch";
      }) {};
 
   "fca" = callPackage
@@ -94178,6 +95164,7 @@ self: {
        description = "A faster way to navigate directories using the command line";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fcd";
      }) {};
 
   "fcf-composite" = callPackage
@@ -94265,6 +95252,7 @@ self: {
        description = "TBA";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fcg";
        broken = true;
      }) {};
 
@@ -94345,6 +95333,7 @@ self: {
        description = "Admin API for Firebase Cloud Messaging";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fcm-client";
        broken = true;
      }) {};
 
@@ -94378,6 +95367,7 @@ self: {
        description = "Utilities related to freedesktop Trash standard";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fdo-trash";
        broken = true;
      }) {};
 
@@ -94523,6 +95513,7 @@ self: {
        description = "Fedora image download tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fedora-img-dl";
      }) {};
 
   "fedora-packages" = callPackage
@@ -94562,6 +95553,7 @@ self: {
        testHaskellDepends = [ base QuickCheck ];
        description = "Short description of your package";
        license = lib.licenses.bsd3;
+       mainProgram = "fee-estimate-exe";
      }) {};
 
   "feed" = callPackage
@@ -94605,6 +95597,7 @@ self: {
        description = "A simple command line interface for creating and updating feeds like RSS";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "feed-cli";
        broken = true;
      }) {};
 
@@ -94682,6 +95675,7 @@ self: {
        description = "CI service around gipeda";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "feed-gipeda";
      }) {};
 
   "feed-translator" = callPackage
@@ -94704,6 +95698,7 @@ self: {
        description = "Translate syndication feeds";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "feed-translator";
      }) {};
 
   "feed2lj" = callPackage
@@ -94723,6 +95718,7 @@ self: {
        description = "(unsupported)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "feed2lj";
      }) {};
 
   "feed2twitter" = callPackage
@@ -94740,6 +95736,7 @@ self: {
        description = "Send posts from a feed to Twitter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "feed2twitter";
      }) {};
 
   "feedback" = callPackage
@@ -94792,6 +95789,7 @@ self: {
        description = "FFI to MXNet";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mxnet-op-gen";
      }) {inherit (pkgs) mxnet;};
 
   "fei-cocoapi" = callPackage
@@ -94820,6 +95818,7 @@ self: {
        description = "Cocodataset with cocoapi";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imageutils";
        broken = true;
      }) {};
 
@@ -94848,6 +95847,7 @@ self: {
        description = "mxnet dataiters";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mxnet-dataiter-gen";
      }) {inherit (pkgs) mxnet;};
 
   "fei-datasets" = callPackage
@@ -95032,6 +96032,7 @@ self: {
        ];
        description = "Converting a chess position from FEN notation to text";
        license = lib.licenses.mit;
+       mainProgram = "fen2s";
      }) {};
 
   "fences" = callPackage
@@ -95090,6 +96091,7 @@ self: {
        description = "Generate and verify HMAC-based authentication tokens";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fernet";
        broken = true;
      }) {};
 
@@ -95122,6 +96124,7 @@ self: {
        description = "Remote multi-db SQLCipher server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "festung";
      }) {};
 
   "fez-conf" = callPackage
@@ -95412,6 +96415,7 @@ self: {
        description = "update statically hosted file in a push stule through socketed";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ficketed";
      }) {};
 
   "fields" = callPackage
@@ -95598,6 +96602,7 @@ self: {
        ];
        description = "Takes a Haskell source-code file and outputs its modules";
        license = lib.licenses.mit;
+       mainProgram = "file-modules";
      }) {};
 
   "file-path-th" = callPackage
@@ -95634,6 +96639,7 @@ self: {
        description = "Use templates for files and directories";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "new";
        broken = true;
      }) {};
 
@@ -96085,6 +97091,7 @@ self: {
        description = "Find the clumpiness of labels in a tree";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "find-clumpiness";
      }) {};
 
   "find-conduit" = callPackage
@@ -96120,6 +97127,7 @@ self: {
        description = "A file-finding conduit that allows user control over traversals";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "find-hs";
        broken = true;
      }) {};
 
@@ -96153,6 +97161,7 @@ self: {
        description = "List http/html files";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "findhttp";
      }) {};
 
   "fingertree" = callPackage
@@ -96363,7 +97372,7 @@ self: {
        libraryHaskellDepends = [ base deepseq ];
        description = "A type inhabited by finitely many values, indexed by type-level naturals";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "finito" = callPackage
@@ -96444,6 +97453,7 @@ self: {
        description = "A simple example using Firefly";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "firefly-example-exe";
        broken = true;
      }) {};
 
@@ -96546,6 +97556,7 @@ self: {
        description = "Defunctionalisation for Yhc Core";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "firstify";
      }) {};
 
   "fishfood" = callPackage
@@ -96569,6 +97580,7 @@ self: {
        ];
        description = "Calculates file-size frequency-distribution";
        license = "GPL";
+       mainProgram = "fishfood";
      }) {};
 
   "fit" = callPackage
@@ -96614,6 +97626,7 @@ self: {
        description = "Parse FITS files";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "omnibus";
        broken = true;
      }) {};
 
@@ -96668,6 +97681,7 @@ self: {
        ];
        description = "Program to manage the imports of a haskell module";
        license = lib.licenses.bsd3;
+       mainProgram = "fix-imports";
      }) {};
 
   "fix-parser-simple" = callPackage
@@ -96712,6 +97726,7 @@ self: {
        ];
        description = "Fixes whitespace issues";
        license = "unknown";
+       mainProgram = "fix-whitespace";
      }) {};
 
   "fixed" = callPackage
@@ -96941,6 +97956,7 @@ self: {
        ];
        description = "Quick parsing of fixed-width data formats";
        license = lib.licenses.mit;
+       mainProgram = "fixedwidth-hs";
      }) {};
 
   "fixer" = callPackage
@@ -97019,6 +98035,7 @@ self: {
        description = "FIX (co)parser";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fix-generator";
      }) {};
 
   "fixie" = callPackage
@@ -97122,6 +98139,7 @@ self: {
        description = "FizzBuzz as a service";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fizzbuzz-server";
        broken = true;
      }) {};
 
@@ -97190,6 +98208,7 @@ self: {
        description = "Verify FLAC files ripped form CD using AccurateRipâ„¢";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flaccuraterip";
        broken = true;
      }) {};
 
@@ -97237,6 +98256,7 @@ self: {
        description = "FlameGraphs of profiling";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flamingra";
        broken = true;
      }) {};
 
@@ -97283,6 +98303,7 @@ self: {
        description = "Generate language learning flashcards from video";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flashblast";
      }) {};
 
   "flat" = callPackage
@@ -97311,7 +98332,7 @@ self: {
        ];
        description = "Principled and efficient bit-oriented binary serialization";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "flat-maybe" = callPackage
@@ -97357,6 +98378,7 @@ self: {
        description = "flatten a latex multi-file latex document and remove all comments";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flat-tex";
        broken = true;
      }) {};
 
@@ -97492,6 +98514,7 @@ self: {
        executableHaskellDepends = [ base bytestring text ];
        description = "A configurable reimplementation of unlit";
        license = lib.licenses.bsd3;
+       mainProgram = "funlit";
      }) {};
 
   "flexiwrap" = callPackage
@@ -97621,6 +98644,7 @@ self: {
        executableHaskellDepends = [ base process safe-exceptions ];
        description = "e.g. `flip systemctl foo.service start` does `systemctl start foo.service`";
        license = lib.licenses.mit;
+       mainProgram = "flip";
      }) {};
 
   "flippers" = callPackage
@@ -97651,6 +98675,7 @@ self: {
        description = "f-lite compiler, interpreter and libraries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flite";
      }) {};
 
   "flo" = callPackage
@@ -97671,6 +98696,7 @@ self: {
        ];
        description = "Generate flow charts from your code base";
        license = lib.licenses.bsd3;
+       mainProgram = "flo";
      }) {};
 
   "float-binstring" = callPackage
@@ -97780,6 +98806,7 @@ self: {
        ];
        description = "A flexible Haskell source code pretty printer";
        license = lib.licenses.bsd3;
+       mainProgram = "floskell";
      }) {};
 
   "flow" = callPackage
@@ -97824,6 +98851,7 @@ self: {
        ];
        description = "Library and binary to generate sequence/flow diagrams from plain text source";
        license = lib.licenses.bsd3;
+       mainProgram = "flow2dot";
      }) {};
 
   "flowdock" = callPackage
@@ -97882,6 +98910,7 @@ self: {
        description = "API integration with Flowdock";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "flowdock";
      }) {};
 
   "flowdock-rest" = callPackage
@@ -98082,6 +99111,7 @@ self: {
        description = "Fltkhs template project";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fltkhs-hello-world";
      }) {};
 
   "fltkhs-themes" = callPackage
@@ -98162,6 +99192,7 @@ self: {
        ];
        description = "A simple web application as a online practice website for XDU SE 2017 fall SPM";
        license = lib.licenses.gpl3Only;
+       mainProgram = "fluffy";
      }) {};
 
   "fluffy-parser" = callPackage
@@ -98294,6 +99325,7 @@ self: {
        description = "A Friendly Markup language without syntax";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fmark";
        broken = true;
      }) {};
 
@@ -98536,7 +99568,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion ];
        description = "Composable, streaming, and efficient left folds";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "foldl-exceptions" = callPackage
@@ -98698,6 +99730,7 @@ self: {
        ];
        description = "Toolset for Folger Shakespeare Library's XML annotated plays";
        license = lib.licenses.gpl3Only;
+       mainProgram = "folgerhs";
      }) {};
 
   "follow" = callPackage
@@ -98727,6 +99760,7 @@ self: {
        description = "Haskell library to follow content published on any subject";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "follow_pocket_auth";
        broken = true;
      }) {};
 
@@ -98752,9 +99786,8 @@ self: {
        ];
        description = "Be notified when a file gets appended, solely with what was added. Warning - only works on linux and for files that are strictly appended, like log files.";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "follow-file";
      }) {};
 
   "follower" = callPackage
@@ -98774,6 +99807,7 @@ self: {
        description = "Follow Tweets anonymously";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "follower";
      }) {};
 
   "foma" = callPackage
@@ -98812,6 +99846,7 @@ self: {
        description = "Basic4x6 font for OpenGL";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "show-font-basic4x6";
        broken = true;
      }) {};
 
@@ -98829,6 +99864,7 @@ self: {
        description = "Paper soccer, an OpenGL game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "foo";
      }) {};
 
   "foobar" = callPackage
@@ -98844,6 +99880,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
+       mainProgram = "foobar-exe";
      }) {};
 
   "for-free" = callPackage
@@ -98914,6 +99951,7 @@ self: {
        description = "Run a command on files with magic substituion support (sequencing and regexp)";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fordo";
        broken = true;
      }) {};
 
@@ -99004,6 +100042,7 @@ self: {
        description = "Recursively delete CloudFormation stacks and their dependants";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "forest-fire";
        broken = true;
      }) {};
 
@@ -99033,6 +100072,7 @@ self: {
        description = "Print Forex quotes in Ledger format";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "forex2ledger";
        broken = true;
      }) {};
 
@@ -99049,6 +100089,7 @@ self: {
        description = "Library for generating fake placeholder data";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "forger";
        broken = true;
      }) {};
 
@@ -99098,6 +100139,7 @@ self: {
        description = "A statically typed, functional programming language";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "formal";
      }) {};
 
   "format" = callPackage
@@ -99141,6 +100183,7 @@ self: {
        description = "A utility for writing the date to dzen2";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "format-status";
      }) {};
 
   "formatn" = callPackage
@@ -99222,6 +100265,7 @@ self: {
        description = "A statically typed, functional programming language";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "forml";
      }) {};
 
   "formlets" = callPackage
@@ -99366,6 +100410,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Parsers and analyses for Fortran standards 66, 77, 90, 95 and 2003 (partial)";
        license = lib.licenses.asl20;
+       mainProgram = "fortran-src";
      }) {};
 
   "fortran-src-extras" = callPackage
@@ -99418,6 +100463,7 @@ self: {
        description = "Fortran memory model and other static analysis tools";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fortran-vars";
      }) {};
 
   "fortytwo" = callPackage
@@ -99511,6 +100557,7 @@ self: {
        description = "Foscam File format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "foscam-sort";
      }) {};
 
   "foundation" = callPackage
@@ -99579,6 +100626,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A formatter for Haskell source code";
        license = lib.licenses.bsd3;
+       mainProgram = "fourmolu";
      }) {};
 
   "fourmolu_0_6_0_0" = callPackage
@@ -99611,6 +100659,7 @@ self: {
        description = "A formatter for Haskell source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fourmolu";
      }) {};
 
   "fourmolu_0_7_0_1" = callPackage
@@ -99645,6 +100694,7 @@ self: {
        description = "A formatter for Haskell source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fourmolu";
      }) {};
 
   "fp-ieee" = callPackage
@@ -99699,6 +100749,7 @@ self: {
        description = "Simple interface to the FP Complete IDE API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fpco-api";
      }) {};
 
   "fpe" = callPackage
@@ -99826,6 +100877,7 @@ self: {
        description = "Installed package query tool for Gentoo Linux";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fquery";
        broken = true;
      }) {};
 
@@ -99840,6 +100892,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Draw Newton, Julia and Mandelbrot fractals";
        license = lib.licenses.bsd3;
+       mainProgram = "fractal";
      }) {};
 
   "fractals" = callPackage
@@ -99882,6 +100935,7 @@ self: {
        description = "A 3-D First Person Shooter Game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "frag";
        broken = true;
      }) {};
 
@@ -99907,6 +100961,7 @@ self: {
        description = "A simple web framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "frame-shell";
        broken = true;
      }) {ghc-binary = null;};
 
@@ -99999,6 +101054,7 @@ self: {
        ];
        description = "CLI frecency history";
        license = lib.licenses.bsd3;
+       mainProgram = "frecently";
      }) {};
 
   "freckle-app" = callPackage
@@ -100155,6 +101211,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "An extensible effects library";
        license = lib.licenses.bsd3;
+       mainProgram = "free-er-examples";
      }) {};
 
   "free-functors" = callPackage
@@ -100265,6 +101322,7 @@ self: {
        description = "Automatically Generating Counterexamples to Naive Free Theorems";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "counterexamples.cgi";
      }) {};
 
   "free-theorems-seq" = callPackage
@@ -100302,6 +101360,7 @@ self: {
        description = "Taming Selective Strictness";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "free-theorems-seq-webui.cgi";
      }) {};
 
   "free-theorems-webui" = callPackage
@@ -100338,6 +101397,7 @@ self: {
        description = "Spam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test1";
        broken = true;
      }) {};
 
@@ -100355,6 +101415,7 @@ self: {
        description = "Spam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test1";
        broken = true;
      }) {};
 
@@ -100389,6 +101450,7 @@ self: {
        testHaskellDepends = [ base containers mtl tasty tasty-hunit ];
        description = "van Laarhoven encoded Free Monad with Extensible Effects";
        license = lib.licenses.bsd3;
+       mainProgram = "examples";
      }) {};
 
   "freekick2" = callPackage
@@ -100445,9 +101507,7 @@ self: {
        libraryPkgconfigDepends = [ libfreenect ];
        description = "Interface to the Kinect device";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) freenect; freenect_sync = null; 
          libfreenect = null;};
 
@@ -100469,6 +101529,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion free mtl ];
        description = "Implementation of the Freer Monad";
        license = lib.licenses.bsd3;
+       mainProgram = "freer-examples";
      }) {};
 
   "freer-converse" = callPackage
@@ -100507,6 +101568,7 @@ self: {
        description = "Implementation of effect system for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "freer-examples";
        broken = true;
      }) {};
 
@@ -100544,6 +101606,7 @@ self: {
        ];
        description = "A friendly effect system for Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "freer-simple-examples";
      }) {};
 
   "freer-simple-catching" = callPackage
@@ -100640,6 +101703,7 @@ self: {
        description = "A Haskell syntax extension for generalised sections";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "freesect";
        broken = true;
      }) {};
 
@@ -100874,6 +101938,7 @@ self: {
        ];
        description = "Attempt to pretty-print any input";
        license = lib.licenses.bsd3;
+       mainProgram = "friendly";
      }) {};
 
   "friendly-time" = callPackage
@@ -100927,6 +101992,7 @@ self: {
        executableHaskellDepends = [ base bytestring process-extras text ];
        description = "Simple adapter for transformation of HTML to other formats";
        license = lib.licenses.mit;
+       mainProgram = "fromhtml";
      }) {};
 
   "front" = callPackage
@@ -100977,6 +102043,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "Advanced rotation of backups and other things";
        license = lib.licenses.publicDomain;
+       mainProgram = "frotate";
      }) {};
 
   "frown" = callPackage
@@ -100991,6 +102058,7 @@ self: {
        description = "LALR(k) parser generator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "frown";
        broken = true;
      }) {};
 
@@ -101083,6 +102151,7 @@ self: {
        description = "Program terminal applications with vty and frpnow!";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "frpnow-vty-demo";
      }) {};
 
   "frquotes" = callPackage
@@ -101097,6 +102166,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Lexical extension for Quasi-Quotations using French-Quotes";
        license = lib.licenses.bsd3;
+       mainProgram = "frquotes";
      }) {};
 
   "fs-events" = callPackage
@@ -101213,6 +102283,7 @@ self: {
        description = "Finite state transducers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fststudio";
        broken = true;
      }) {};
 
@@ -101247,6 +102318,7 @@ self: {
        description = "Wait and observe events on the filesystem for a path, with a timeout";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fswait";
        broken = true;
      }) {};
 
@@ -101269,6 +102341,7 @@ self: {
        description = "File System watching tool with cli and slave functionalities";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hfswatch";
        broken = true;
      }) {};
 
@@ -101288,6 +102361,7 @@ self: {
        ];
        description = "Watch a file/directory and run a command when it's modified";
        license = lib.licenses.bsd3;
+       mainProgram = "fswatcher";
      }) {};
 
   "ft-generator" = callPackage
@@ -101302,6 +102376,7 @@ self: {
        description = "implementation accompanying a WFLP'19 paper";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ft-generator";
        broken = true;
      }) {};
 
@@ -101431,6 +102506,7 @@ self: {
        description = "Shell interface to the FreeTheorems library";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ftshell";
      }) {};
 
   "fudgets" = callPackage
@@ -101513,6 +102589,7 @@ self: {
        ];
        description = "Simple sentence segmenter";
        license = lib.licenses.bsd3;
+       mainProgram = "fullstop";
      }) {};
 
   "funbot" = callPackage
@@ -101542,6 +102619,7 @@ self: {
        description = "IRC bot for fun, learning, creativity and collaboration";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "funbot";
      }) {};
 
   "funbot-client" = callPackage
@@ -101593,6 +102671,7 @@ self: {
        description = "Git hook which sends events to FunBot";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "funbot-client-post-receive";
      }) {};
 
   "funcmp" = callPackage
@@ -101605,7 +102684,7 @@ self: {
        libraryHaskellDepends = [ base filepath pretty process ];
        description = "Functional MetaPost is a Haskell frontend to the MetaPost language";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "funcons-intgen" = callPackage
@@ -101626,6 +102705,7 @@ self: {
        description = "Generate Funcons interpreters from CBS description files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cbsc";
        broken = true;
      }) {iml-tools = null;};
 
@@ -101645,6 +102725,7 @@ self: {
        description = "call-by-value lambda-calculus with meta-programming";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambda-cbv";
      }) {};
 
   "funcons-simple" = callPackage
@@ -101661,6 +102742,7 @@ self: {
        description = "A modular interpreter for executing SIMPLE funcons";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "runfct-SIMPLE";
      }) {};
 
   "funcons-tools" = callPackage
@@ -101688,6 +102770,7 @@ self: {
        description = "A modular interpreter for executing funcons";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "funcons-repl";
      }) {};
 
   "funcons-values" = callPackage
@@ -101977,6 +103060,7 @@ self: {
        description = "Workflows with arrows";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ffexecutord";
      }) {};
 
   "funflow-nix" = callPackage
@@ -102033,6 +103117,7 @@ self: {
        description = "A unioning file-system using HFuse";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "funion";
      }) {};
 
   "funnyprint" = callPackage
@@ -102084,6 +103169,7 @@ self: {
        description = "A modern DPLL-style SAT solver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "funsat";
      }) {};
 
   "funspection" = callPackage
@@ -102342,6 +103428,7 @@ self: {
        ];
        description = "An optimising compiler for a functional, array-oriented language";
        license = lib.licenses.isc;
+       mainProgram = "futhark";
      }) {};
 
   "futhark-data" = callPackage
@@ -102412,6 +103499,7 @@ self: {
        description = "Generate Haskell wrappers for Futhark libraries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "futhask";
        broken = true;
      }) {};
 
@@ -102427,6 +103515,7 @@ self: {
        description = "Simple IP-over-UDP tunnel using TUNTAP";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "futun";
        broken = true;
      }) {};
 
@@ -102602,6 +103691,7 @@ self: {
        description = "Fuzzy text matching";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "bench";
        broken = true;
      }) {};
 
@@ -102638,9 +103728,8 @@ self: {
        ];
        description = "A 'ten past six' style clock";
        license = "GPL";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "fuzzytime";
      }) {};
 
   "fvars" = callPackage
@@ -102744,6 +103833,7 @@ self: {
        description = "Generate Gentoo ebuilds from NodeJS/npm packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "g-npm";
        broken = true;
      }) {};
 
@@ -102821,6 +103911,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Theorem prover for intuitionistic propositional logic using G4ip";
        license = lib.licenses.mit;
+       mainProgram = "g4ip-prover";
      }) {};
 
   "gact" = callPackage
@@ -102839,6 +103930,7 @@ self: {
        description = "General Alignment Clustering Tool";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gact";
      }) {};
 
   "galois-fft" = callPackage
@@ -102909,6 +104001,7 @@ self: {
        testHaskellDepends = [ array base hspec ];
        description = "Conway's Game of Life";
        license = lib.licenses.mit;
+       mainProgram = "game-of-life";
      }) {};
 
   "game-probability" = callPackage
@@ -102947,6 +104040,7 @@ self: {
        description = "Game clock that shows two analog clock faces";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gameclock";
        broken = true;
      }) {};
 
@@ -102979,6 +104073,7 @@ self: {
        description = "Tool for generating TOTP MFA tokens";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gamgee";
        broken = true;
      }) {};
 
@@ -103275,7 +104370,8 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "GCode processor";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sorki ];
+       mainProgram = "gcodehs";
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "gconf" = callPackage
@@ -103348,6 +104444,7 @@ self: {
        description = "API Wrapping for Coinbase's GDAX exchange";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sandbox";
      }) {};
 
   "gdelt" = callPackage
@@ -103427,6 +104524,7 @@ self: {
        ];
        description = "recursive atomic build system";
        license = lib.licenses.gpl3Only;
+       mainProgram = "gdo";
      }) {};
 
   "gdp" = callPackage
@@ -103441,6 +104539,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Reason about invariants and preconditions with ghosts of departed proofs";
        license = lib.licenses.bsd3;
+       mainProgram = "gdp";
      }) {};
 
   "gearbox" = callPackage
@@ -103454,6 +104553,7 @@ self: {
        executableHaskellDepends = [ base GLUT OpenGLRaw Vec ];
        description = "zooming rotating fractal gears graphics demo";
        license = lib.licenses.gpl3Only;
+       mainProgram = "gearbox";
      }) {};
 
   "gedcom" = callPackage
@@ -103517,6 +104617,7 @@ self: {
        description = "Geek blog engine server";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "geek";
      }) {};
 
   "gegl" = callPackage
@@ -103558,6 +104659,7 @@ self: {
        description = "A graphics description language";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -103611,6 +104713,7 @@ self: {
        description = "OpenGL rendering routines for the gelatin-picture graphics EDSL";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gelatin-gl-example";
      }) {};
 
   "gelatin-sdl2" = callPackage
@@ -103629,6 +104732,7 @@ self: {
        description = "An SDL2 backend for the gelatin renderer";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gelatin-sdl2-example";
      }) {};
 
   "gelatin-shaders" = callPackage
@@ -103690,6 +104794,7 @@ self: {
        description = "Generate CSV Exports of Your Gemini Trades, Transfers, & Earn Transactions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gemini-exports";
        broken = true;
      }) {};
 
@@ -103745,6 +104850,7 @@ self: {
        description = "A barebones textboard for the Gemini protocol";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gemini-textboard";
      }) {};
 
   "gemstone" = callPackage
@@ -103799,6 +104905,7 @@ self: {
        description = "Create wordlist-based passwords easily";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gen-passwd";
        broken = true;
      }) {};
 
@@ -103834,6 +104941,7 @@ self: {
        description = "Identify a persons gender by their first name";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gender";
        broken = true;
      }) {};
 
@@ -104312,7 +105420,7 @@ self: {
        ];
        description = "Generically derive traversals, lenses and prisms";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "generic-optics-lite" = callPackage
@@ -104652,6 +105760,7 @@ self: {
        description = "A Genetic Algorithm library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hellogenetics";
        broken = true;
      }) {};
 
@@ -104677,6 +105786,7 @@ self: {
        description = "GenI graphical user interface";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "geni-gui";
      }) {};
 
   "geni-util" = callPackage
@@ -104701,6 +105811,7 @@ self: {
        description = "Companion tools for use with the GenI surface realiser";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "geni-util";
      }) {};
 
   "geniconvert" = callPackage
@@ -104721,6 +105832,7 @@ self: {
        description = "Conversion utility for the GenI generator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "geniconvert";
      }) {};
 
   "genifunctors" = callPackage
@@ -104781,6 +105893,7 @@ self: {
        description = "Simple HTTP server for GenI results";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "geniserver";
      }) {};
 
   "genprog" = callPackage
@@ -105755,6 +106868,7 @@ self: {
        description = "Fetch from emusic using .emx files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "getemx";
      }) {};
 
   "getflag" = callPackage
@@ -105833,6 +106947,7 @@ self: {
        description = "Grammatical Framework";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gf";
        broken = true;
      }) {};
 
@@ -105849,6 +106964,7 @@ self: {
        description = "A type checker and runtime system of rCOS/g (impl. of ggts-FCS).";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "TC";
        broken = true;
      }) {};
 
@@ -105868,6 +106984,7 @@ self: {
        description = "Github Standard Labeler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gh-labeler";
        broken = true;
      }) {};
 
@@ -105888,6 +107005,7 @@ self: {
        testHaskellDepends = [ base hspec QuickCheck ];
        description = "Script helpers for interacting with GitHub";
        license = lib.licenses.bsd3;
+       mainProgram = "gh-pocket-knife";
      }) {};
 
   "ghc_9_2_2" = callPackage
@@ -106091,6 +107209,7 @@ self: {
        ];
        description = "Display GHC's core and assembly output in a pager";
        license = lib.licenses.bsd3;
+       mainProgram = "ghc-core";
      }) {};
 
   "ghc-core-html" = callPackage
@@ -106109,6 +107228,7 @@ self: {
        ];
        description = "Core to HTML display";
        license = lib.licenses.bsd3;
+       mainProgram = "ghc-core-html";
      }) {};
 
   "ghc-core-smallstep" = callPackage
@@ -106169,6 +107289,7 @@ self: {
        description = "A simple TUI using ghc-debug";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-heap-view";
      }) {};
 
   "ghc-debug-client" = callPackage
@@ -106292,6 +107413,7 @@ self: {
        description = "Dump GHC's parsed, renamed, and type checked ASTs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-dump-tree";
        broken = true;
      }) {};
 
@@ -106318,6 +107440,7 @@ self: {
        description = "Handy tools for working with ghc-dump dumps";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-dump";
      }) {};
 
   "ghc-dup" = callPackage
@@ -106350,6 +107473,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Library and tool for parsing .eventlog files from GHC";
        license = lib.licenses.bsd3;
+       mainProgram = "ghc-events";
      }) {};
 
   "ghc-events-analyze" = callPackage
@@ -106374,6 +107498,7 @@ self: {
        description = "Analyze and visualize event logs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-events-analyze";
        broken = true;
      }) {};
 
@@ -106399,6 +107524,7 @@ self: {
        description = "Library and tool for parsing .eventlog files from parallel GHC";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-events";
        broken = true;
      }) {};
 
@@ -106465,6 +107591,7 @@ self: {
        executableHaskellDepends = [ base directory filepath process ];
        description = "Graph performance of Haskell programs with different GC flags";
        license = lib.licenses.bsd3;
+       mainProgram = "ghc-gc-tune";
      }) {};
 
   "ghc-generic-instances" = callPackage
@@ -106813,6 +107940,7 @@ self: {
        ];
        description = "Accelerated version of ghc --make";
        license = lib.licenses.bsd3;
+       mainProgram = "ghc-make";
      }) {};
 
   "ghc-man-completion" = callPackage
@@ -106827,6 +107955,7 @@ self: {
        description = "Generate a bash completion from the GHC manpage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-man-completion";
        broken = true;
      }) {};
 
@@ -106914,6 +108043,7 @@ self: {
        description = "Utilities for extracting GHC options needed to compile a given Haskell target";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghcopts";
        broken = true;
      }) {bin-package-db = null;};
 
@@ -106941,6 +108071,7 @@ self: {
        description = "A parallel wrapper for 'ghc --make'";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-parmake";
        broken = true;
      }) {};
 
@@ -106986,6 +108117,7 @@ self: {
        description = "Simple utility to fix BROKEN package dependencies for cabal-install";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-pkg-autofix";
        broken = true;
      }) {};
 
@@ -107087,6 +108219,7 @@ self: {
        ];
        description = "Turn GHC `-pj` profiling output into FlameGraph format";
        license = lib.licenses.bsd3;
+       mainProgram = "ghc-prof-aeson-flamegraph";
      }) {};
 
   "ghc-prof-flamegraph" = callPackage
@@ -107103,6 +108236,7 @@ self: {
        ];
        description = "Generates flamegraphs from GHC .prof files.";
        license = lib.licenses.mit;
+       mainProgram = "ghc-prof-flamegraph";
      }) {};
 
   "ghc-proofs" = callPackage
@@ -107148,6 +108282,7 @@ self: {
        description = "Simplified GHC API";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-test";
      }) {};
 
   "ghc-simple" = callPackage
@@ -107273,6 +108408,7 @@ self: {
        description = "Utility for generating ctags and etags with GHC API";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-tags";
        broken = true;
      }) {};
 
@@ -107494,6 +108630,7 @@ self: {
        description = "Print minimal export lists";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghc-usage";
        broken = true;
      }) {};
 
@@ -107514,7 +108651,7 @@ self: {
        ];
        description = "Live visualization of data structures in GHCi";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ dalpd ];
+       maintainers = [ lib.maintainers.dalpd ];
      }) {};
 
   "ghcflags" = callPackage
@@ -107572,6 +108709,7 @@ self: {
        ];
        description = "ghci-dap is a GHCi having DAP interface";
        license = lib.licenses.bsd3;
+       mainProgram = "ghci-dap";
      }) {};
 
   "ghci-diagrams" = callPackage
@@ -107604,6 +108742,7 @@ self: {
        description = "An implementation of ghci using the Haskeline line-input library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghci-haskeline";
        broken = true;
      }) {};
 
@@ -107666,6 +108805,7 @@ self: {
        description = "Next generation GHCi";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghci-ng";
        broken = true;
      }) {};
 
@@ -107721,7 +108861,8 @@ self: {
        ];
        description = "GHCi based bare bones IDE";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "ghcid";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "ghcide" = callPackage
@@ -107795,7 +108936,7 @@ self: {
        benchmarkToolDepends = [ hp2pretty implicit-hie ];
        description = "The core of an IDE";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "ghcjs-ajax" = callPackage
@@ -107885,9 +109026,7 @@ self: {
        ];
        description = "GHCJS DOM Hello World, an example package";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "ghcjs-dom-jsaddle" = callPackage
@@ -108063,6 +109202,7 @@ self: {
        description = "Interactive Haskell interpreter in a browser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghclive";
        broken = true;
      }) {};
 
@@ -108083,6 +109223,7 @@ self: {
        description = "GHC .prof files viewer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghcprofview";
      }) {};
 
   "ghcup" = callPackage
@@ -108134,6 +109275,7 @@ self: {
        description = "ghc toolchain installer";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ghcup";
        broken = true;
      }) {};
 
@@ -108148,6 +109290,7 @@ self: {
        executableHaskellDepends = [ base zenc ];
        description = "Decode Z-encoded strings from GHC";
        license = lib.licenses.bsd3;
+       mainProgram = "ghczdecode";
      }) {};
 
   "ghost-buster" = callPackage
@@ -108184,6 +109327,7 @@ self: {
        description = "Trivial routines for inspecting git repositories";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ght";
      }) {};
 
   "gi-adwaita" = callPackage
@@ -108205,9 +109349,7 @@ self: {
        libraryPkgconfigDepends = [ libadwaita ];
        description = "Adwaita bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {inherit (pkgs) libadwaita;};
@@ -108389,9 +109531,7 @@ self: {
        libraryPkgconfigDepends = [ libdbusmenu ];
        description = "Dbusmenu bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) libdbusmenu;};
 
   "gi-dbusmenugtk3" = callPackage
@@ -108416,9 +109556,7 @@ self: {
        libraryPkgconfigDepends = [ gtk3 libdbusmenu-gtk3 ];
        description = "DbusmenuGtk bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) gtk3; inherit (pkgs) libdbusmenu-gtk3;};
 
   "gi-gdk" = callPackage
@@ -108555,9 +109693,7 @@ self: {
        libraryPkgconfigDepends = [ libgit2-glib ];
        description = "libgit2-glib bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) libgit2-glib;};
 
   "gi-gio" = callPackage
@@ -108999,9 +110135,7 @@ self: {
        libraryPkgconfigDepends = [ gtk-mac-integration-gtk3 ];
        description = "GtkosxApplication bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-       ];
+       badPlatforms = [ "x86_64-linux" "aarch64-linux" ];
      }) {inherit (pkgs) gtk-mac-integration-gtk3;};
 
   "gi-gtksheet" = callPackage
@@ -109118,9 +110252,7 @@ self: {
        libraryPkgconfigDepends = [ ibus ];
        description = "IBus bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) ibus;};
 
   "gi-javascriptcore" = callPackage
@@ -109140,9 +110272,7 @@ self: {
        libraryPkgconfigDepends = [ webkitgtk ];
        description = "JavaScriptCore bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) webkitgtk;};
 
   "gi-json" = callPackage
@@ -109206,9 +110336,7 @@ self: {
        libraryPkgconfigDepends = [ ostree ];
        description = "OSTree bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) ostree;};
 
   "gi-pango" = callPackage
@@ -109392,9 +110520,7 @@ self: {
        libraryPkgconfigDepends = [ vte_291 ];
        description = "Vte bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {vte_291 = pkgs.vte;};
 
   "gi-webkit" = callPackage
@@ -109442,9 +110568,7 @@ self: {
        libraryPkgconfigDepends = [ webkitgtk ];
        description = "WebKit2 bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) webkitgtk;};
 
   "gi-webkit2webextension" = callPackage
@@ -109469,9 +110593,7 @@ self: {
        libraryPkgconfigDepends = [ webkitgtk ];
        description = "WebKit2-WebExtension bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) webkitgtk;};
 
   "gi-wnck" = callPackage
@@ -109495,9 +110617,7 @@ self: {
        libraryPkgconfigDepends = [ libwnck ];
        description = "Wnck bindings";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) libwnck;};
 
   "gi-xlib" = callPackage
@@ -109537,6 +110657,7 @@ self: {
        description = "Fuzzy finder for cabal executables";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "giak";
        broken = true;
      }) {};
 
@@ -109551,6 +110672,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A compiler for operating on serialized trees";
        license = lib.licenses.bsd3;
+       mainProgram = "gibbon";
      }) {};
 
   "gimlh" = callPackage
@@ -109595,6 +110717,7 @@ self: {
        description = "An implementation of the Jinja2 template language in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ginger";
        broken = true;
      }) {};
 
@@ -109643,6 +110766,7 @@ self: {
        description = "Ginsu Gale Client";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ginsu";
        broken = true;
      }) {inherit (pkgs) openssl;};
 
@@ -109685,6 +110809,7 @@ self: {
        description = "Git Performance Dashboard";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gipeda";
      }) {};
 
   "giphy-api" = callPackage
@@ -109730,6 +110855,7 @@ self: {
        description = "A reliable command-line client for gist.github.com";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gist";
        broken = true;
      }) {};
 
@@ -109776,6 +110902,7 @@ self: {
        description = "Determine which Git repositories need actions to be taken";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-all";
        broken = true;
      }) {};
 
@@ -109849,7 +110976,8 @@ self: {
        enableSharedExecutables = false;
        description = "manage files with git, without checking their contents into git";
        license = lib.licenses.agpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "git-annex";
+       maintainers = [ lib.maintainers.peti ];
      }) {inherit (pkgs) bup; inherit (pkgs) curl; inherit (pkgs) git; 
          inherit (pkgs) gnupg; inherit (pkgs) lsof; inherit (pkgs) openssh; 
          inherit (pkgs) perl; inherit (pkgs) rsync; inherit (pkgs) wget; 
@@ -109873,6 +111001,7 @@ self: {
        ];
        description = "git checkout command-line tool";
        license = lib.licenses.bsd3;
+       mainProgram = "git-brunch";
      }) {};
 
   "git-checklist" = callPackage
@@ -109892,6 +111021,7 @@ self: {
        description = "Maintain per-branch checklists in Git";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-checklist";
        broken = true;
      }) {};
 
@@ -109935,6 +111065,7 @@ self: {
        description = "Haskell Git Helper Tool";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cuk";
        broken = true;
      }) {};
 
@@ -109996,6 +111127,7 @@ self: {
        description = "Custom git command for formatting code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-fmt";
      }) {};
 
   "git-freq" = callPackage
@@ -110018,6 +111150,7 @@ self: {
        ];
        description = "A Git subcommand to show total addition, deletion per file";
        license = lib.licenses.bsd3;
+       mainProgram = "git-freq";
      }) {};
 
   "git-gpush" = callPackage
@@ -110039,6 +111172,7 @@ self: {
        description = "More intelligent push-to-GitHub utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-gpush";
      }) {};
 
   "git-jump" = callPackage
@@ -110053,6 +111187,7 @@ self: {
        description = "Move a git branch";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-jump";
        broken = true;
      }) {};
 
@@ -110088,6 +111223,7 @@ self: {
        ];
        description = "Tool to help resolving git conflicts";
        license = lib.licenses.gpl2Only;
+       mainProgram = "git-mediate";
      }) {};
 
   "git-monitor" = callPackage
@@ -110112,6 +111248,7 @@ self: {
        description = "Passively snapshots working tree changes efficiently";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-monitor";
      }) {};
 
   "git-object" = callPackage
@@ -110161,6 +111298,7 @@ self: {
        description = "Git remote helper to store git objects on IPFS";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-remote-ipfs";
      }) {};
 
   "git-repair" = callPackage
@@ -110190,6 +111328,7 @@ self: {
        description = "repairs a damaged git repository";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-repair";
        broken = true;
      }) {};
 
@@ -110211,6 +111350,7 @@ self: {
        description = "A sanity checker for your git history";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "git-sanity";
      }) {};
 
   "git-vogue" = callPackage
@@ -110261,6 +111401,7 @@ self: {
        ];
        description = "More efficient replacement to the great git-radar";
        license = lib.licenses.bsd3;
+       mainProgram = "gitHUD";
      }) {};
 
   "gitcache" = callPackage
@@ -110278,6 +111419,7 @@ self: {
        ];
        description = "Simple git utility to use and manage clone cache";
        license = lib.licenses.bsd3;
+       mainProgram = "gitcache";
      }) {};
 
   "gitdo" = callPackage
@@ -110298,6 +111440,7 @@ self: {
        description = "Create Github issues out of TODO comments in code";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gitdo";
      }) {};
 
   "githash" = callPackage
@@ -110480,6 +111623,7 @@ self: {
        ];
        description = "Upload files to GitHub releases";
        license = lib.licenses.mit;
+       mainProgram = "github-release";
      }) {};
 
   "github-rest" = callPackage
@@ -110679,6 +111823,7 @@ self: {
        description = "Apply GitHub .gitignore templates to already existing repositories.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gitignore";
        broken = true;
      }) {};
 
@@ -110716,7 +111861,7 @@ self: {
        ];
        description = "Wiki using happstack, git or darcs, and pandoc";
        license = "GPL";
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "gitlab-api" = callPackage
@@ -111019,6 +112164,7 @@ self: {
        description = "CLI Giphy search tool with previews in iTerm 2";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "givegif";
      }) {};
 
   "gjk" = callPackage
@@ -111155,6 +112301,7 @@ self: {
        ];
        description = "A simply typed lambda calculus interpreter, written with GADTs";
        license = lib.licenses.bsd3;
+       mainProgram = "glam";
      }) {};
 
   "glapp" = callPackage
@@ -111172,6 +112319,7 @@ self: {
        description = "An OpenGL micro framework";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -111186,7 +112334,7 @@ self: {
        libraryHaskellDepends = [ base vector ];
        description = "Graphical Lasso algorithm";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "glaze" = callPackage
@@ -111283,6 +112431,7 @@ self: {
        description = "Examples of using glazier-react";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "glazier-react-todo";
      }) {};
 
   "glazier-react-widget" = callPackage
@@ -111328,6 +112477,7 @@ self: {
        description = "Tiny cli to fetch PR info from gitlab";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gli";
        broken = true;
      }) {};
 
@@ -111392,6 +112542,7 @@ self: {
        executableHaskellDepends = [ base ppm split ];
        description = "A simple ray tracer in an early stage of development";
        license = lib.licenses.bsd3;
+       mainProgram = "glintcollider";
      }) {};
 
   "glirc" = callPackage
@@ -111421,7 +112572,8 @@ self: {
        testHaskellDepends = [ base HUnit ];
        description = "Console IRC client";
        license = lib.licenses.isc;
-       maintainers = with lib.maintainers; [ kiwi ];
+       mainProgram = "glirc";
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "gll" = callPackage
@@ -111545,6 +112697,7 @@ self: {
        description = "ray tracer";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Glome";
      }) {};
 
   "gloss" = callPackage
@@ -111669,6 +112822,7 @@ self: {
        description = "Export Gloss pictures to png, bmp, tga, tiff, gif and juicy-pixels-image";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gloss-export-exe";
        broken = true;
      }) {};
 
@@ -111704,6 +112858,7 @@ self: {
        ];
        description = "Load any image supported by Juicy.Pixels in your gloss application";
        license = lib.licenses.bsd3;
+       mainProgram = "gloss-juicy-viewer";
      }) {};
 
   "gloss-raster" = callPackage
@@ -111814,6 +112969,7 @@ self: {
        ];
        description = "Comprehensive GLPK linear programming bindings";
        license = lib.licenses.bsd3;
+       mainProgram = "glpk-hs-example";
      }) {inherit (pkgs) glpk;};
 
   "glsl" = callPackage
@@ -111840,6 +112996,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Parser and optimizer for a small subset of GLSL";
        license = lib.licenses.bsd3;
+       mainProgram = "optshader";
      }) {};
 
   "gltf-codec" = callPackage
@@ -111890,6 +113047,7 @@ self: {
        description = "Make better services";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "glue-example";
        broken = true;
      }) {};
 
@@ -111983,6 +113141,7 @@ self: {
        ];
        description = "Make better services and clients";
        license = lib.licenses.bsd3;
+       mainProgram = "glue-example";
      }) {};
 
   "gluturtle" = callPackage
@@ -112051,6 +113210,7 @@ self: {
        description = "Mandelbrot Set explorer using GTK";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gmndl";
      }) {};
 
   "gmpint" = callPackage
@@ -112079,6 +113239,7 @@ self: {
        description = "Randomly set a picture as the GNOME desktop background";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gnome-desktop";
      }) {};
 
   "gnome-keyring" = callPackage
@@ -112095,9 +113256,7 @@ self: {
        libraryToolDepends = [ c2hs ];
        description = "Bindings for libgnome-keyring";
        license = lib.licenses.gpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs.gnome) gnome-keyring; 
          inherit (pkgs) libgnome-keyring;};
 
@@ -112391,6 +113550,7 @@ self: {
        description = "A monadic take on a 2,500-year-old board game - GTK+ UI";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "goatee-gtk";
      }) {};
 
   "gochan" = callPackage
@@ -112456,6 +113616,7 @@ self: {
        executableHaskellDepends = [ base criterion megaparsec text ];
        description = "Megaparsec parser for Godot `tscn` and `gdns` files";
        license = lib.licenses.bsd3;
+       mainProgram = "bench";
      }) {};
 
   "gofer-prelude" = callPackage
@@ -114751,6 +115912,7 @@ self: {
        ];
        description = "A lightweight golden test runner";
        license = lib.licenses.asl20;
+       mainProgram = "goldplate";
      }) {};
 
   "gooey" = callPackage
@@ -114841,6 +116003,7 @@ self: {
        description = "Google HTML5 Slide generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "google-html5-slide";
        broken = true;
      }) {};
 
@@ -115099,7 +116262,8 @@ self: {
        ];
        description = "proxy gopher over http";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       mainProgram = "gopher-proxy";
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "gopherbot" = callPackage
@@ -115118,6 +116282,7 @@ self: {
        description = "Spidering robot to download files from Gopherspace";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gopherbot";
        broken = true;
      }) {};
 
@@ -115392,6 +116557,7 @@ self: {
        ];
        description = "A command line utility for practicing typing";
        license = lib.licenses.bsd3;
+       mainProgram = "gotta-go-fast";
      }) {};
 
   "gotyno-hs" = callPackage
@@ -115416,6 +116582,7 @@ self: {
        ];
        description = "A type definition compiler supporting multiple output languages";
        license = lib.licenses.bsd2;
+       mainProgram = "gotyno-hs";
      }) {};
 
   "gpah" = callPackage
@@ -115437,6 +116604,7 @@ self: {
        description = "Generic Programming Use in Hackage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gpah";
        broken = true;
      }) {};
 
@@ -115471,6 +116639,7 @@ self: {
        ];
        description = "Haskell GPIO interface, designed specifically for the RaspberryPi";
        license = lib.licenses.bsd3;
+       mainProgram = "gpio";
      }) {};
 
   "gpmf" = callPackage
@@ -115500,6 +116669,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gpmf";
        broken = true;
      }) {};
 
@@ -115554,6 +116724,7 @@ self: {
        description = "GPS to HTML Summary Report";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gps2htmlReport";
      }) {};
 
   "gpx-conduit" = callPackage
@@ -115654,6 +116825,7 @@ self: {
        ];
        description = "Configure grafana dashboards from Dhall expression";
        license = lib.licenses.asl20;
+       mainProgram = "grafdhall";
      }) {};
 
   "graflog" = callPackage
@@ -115897,6 +117069,7 @@ self: {
        ];
        description = "Functions for generating structured or random FGL graphs";
        license = lib.licenses.asl20;
+       mainProgram = "TestGen";
      }) {};
 
   "graph-matchings" = callPackage
@@ -115945,6 +117118,7 @@ self: {
        description = "Interactive graph rewriting system implementing various well-known combinators";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cl";
      }) {};
 
   "graph-rewriting-gl" = callPackage
@@ -115984,6 +117158,7 @@ self: {
        description = "Lambdascope, an optimal evaluator of the lambda calculus, as an interactive graph-rewriting system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdascope";
      }) {};
 
   "graph-rewriting-layout" = callPackage
@@ -116058,6 +117233,7 @@ self: {
        description = "Evaluate first-order applicative term rewrite systems interactively using graph reduction";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trs";
      }) {};
 
   "graph-rewriting-ww" = callPackage
@@ -116079,6 +117255,7 @@ self: {
        description = "Evaluator of the lambda-calculus in an interactive graph rewriting system with explicit sharing";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ww";
      }) {};
 
   "graph-serialize" = callPackage
@@ -116129,6 +117306,7 @@ self: {
        ];
        description = "Converts a graph-trace log into a DOT file for use with Graphviz";
        license = lib.licenses.mit;
+       mainProgram = "graph-trace-dot";
      }) {};
 
   "graph-trace-viz" = callPackage
@@ -116146,6 +117324,7 @@ self: {
        ];
        description = "Converts a graph-trace log into an HTML document";
        license = lib.licenses.mit;
+       mainProgram = "graph-trace-viz";
      }) {};
 
   "graph-utils" = callPackage
@@ -116299,6 +117478,7 @@ self: {
        description = "Tools for creating graphical UIs, based on wxHaskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cvexample";
      }) {};
 
   "graphite" = callPackage
@@ -116337,6 +117517,7 @@ self: {
        ];
        description = "Present the module dependencies of a program as a \"dot\" graph";
        license = lib.licenses.bsd3;
+       mainProgram = "graphmod";
      }) {};
 
   "graphmod-plugin" = callPackage
@@ -116356,6 +117537,7 @@ self: {
        description = "A reimplementation of graphmod as a source plugin";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "graphmod-plugin";
        broken = true;
      }) {};
 
@@ -116444,6 +117626,7 @@ self: {
        description = "A client for Haskell programs to query a GraphQL API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "graphql-codegen";
      }) {};
 
   "graphql-spice" = callPackage
@@ -116541,6 +117724,7 @@ self: {
        description = "A simple tool to illustrate dependencies between Haskell types";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "graphtype";
      }) {};
 
   "graphula" = callPackage
@@ -116666,6 +117850,7 @@ self: {
        description = "GRASP implementation for the AMMM project";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "grasp-exe";
        broken = true;
      }) {};
 
@@ -116751,6 +117936,7 @@ self: {
        description = "GreenCard, a foreign function pre-processor for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "greencard";
        broken = true;
      }) {};
 
@@ -116788,6 +117974,7 @@ self: {
        ];
        description = "Simple clipboard manager to be integrated with rofi";
        license = lib.licenses.bsd3;
+       mainProgram = "greenclip";
      }) {inherit (pkgs.xorg) libXScrnSaver; inherit (pkgs.xorg) libXau; 
          xcb = null; xdmcp = null; inherit (pkgs) xlibsWrapper;};
 
@@ -116830,6 +118017,7 @@ self: {
        description = "Graph database client for TinkerPop3 Gremlin Server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gremlin-haskell-examples";
        broken = true;
      }) {};
 
@@ -116977,9 +118165,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Game engine for Prototyping on a Grid";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "gridbounds" = callPackage
@@ -117089,6 +118275,7 @@ self: {
        description = "grm grammar converter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "grm";
        broken = true;
      }) {};
 
@@ -117104,6 +118291,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Pretty printing for well-behaved Show instances";
        license = lib.licenses.bsd3;
+       mainProgram = "groom";
      }) {};
 
   "groot" = callPackage
@@ -117154,6 +118342,7 @@ self: {
        description = "Command line utility to manage AWS ECS resources";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "groot";
      }) {};
 
   "gross" = callPackage
@@ -117169,6 +118358,7 @@ self: {
        description = "A spoof on gloss for terminal animation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "groundhog" = callPackage
@@ -117231,6 +118421,7 @@ self: {
        description = "Type-safe datatype-database mapping library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "groundhog_inspector";
      }) {};
 
   "groundhog-mysql" = callPackage
@@ -117323,6 +118514,7 @@ self: {
        ];
        description = "Shell command for grouping files by dates into folders";
        license = lib.licenses.bsd3;
+       mainProgram = "group-by-date";
      }) {};
 
   "group-theory" = callPackage
@@ -117584,6 +118776,7 @@ self: {
        description = "fractal explorer GUI using the ruff library";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gruff";
      }) {};
 
   "gruff-examples" = callPackage
@@ -117649,6 +118842,7 @@ self: {
        description = "scrapes google scholar, provides RSS feed";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gscholar-rss";
      }) {};
 
   "gsl-random" = callPackage
@@ -117693,6 +118887,7 @@ self: {
        description = "A visual generic menu";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gsmenu";
      }) {};
 
   "gssapi" = callPackage
@@ -117780,6 +118975,7 @@ self: {
        ];
        description = "Console and GUI interface for Google Translate service";
        license = "GPL";
+       mainProgram = "gtc";
      }) {};
 
   "gtfs" = callPackage
@@ -117890,7 +119086,9 @@ self: {
        libraryPkgconfigDepends = [ gtk-mac-integration-gtk2 ];
        description = "Bindings for the Gtk/OS X integration library";
        license = lib.licenses.lgpl21Only;
-       platforms = [ "aarch64-darwin" "x86_64-darwin" ];
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux"
+       ];
      }) {inherit (pkgs) gtk-mac-integration-gtk2;};
 
   "gtk-serialized-event" = callPackage
@@ -117950,9 +119148,8 @@ self: {
        ];
        description = "A standalone StatusNotifierItem/AppIndicator tray";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "gtk-sni-tray-standalone";
      }) {inherit (pkgs) gtk3;};
 
   "gtk-strut" = callPackage
@@ -118140,6 +119337,7 @@ self: {
        description = "Gtk2Hs Hello World, an example package";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gtk2hs-hello";
        broken = true;
      }) {};
 
@@ -118207,9 +119405,7 @@ self: {
        libraryPkgconfigDepends = [ gtk-mac-integration-gtk3 ];
        description = "Bindings for the Gtk/OS X integration library";
        license = lib.licenses.lgpl21Only;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-       ];
+       badPlatforms = [ "x86_64-linux" "aarch64-linux" ];
      }) {inherit (pkgs) gtk-mac-integration-gtk3;};
 
   "gtkglext" = callPackage
@@ -118376,6 +119572,7 @@ self: {
        description = "graphical untyped lambda calculus interactive interpreter";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gulcii";
        broken = true;
      }) {};
 
@@ -118402,6 +119599,7 @@ self: {
        description = "ghcWithPackages cmdline util";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gw";
        broken = true;
      }) {};
 
@@ -118417,6 +119615,7 @@ self: {
        description = "A binary version of GiveYouAHead";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gyah";
        broken = true;
      }) {};
 
@@ -118440,6 +119639,7 @@ self: {
        description = "REST client to the gym-http-api project";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -118465,6 +119665,7 @@ self: {
        description = "Haskell library for retrieving data from various booru image sites";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "h-booru";
        broken = true;
      }) {};
 
@@ -118515,6 +119716,7 @@ self: {
        description = "Reversi game in haskell/blank-canvas";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "h-reversi";
        broken = true;
      }) {};
 
@@ -118634,6 +119836,7 @@ self: {
        testHaskellDepends = [ base hashable ];
        description = "Conceptual modelling support for Haskell";
        license = lib.licenses.mit;
+       mainProgram = "hCM";
      }) {};
 
   "hCsound" = callPackage
@@ -118720,6 +119923,7 @@ self: {
        description = "A library for analyzing and transforming LLVM (3.5) assembly codes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "llvm-test";
        broken = true;
      }) {hooplext = null;};
 
@@ -118755,6 +119959,7 @@ self: {
        description = "The tool to transform the OFF to other image format";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hOff-display-gl";
      }) {};
 
   "hOff-parser" = callPackage
@@ -118920,6 +120125,7 @@ self: {
        ];
        description = "Interface to Amazon's Simple Storage Service (S3)";
        license = lib.licenses.bsd3;
+       mainProgram = "hs3";
      }) {};
 
   "hScraper" = callPackage
@@ -119000,6 +120206,7 @@ self: {
        description = "Optimal variable selection in chain graphical model";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hVOIDP";
        broken = true;
      }) {inherit (pkgs) blas; inherit (pkgs) liblapack;};
 
@@ -119018,6 +120225,7 @@ self: {
        ];
        description = "A Gtk mixer GUI application for FreeBSD";
        license = lib.licenses.bsd3;
+       mainProgram = "hxmixer";
      }) {};
 
   "haar" = callPackage
@@ -119061,6 +120269,7 @@ self: {
        description = "Haskell message bot framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hello-bot";
      }) {};
 
   "hable" = callPackage
@@ -119097,6 +120306,7 @@ self: {
        description = "A minimalist static blog generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hablo";
      }) {};
 
   "hablog" = callPackage
@@ -119120,6 +120330,7 @@ self: {
        description = "A blog system";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hablog";
      }) {};
 
   "hacanon-light" = callPackage
@@ -119589,6 +120800,7 @@ self: {
        doHaddock = false;
        description = "CLI tool for Hackage";
        license = lib.licenses.gpl3Plus;
+       mainProgram = "hackage-cli";
      }) {};
 
   "hackage-db" = callPackage
@@ -119607,7 +120819,7 @@ self: {
        ];
        description = "Access cabal-install's Hackage database via Data.Map";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hackage-diff" = callPackage
@@ -119628,6 +120840,7 @@ self: {
        description = "Compare the public API of different versions of a Hackage library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage-diff";
        broken = true;
      }) {};
 
@@ -119659,6 +120872,7 @@ self: {
        description = "Simple mirroring utility for Hackage";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage-mirror";
      }) {};
 
   "hackage-plot" = callPackage
@@ -119677,6 +120891,7 @@ self: {
        ];
        description = "Generate cumulative graphs of hackage uploads";
        license = lib.licenses.bsd3;
+       mainProgram = "hackage-plot";
      }) {};
 
   "hackage-processing" = callPackage
@@ -119691,6 +120906,7 @@ self: {
        description = "Process 00-index.tar.gz from Hackage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage-find-contribution";
        broken = true;
      }) {};
 
@@ -119716,6 +120932,7 @@ self: {
        description = "Provide a proxy for Hackage which modifies responses in some way. (deprecated)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage-proxy";
        broken = true;
      }) {};
 
@@ -119740,6 +120957,7 @@ self: {
        description = "Manage secure file-based package repositories";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage-repo-tool";
        broken = true;
      }) {};
 
@@ -119845,6 +121063,7 @@ self: {
        ];
        description = "Generate sparkline graphs of hackage statistics";
        license = lib.licenses.bsd3;
+       mainProgram = "hackagesparks";
      }) {};
 
   "hackage-whatsnew" = callPackage
@@ -119864,6 +121083,7 @@ self: {
        description = "Check for differences between working directory and hackage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage-whatsnew";
        broken = true;
      }) {};
 
@@ -119879,6 +121099,7 @@ self: {
        description = "Convert Hackage RSS feeds to wiki format for publishing on Haskell.org";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage2hwn";
        broken = true;
      }) {};
 
@@ -119894,6 +121115,7 @@ self: {
        description = "Send new Hackage releases to Twitter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackage2twitter";
      }) {};
 
   "hackager" = callPackage
@@ -119912,6 +121134,7 @@ self: {
        description = "Hackage testing tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackager";
        broken = true;
      }) {};
 
@@ -119938,6 +121161,7 @@ self: {
        description = "API for Hacker News";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackernews-example";
        broken = true;
      }) {};
 
@@ -119955,6 +121179,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "\"Hack\" like a programmer in movies and games!";
        license = lib.licenses.mit;
+       mainProgram = "hackertyper";
      }) {};
 
   "hackmanager" = callPackage
@@ -119976,6 +121201,7 @@ self: {
        description = "Generate useful files for Haskell projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hackmanager";
      }) {};
 
   "hackport" = callPackage
@@ -120011,6 +121237,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Hackage and Portage integration tool";
        license = lib.licenses.gpl3Plus;
+       mainProgram = "hackport";
      }) {};
 
   "hactor" = callPackage
@@ -120059,6 +121286,7 @@ self: {
        description = "A documentation-generation tool for Haskell libraries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haddock";
      }) {};
 
   "haddock" = callPackage
@@ -120076,6 +121304,7 @@ self: {
        description = "A documentation-generation tool for Haskell libraries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haddock";
      }) {};
 
   "haddock-api_2_23_1" = callPackage
@@ -120162,6 +121391,7 @@ self: {
        description = "A documentation-generation tool for Haskell libraries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haddock";
        broken = true;
      }) {};
 
@@ -120247,6 +121477,7 @@ self: {
        description = "Generate docset of Dash by Haddock haskell documentation tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haddocset";
      }) {};
 
   "hadolint" = callPackage
@@ -120281,6 +121512,7 @@ self: {
        ];
        description = "Dockerfile Linter JavaScript API";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hadolint";
      }) {};
 
   "hadoop-formats" = callPackage
@@ -120364,6 +121596,7 @@ self: {
        description = "Fast command line tools for working with Hadoop";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hh";
      }) {};
 
   "haeredes" = callPackage
@@ -120382,6 +121615,7 @@ self: {
        testHaskellDepends = [ base doctest filemanip process ];
        description = "Confirm delegation of NS and MX records";
        license = lib.licenses.agpl3Only;
+       mainProgram = "haeredes";
      }) {};
 
   "hafar" = callPackage
@@ -120423,6 +121657,7 @@ self: {
        description = "A static site generator with blogging/comments support";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haggis";
      }) {};
 
   "haggle" = callPackage
@@ -120459,6 +121694,7 @@ self: {
        executableHaskellDepends = [ base containers time ];
        description = "A simple library for creating animated ascii art on ANSI terminals";
        license = lib.licenses.bsd3;
+       mainProgram = "rotating-lambda";
      }) {};
 
   "hahp" = callPackage
@@ -120477,6 +121713,7 @@ self: {
        description = "Analytic Hierarchy Process";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hahp-example";
        broken = true;
      }) {};
 
@@ -120523,6 +121760,7 @@ self: {
        description = "A service for pull-based continuous deployment based on hydra";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hail";
        broken = true;
      }) {};
 
@@ -120560,6 +121798,7 @@ self: {
        description = "A program to send emails throught the Mailgun api";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hailgun-send";
      }) {};
 
   "hailgun-simple" = callPackage
@@ -120618,6 +121857,7 @@ self: {
        description = "Multi-app web platform framework";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hails";
        broken = true;
      }) {quickcheck-lio-instances = null;};
 
@@ -120638,6 +121878,7 @@ self: {
        description = "Dynamic launcher of Hails applications";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hails";
      }) {};
 
   "hairy" = callPackage
@@ -120667,6 +121908,7 @@ self: {
        description = "A JSON REST API";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hairy";
        broken = true;
      }) {};
 
@@ -120715,6 +121957,7 @@ self: {
        executableHaskellDepends = [ directory process regexpr yjtools ];
        description = "make tool. ruby : rake = haskell : hake";
        license = "GPL";
+       mainProgram = "hake";
      }) {};
 
   "hakismet" = callPackage
@@ -120743,6 +121986,7 @@ self: {
        description = "Minimal akka-inspired actor library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hakka-example";
        broken = true;
      }) {};
 
@@ -120802,7 +122046,8 @@ self: {
        testToolDepends = [ util-linux ];
        description = "A static website compiler library";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ erictapen ];
+       mainProgram = "hakyll-init";
+       maintainers = [ lib.maintainers.erictapen ];
      }) {inherit (pkgs) util-linux;};
 
   "hakyll-R" = callPackage
@@ -120882,6 +122127,7 @@ self: {
        description = "Extra modules for the hakyll website compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hakyll-contrib";
        broken = true;
      }) {};
 
@@ -120920,6 +122166,7 @@ self: {
        description = "Compile Elm code for inclusion in Hakyll static site";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hakyll-contrib-elm-example";
        broken = true;
      }) {};
 
@@ -120932,7 +122179,7 @@ self: {
        libraryHaskellDepends = [ base hakyll hyphenation split tagsoup ];
        description = "automatic hyphenation for Hakyll";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ erictapen ];
+       maintainers = [ lib.maintainers.erictapen ];
      }) {};
 
   "hakyll-contrib-i18n" = callPackage
@@ -120958,6 +122205,7 @@ self: {
        description = "A Hakyll library for internationalization";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haki18nll";
        broken = true;
      }) {};
 
@@ -121010,6 +122258,7 @@ self: {
        ];
        description = "Convert from other blog engines to Hakyll";
        license = lib.licenses.bsd3;
+       mainProgram = "hakyll-convert";
      }) {};
 
   "hakyll-dhall" = callPackage
@@ -121031,6 +122280,7 @@ self: {
        description = "Dhall compiler for Hakyll";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hakyll-dhall-test-app";
        broken = true;
      }) {};
 
@@ -121077,6 +122327,7 @@ self: {
        executableHaskellDepends = [ base hakyll ];
        testHaskellDepends = [ base ];
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "hakyll-filestore" = callPackage
@@ -121322,6 +122573,7 @@ self: {
        description = "A tool to generate missing import statements for Haskell modules";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "halberd";
      }) {};
 
   "half" = callPackage
@@ -121426,6 +122678,7 @@ self: {
        description = "A live recompiler";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "halive";
        broken = true;
      }) {};
 
@@ -121485,6 +122738,7 @@ self: {
        description = "GTK application for playing Halma";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "halma-gui";
      }) {};
 
   "halma-telegram-bot" = callPackage
@@ -121510,6 +122764,7 @@ self: {
        description = "Telegram bot for playing Halma";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "halma-telegram-bot";
      }) {};
 
   "haltavista" = callPackage
@@ -121523,6 +122778,7 @@ self: {
        executableHaskellDepends = [ base hint process ];
        description = "looks for functions given a set of example input/outputs";
        license = lib.licenses.gpl2Only;
+       mainProgram = "haltavista";
      }) {};
 
   "halves" = callPackage
@@ -121557,6 +122813,7 @@ self: {
        description = "A simple, static HaLVM web server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "halvm-web";
        broken = true;
      }) {HALVMCore = null; XenDevice = null;};
 
@@ -121584,6 +122841,7 @@ self: {
        testHaskellDepends = [ base bytestring ];
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hamlog";
      }) {};
 
   "hamid" = callPackage
@@ -121620,6 +122878,7 @@ self: {
        ];
        description = "Physics on generalized coordinate systems using Hamiltonian Mechanics and AD";
        license = lib.licenses.bsd3;
+       mainProgram = "hamilton-examples";
      }) {};
 
   "hamlet" = callPackage
@@ -121651,6 +122910,7 @@ self: {
        description = "Haskell macro preprocessor";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hampp";
        broken = true;
      }) {};
 
@@ -121676,6 +122936,7 @@ self: {
        description = "Interpreter for SQL-structure definitions in YAML (YamSql)";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hamsql";
        broken = true;
      }) {};
 
@@ -121713,6 +122974,7 @@ self: {
        ];
        description = "Intel AMT serial-over-lan (SOL) client";
        license = lib.licenses.bsd3;
+       mainProgram = "hamtsolo";
      }) {};
 
   "hamusic" = callPackage
@@ -121801,6 +123063,7 @@ self: {
        description = "Library and command-line utility for accessing Google services and APIs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgdata";
        broken = true;
      }) {};
 
@@ -121895,6 +123158,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "API Client for the handwriting.io API.";
        license = lib.licenses.bsd3;
+       mainProgram = "handwriting";
      }) {};
 
   "hangman" = callPackage
@@ -121909,6 +123173,7 @@ self: {
        executableHaskellDepends = [ base mtl random utility-ht ];
        description = "Hangman implementation in Haskell written in two hours";
        license = lib.licenses.mit;
+       mainProgram = "hangman";
      }) {};
 
   "hannahci" = callPackage
@@ -121931,6 +123196,7 @@ self: {
        description = "Simple Continuous Integration/Deployment System";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hannahci";
        broken = true;
      }) {};
 
@@ -122014,6 +123280,7 @@ self: {
        description = "Korean spell checker";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hanspell";
        broken = true;
      }) {};
 
@@ -122065,6 +123332,7 @@ self: {
        description = "A deployment library for Haskell applications";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hap";
        broken = true;
      }) {};
 
@@ -122157,6 +123425,7 @@ self: {
        description = "A small program for counting the comments in haskell source";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "happraise";
        broken = true;
      }) {};
 
@@ -122214,6 +123483,7 @@ self: {
        description = "A Happstack Tutorial that is its own web 2.0-type demo.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "happs-tutorial";
      }) {};
 
   "happstack" = callPackage
@@ -122790,6 +124060,7 @@ self: {
        description = "Happy is a parser generator for Haskell";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "happy";
      }) {};
 
   "happy" = callPackage
@@ -122807,6 +124078,7 @@ self: {
        testHaskellDepends = [ base process ];
        description = "Happy is a parser generator for Haskell";
        license = lib.licenses.bsd2;
+       mainProgram = "happy";
      }) {};
 
   "happy-dot" = callPackage
@@ -123034,6 +124306,7 @@ self: {
        executableHaskellDepends = [ base bytestring parallel ];
        description = "Pure-functional Harfbuzz language bindings";
        license = lib.licenses.mit;
+       mainProgram = "shape-text";
      }) {inherit (pkgs) harfbuzz;};
 
   "harg" = callPackage
@@ -123071,6 +124344,7 @@ self: {
        description = "A Gentoo package query tool";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hark";
      }) {};
 
   "harmony" = callPackage
@@ -123097,6 +124371,7 @@ self: {
        description = "A web service specification compiler that generates implementation and tests";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "harmony";
      }) {};
 
   "haroonga" = callPackage
@@ -123134,6 +124409,7 @@ self: {
        description = "Yet another Groonga http server";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haroonga-httpd";
      }) {};
 
   "harp" = callPackage
@@ -123279,6 +124555,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "Extras for hasbolt library";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "hascal" = callPackage
@@ -123293,6 +124570,7 @@ self: {
        executableHaskellDepends = [ base data-default split ];
        description = "tiny calculator library and command-line program";
        license = "GPL";
+       mainProgram = "hascal";
      }) {};
 
   "hascar" = callPackage
@@ -123321,6 +124599,7 @@ self: {
        description = "Decompress SAPCAR archives";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hascar";
        broken = true;
      }) {};
 
@@ -123358,6 +124637,7 @@ self: {
        description = "A TUI for reviewing notes using 'flashcards' written with markdown-like syntax";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hascard";
        broken = true;
      }) {};
 
@@ -123401,6 +124681,7 @@ self: {
        description = "Hascat Web Server";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hascat";
      }) {};
 
   "hascat-lib" = callPackage
@@ -123441,6 +124722,7 @@ self: {
        description = "Hascat Installation helper";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hascat-setup";
      }) {};
 
   "hascat-system" = callPackage
@@ -123744,6 +125026,7 @@ self: {
        ];
        description = "A pure haskell library implements several hash algorithms";
        license = lib.licenses.mit;
+       mainProgram = "hashing-exe";
      }) {};
 
   "hashmap" = callPackage
@@ -123793,6 +125076,7 @@ self: {
        ];
        description = "Rename every file in a directory with his SHA1 hash";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hashrename";
      }) {};
 
   "hashring" = callPackage
@@ -123829,6 +125113,7 @@ self: {
        ];
        description = "Benchmark of hash table implementations";
        license = lib.licenses.bsd3;
+       mainProgram = "hashtable-benchmark";
      }) {};
 
   "hashtables" = callPackage
@@ -123964,6 +125249,7 @@ self: {
        description = "Utility to generate bindings for BlackBerry Cascades";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskades";
      }) {};
 
   "haskakafka" = callPackage
@@ -124008,6 +125294,7 @@ self: {
        description = "A breakout game written in Yampa using SDL";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskanoid";
        broken = true;
      }) {};
 
@@ -124027,6 +125314,7 @@ self: {
        description = "A dialect of haskell with order of execution based on dependency resolution";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskarrowPrecompiler";
        broken = true;
      }) {};
 
@@ -124075,6 +125363,7 @@ self: {
        description = "Computes and audits file hashes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskdeep";
      }) {};
 
   "haskdogs" = callPackage
@@ -124093,6 +125382,7 @@ self: {
        ];
        description = "Generate tags file for Haskell project and its nearest deps";
        license = lib.licenses.bsd3;
+       mainProgram = "haskdogs";
      }) {};
 
   "haskeem" = callPackage
@@ -124112,6 +125402,7 @@ self: {
        description = "A small scheme interpreter";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskeem";
      }) {};
 
   "haskeline_0_8_2" = callPackage
@@ -124139,6 +125430,7 @@ self: {
        description = "A command-line interface for user input, written in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskeline-examples-Test";
      }) {};
 
   "haskeline-class" = callPackage
@@ -124203,6 +125495,7 @@ self: {
        description = "Haskell Application BlockChain Interface (ABCI) Server Library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-abci-counter";
        broken = true;
      }) {};
 
@@ -124338,6 +125631,7 @@ self: {
        description = "Transform text from the command-line using Haskell expressions";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hawk";
        broken = true;
      }) {};
 
@@ -124378,6 +125672,7 @@ self: {
        description = "Complete BitMEX Client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "haskell-bitmex-rest" = callPackage
@@ -124427,6 +125722,7 @@ self: {
        description = "BrainFuck interpreter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "brainfuck";
        broken = true;
      }) {};
 
@@ -124462,7 +125758,8 @@ self: {
        doHaddock = false;
        description = "Cabal package script generator for Travis-CI";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       mainProgram = "haskell-ci";
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "haskell-cnc" = callPackage
@@ -124484,6 +125781,7 @@ self: {
        description = "Library for parallel programming in the Intel Concurrent Collections paradigm";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-cnc-runTests";
        broken = true;
      }) {};
 
@@ -124518,6 +125816,7 @@ self: {
        description = "compress files";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-compress";
        broken = true;
      }) {};
 
@@ -124595,6 +125894,7 @@ self: {
        ];
        description = "Haskell Debug Adapter";
        license = lib.licenses.bsd3;
+       mainProgram = "haskell-debug-adapter";
      }) {};
 
   "haskell-disque" = callPackage
@@ -124636,6 +125936,7 @@ self: {
        description = "A program to find and display the docs and type of a name";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-docs";
      }) {};
 
   "haskell-eigen-util" = callPackage
@@ -124702,6 +126003,7 @@ self: {
        description = "Haskell source code formatter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-formatter";
        broken = true;
      }) {};
 
@@ -124730,6 +126032,7 @@ self: {
        description = "A Haskell ftp server with configurable backend";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "simple-ftp-server";
      }) {};
 
   "haskell-generate" = callPackage
@@ -124769,6 +126072,7 @@ self: {
        ];
        description = "GetText runtime library implementation in pure Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "hgettext";
      }) {};
 
   "haskell-gi" = callPackage
@@ -124828,6 +126132,7 @@ self: {
        description = "Go and Checkers game in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-go-checkers";
        broken = true;
      }) {};
 
@@ -124904,6 +126209,7 @@ self: {
        description = "create haskell import graph for graphviz";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-import-graph";
        broken = true;
      }) {};
 
@@ -125000,7 +126306,7 @@ self: {
        testToolDepends = [ ghcide ];
        description = "LSP server for GHC";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "haskell-lexer" = callPackage
@@ -125066,6 +126372,7 @@ self: {
        description = "A haskell package to build your own Language Server client";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-client";
      }) {};
 
   "haskell-lsp-types" = callPackage
@@ -125116,6 +126423,7 @@ self: {
        description = "Machine learning in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "iris";
        broken = true;
      }) {};
 
@@ -125257,6 +126565,7 @@ self: {
        description = "Manage nix overrides for haskell packages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-overridez";
        broken = true;
      }) {};
 
@@ -125298,6 +126607,7 @@ self: {
        description = "Tool for presenting PDF-based presentations";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpdfp";
      }) {};
 
   "haskell-platform-test" = callPackage
@@ -125327,6 +126637,7 @@ self: {
        description = "A test system for the Haskell Platform environment";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-platform-test";
      }) {};
 
   "haskell-player" = callPackage
@@ -125349,6 +126660,7 @@ self: {
        description = "A terminal music player based on afplay";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-player";
        broken = true;
      }) {};
 
@@ -125498,6 +126810,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Let the Haskell logo talk to your users!";
        license = lib.licenses.bsd3;
+       mainProgram = "haskell-say-exe";
      }) {};
 
   "haskell-snake" = callPackage
@@ -125518,10 +126831,9 @@ self: {
        ];
        description = "Snake game implemetation in Haskell using SDL2";
        license = lib.licenses.gpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-snake";
        broken = true;
      }) {};
 
@@ -125742,6 +127054,7 @@ self: {
        description = "haskell-stack-trace-plugin";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -125991,6 +127304,7 @@ self: {
        description = "Background process for Haskell-tools that editors can connect to";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ht-daemon";
      }) {};
 
   "haskell-tools-debug" = callPackage
@@ -126016,6 +127330,7 @@ self: {
        description = "Debugging Tools for Haskell-tools";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ht-debug";
      }) {};
 
   "haskell-tools-demo" = callPackage
@@ -126047,6 +127362,7 @@ self: {
        description = "A web-based demo for Haskell-tools Refactor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ht-demo";
      }) {};
 
   "haskell-tools-experimental-refactorings" = callPackage
@@ -126181,6 +127497,7 @@ self: {
        description = "A Haskell Tor Node";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-tor";
      }) {};
 
   "haskell-type-exts" = callPackage
@@ -126239,6 +127556,7 @@ self: {
        ];
        description = "Rebuild Haskell dependencies in Gentoo";
        license = "GPL";
+       mainProgram = "haskell-updater";
      }) {};
 
   "haskell-xmpp" = callPackage
@@ -126265,6 +127583,7 @@ self: {
        description = "Haskell XMPP (eXtensible Message Passing Protocol, a.k.a. Jabber) library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-xmpp-io-test";
        broken = true;
      }) {};
 
@@ -126437,6 +127756,7 @@ self: {
        description = "HaskellDB support for the dynamically loaded drivers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-dynamic";
      }) {};
 
   "haskelldb-flat" = callPackage
@@ -126455,6 +127775,7 @@ self: {
        description = "An experimental HaskellDB back-end in pure Haskell (no SQL)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-flat";
      }) {};
 
   "haskelldb-hdbc" = callPackage
@@ -126489,6 +127810,7 @@ self: {
        description = "HaskellDB support for the HDBC MySQL driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hdbc-mysql";
      }) {};
 
   "haskelldb-hdbc-odbc" = callPackage
@@ -126507,6 +127829,7 @@ self: {
        description = "HaskellDB support for the HDBC ODBC driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hdbc-odbc";
      }) {};
 
   "haskelldb-hdbc-postgresql" = callPackage
@@ -126526,6 +127849,7 @@ self: {
        description = "HaskellDB support for the HDBC PostgreSQL driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hdbc-postgresql";
      }) {inherit (pkgs) postgresql;};
 
   "haskelldb-hdbc-sqlite3" = callPackage
@@ -126544,6 +127868,7 @@ self: {
        description = "HaskellDB support for the HDBC SQLite driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hdbc-sqlite3";
      }) {};
 
   "haskelldb-hsql" = callPackage
@@ -126574,6 +127899,7 @@ self: {
        description = "HaskellDB support for the HSQL MySQL driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hsql-mysql";
      }) {};
 
   "haskelldb-hsql-odbc" = callPackage
@@ -126592,6 +127918,7 @@ self: {
        description = "HaskellDB support for the HSQL ODBC driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hsql-odbc";
      }) {};
 
   "haskelldb-hsql-oracle" = callPackage
@@ -126610,6 +127937,7 @@ self: {
        description = "HaskellDB support for the HSQL Oracle driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hsql-oracle";
        broken = true;
      }) {hsql-oracle = null;};
 
@@ -126629,6 +127957,7 @@ self: {
        description = "HaskellDB support for the HSQL PostgreSQL driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hsql-postgresql";
      }) {};
 
   "haskelldb-hsql-sqlite" = callPackage
@@ -126647,6 +127976,7 @@ self: {
        description = "HaskellDB support for the HSQL SQLite driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hsql-sqlite";
        broken = true;
      }) {hsql-sqlite = null;};
 
@@ -126666,6 +127996,7 @@ self: {
        description = "HaskellDB support for the HSQL SQLite3 driver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "DBDirect-hsql-sqlite3";
      }) {};
 
   "haskelldb-th" = callPackage
@@ -126750,6 +128081,7 @@ self: {
        description = "Command line tool for running Haskell scripts with a hashbang";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskellscript";
        broken = true;
      }) {};
 
@@ -126784,6 +128116,7 @@ self: {
        description = "Elm to Haskell translation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskelm";
      }) {};
 
   "haskelzinc" = callPackage
@@ -126817,6 +128150,7 @@ self: {
        description = "Compiler from I- to S-Expressions for the Scheme Programming Language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskeme";
        broken = true;
      }) {};
 
@@ -126962,6 +128296,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Haskell Evaluation inside of LaTeX code";
        license = lib.licenses.bsd3;
+       mainProgram = "haskintex";
      }) {};
 
   "hasklepias" = callPackage
@@ -127248,6 +128583,7 @@ self: {
        description = "Storage and index for Bitcoin and Bitcoin Cash";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskoin-store";
      }) {};
 
   "haskoin-store-data" = callPackage
@@ -127464,6 +128800,7 @@ self: {
        description = "Haskore back-end for SuperCollider";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "song-air";
      }) {};
 
   "haskore-synthesizer" = callPackage
@@ -127522,6 +128859,7 @@ self: {
        ];
        description = "Simple unsupervised segmentation model";
        license = lib.licenses.bsd3;
+       mainProgram = "haskseg";
      }) {};
 
   "hasktags" = callPackage
@@ -127550,6 +128888,7 @@ self: {
        ];
        description = "Produces ctags \"tags\" and etags \"TAGS\" files for Haskell programs";
        license = lib.licenses.bsd3;
+       mainProgram = "hasktags";
      }) {};
 
   "hasktorch" = callPackage
@@ -127610,6 +128949,7 @@ self: {
        description = "Code generation tools for Hasktorch";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ht-codegen";
        broken = true;
      }) {};
 
@@ -127866,6 +129206,7 @@ self: {
        ];
        description = "Haskus system build tool";
        license = lib.licenses.bsd3;
+       mainProgram = "haskus-system-build";
      }) {};
 
   "haskus-utils" = callPackage
@@ -128005,6 +129346,7 @@ self: {
        description = "HTTP server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskyapi";
        broken = true;
      }) {};
 
@@ -128040,6 +129382,7 @@ self: {
        description = "Loan calculator Gtk GUI. Based on haslo (Haskell Loan) library.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "HasloGUI";
      }) {};
 
   "hasmin" = callPackage
@@ -128071,6 +129414,7 @@ self: {
        description = "CSS Minifier";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hasmin";
        broken = true;
      }) {};
 
@@ -128367,6 +129711,7 @@ self: {
        testHaskellDepends = [ base bytestring hasql hspec QuickCheck ];
        description = "LISTEN/NOTIFY support for Hasql";
        license = lib.licenses.bsd3;
+       mainProgram = "hasql-notifications";
      }) {};
 
   "hasql-optparse-applicative" = callPackage
@@ -128611,6 +129956,7 @@ self: {
        description = "An example program that shows how to use Hasql streams with Rel8";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hasql-streaming";
        broken = true;
      }) {};
 
@@ -128795,6 +130141,7 @@ self: {
        description = "Haskell implementation of Mustache templates";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mkReadme";
        broken = true;
      }) {};
 
@@ -128827,6 +130174,7 @@ self: {
        description = "A universal pastebin tool, written in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haste";
        broken = true;
      }) {};
 
@@ -128976,6 +130324,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "A program to download subtitle files";
        license = lib.licenses.bsd3;
+       mainProgram = "hastily";
      }) {};
 
   "hasty-hamiltonian" = callPackage
@@ -129059,6 +130408,7 @@ self: {
        description = "XMPP client with 9P and (optionally) GTK interfaces";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hatexmpp";
      }) {};
 
   "hath" = callPackage
@@ -129079,6 +130429,7 @@ self: {
        ];
        description = "Hath manipulates network blocks in CIDR notation";
        license = lib.licenses.agpl3Only;
+       mainProgram = "hath";
      }) {};
 
   "hats" = callPackage
@@ -129110,6 +130461,7 @@ self: {
        description = "Haskell client for the NATS messaging system";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hats-examples";
        broken = true;
      }) {};
 
@@ -129134,6 +130486,7 @@ self: {
        description = "A truth table generator for classical propositional logic";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hatt";
        broken = true;
      }) {};
 
@@ -129158,6 +130511,7 @@ self: {
        description = "Library for checking for weak/compromised passwords";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
        broken = true;
      }) {};
 
@@ -129179,6 +130533,7 @@ self: {
        description = "Recursively retrieve maven dependencies";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haven";
        broken = true;
      }) {};
 
@@ -129205,6 +130560,7 @@ self: {
        description = "Implementation of the rules of Love Letter";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haverer";
        broken = true;
      }) {};
 
@@ -129228,6 +130584,7 @@ self: {
        description = "A twitter client for GTK+. Beta version.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hawitter";
      }) {};
 
   "hax" = callPackage
@@ -129254,6 +130611,7 @@ self: {
        description = "Haskell cash-flow and tax simulation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hax";
        broken = true;
      }) {};
 
@@ -129348,6 +130706,7 @@ self: {
        description = "Readable HaxBall replays";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haxparse";
        broken = true;
      }) {};
 
@@ -129422,6 +130781,7 @@ self: {
        description = "Haskell bindings for the C Wayland library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wayland-list-globals";
        broken = true;
      }) {inherit (pkgs) libGL; inherit (pkgs) wayland;};
 
@@ -129442,6 +130802,7 @@ self: {
        description = "Hayoo CLI";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hayoo";
        broken = true;
      }) {};
 
@@ -129462,6 +130823,7 @@ self: {
        description = "N-back memory game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hback";
      }) {};
 
   "hbayes" = callPackage
@@ -129509,6 +130871,7 @@ self: {
        description = "Haskell Busy Bee, a backend for text editors";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hbb";
      }) {};
 
   "hbcd" = callPackage
@@ -129557,6 +130920,7 @@ self: {
        description = "A simple step sequencer GUI";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hbeat";
        broken = true;
      }) {inherit (pkgs) SDL_mixer;};
 
@@ -129668,10 +131032,9 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Minimal extensible web-browser";
        license = "unknown";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hbro";
      }) {};
 
   "hbro-contrib" = callPackage
@@ -129704,10 +131067,9 @@ self: {
        ];
        description = "Third-party extensions to hbro";
        license = "unknown";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "hburg" = callPackage
@@ -129729,6 +131091,7 @@ self: {
        description = "Haskell Bottom Up Rewrite Generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hburg";
        broken = true;
      }) {};
 
@@ -129757,6 +131120,7 @@ self: {
        description = "A toy C compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hcc";
        broken = true;
      }) {};
 
@@ -129835,6 +131199,7 @@ self: {
        description = "Implementation of checkers (\"draughts\") board game - server application";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hcheckersd";
      }) {};
 
   "hchesslib" = callPackage
@@ -129954,6 +131319,7 @@ self: {
        testHaskellDepends = [ base data-default HUnit ieee754 mtl ];
        description = "Easily convert between latitude/longitude, UTM and OSGB";
        license = lib.licenses.bsd3;
+       mainProgram = "hcoord-exe";
      }) {};
 
   "hcount" = callPackage
@@ -129975,6 +131341,7 @@ self: {
        description = "Haskell name counts";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hcount";
      }) {};
 
   "hcron" = callPackage
@@ -130014,6 +131381,7 @@ self: {
        description = "Virtual Rubik's cube of arbitrary size";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hcube";
      }) {};
 
   "hcwiid" = callPackage
@@ -130026,9 +131394,7 @@ self: {
        librarySystemDepends = [ bluetooth cwiid ];
        description = "Library to interface with the wiimote";
        license = lib.licenses.gpl2Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {bluetooth = null; inherit (pkgs) cwiid;};
 
   "hdaemonize" = callPackage
@@ -130240,6 +131606,7 @@ self: {
        description = "Persistent GHC powered background server for FAST haskell development tools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hdevtools";
        broken = true;
      }) {};
 
@@ -130313,6 +131680,7 @@ self: {
        description = "Pattern-Expression-based differencing of arbitrary types";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hdiff";
      }) {};
 
   "hdigest" = callPackage
@@ -130348,6 +131716,7 @@ self: {
        description = "An IDL compiler for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hdirect";
      }) {};
 
   "hdis86" = callPackage
@@ -130389,6 +131758,7 @@ self: {
        description = "a small display manager";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hdm";
        broken = true;
      }) {};
 
@@ -130418,6 +131788,7 @@ self: {
        description = "A Digital Ocean client in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "docean";
        broken = true;
      }) {};
 
@@ -130444,6 +131815,7 @@ self: {
        description = "Haskell docs tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hdocs";
      }) {};
 
   "hdph" = callPackage
@@ -130544,6 +131916,7 @@ self: {
        description = "Creates a header for a haskell source file";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "headergen";
        broken = true;
      }) {};
 
@@ -130576,6 +131949,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "License Header Manager";
        license = lib.licenses.bsd3;
+       mainProgram = "headroom";
      }) {};
 
   "heap" = callPackage
@@ -130651,6 +132025,7 @@ self: {
        description = "Heapsort of MArrays as a demo of imperative programming";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "heapsort-example";
        broken = true;
      }) {};
 
@@ -130730,6 +132105,7 @@ self: {
        description = "Find and annotate ITDs";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "heatitup";
      }) {};
 
   "heatitup-complete" = callPackage
@@ -130754,6 +132130,7 @@ self: {
        description = "Find and annotate ITDs with assembly or read pair joining";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "heatitup-complete";
      }) {};
 
   "heatshrink" = callPackage
@@ -130906,6 +132283,7 @@ self: {
        description = "Jekyll in Haskell (feat. LaTeX)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "heckle";
        broken = true;
      }) {};
 
@@ -130965,7 +132343,7 @@ self: {
        ];
        description = "Release with confidence";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hedgehog_1_1_1" = callPackage
@@ -130994,7 +132372,7 @@ self: {
        description = "Release with confidence";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hedgehog-checkers" = callPackage
@@ -131304,6 +132682,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hedis-namespace-exe";
        broken = true;
      }) {};
 
@@ -131415,6 +132794,7 @@ self: {
        description = "A small library and executable for generating dice rolls";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hedra";
        broken = true;
      }) {};
 
@@ -131441,6 +132821,7 @@ self: {
        description = "Tidy data in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "app";
        broken = true;
      }) {};
 
@@ -131461,6 +132842,7 @@ self: {
        description = "An extensible build helper for haskell, in the vein of leiningen";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hein";
        broken = true;
      }) {};
 
@@ -131598,6 +132980,7 @@ self: {
        executableToolDepends = [ alex happy ];
        description = "Typechecking terms of the Edinburgh Logical Framework (LF)";
        license = lib.licenses.mit;
+       mainProgram = "helf";
      }) {};
 
   "helic" = callPackage
@@ -131637,6 +133020,7 @@ self: {
        description = "Clipboard Manager";
        license = "BSD-2-Clause-Patent";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hel";
        broken = true;
      }) {};
 
@@ -131695,6 +133079,7 @@ self: {
        description = "An incomplete Elisp compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "helisp";
        broken = true;
      }) {};
 
@@ -131785,6 +133170,7 @@ self: {
        description = "A Haskell shell based on shell-conduit";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hell";
        broken = true;
      }) {};
 
@@ -131844,6 +133230,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Hello World, an example package";
        license = lib.licenses.bsd3;
+       mainProgram = "hello";
      }) {};
 
   "helm" = callPackage
@@ -131867,6 +133254,7 @@ self: {
        description = "A functionally reactive game engine";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "helm-example-flappy";
        broken = true;
      }) {};
 
@@ -131904,6 +133292,7 @@ self: {
        description = "A module music mixer and player";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hemkay";
        broken = true;
      }) {};
 
@@ -132036,6 +133425,7 @@ self: {
        description = "HAML to ERB translator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "herbalizer";
        broken = true;
      }) {};
 
@@ -132100,7 +133490,7 @@ self: {
        ];
        description = "Runs Continuous Integration tasks on your machines";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {inherit (pkgs) boost; inherit (pkgs) nix;};
 
   "hercules-ci-api" = callPackage
@@ -132131,7 +133521,8 @@ self: {
        ];
        description = "Hercules CI API definition with Servant";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       mainProgram = "hercules-gen-swagger";
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "hercules-ci-api-agent" = callPackage
@@ -132160,7 +133551,7 @@ self: {
        ];
        description = "API definition for Hercules CI Agent to talk to hercules-ci.com or Hercules CI Enterprise";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "hercules-ci-api-core" = callPackage
@@ -132183,7 +133574,7 @@ self: {
        ];
        description = "Types and convenience modules use across Hercules CI API packages";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "hercules-ci-cli" = callPackage
@@ -132227,7 +133618,8 @@ self: {
        description = "The hci command for working with Hercules CI";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ roberth ];
+       mainProgram = "hci";
+       maintainers = [ lib.maintainers.roberth ];
        broken = true;
      }) {hercules-ci-optparse-applicative = null;};
 
@@ -132260,7 +133652,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Bindings for the Nix evaluator";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {inherit (pkgs) boost; inherit (pkgs) nix;};
 
   "hercules-ci-cnix-store" = callPackage
@@ -132287,7 +133679,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Haskell bindings for Nix's libstore";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {inherit (pkgs) boost; inherit (pkgs) nix;};
 
   "here" = callPackage
@@ -132397,6 +133789,7 @@ self: {
        description = "Haskell Equational Reasoning Model-to-Implementation Tunnel";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hermit";
      }) {};
 
   "hermit-syb" = callPackage
@@ -132434,6 +133827,7 @@ self: {
        description = "A command-line manager for delicious kitchen recipes";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "herms";
        broken = true;
      }) {};
 
@@ -132449,6 +133843,7 @@ self: {
        executableHaskellDepends = [ base random text ];
        description = "Think back of the five tenets of hero club";
        license = lib.licenses.bsd3;
+       mainProgram = "fivetenets";
      }) {};
 
   "heroku" = callPackage
@@ -132558,6 +133953,7 @@ self: {
        description = "the Haskell Extensible Shell: Haskell for Bash-style scripts";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hesh";
      }) {};
 
   "hesql" = callPackage
@@ -132576,6 +133972,7 @@ self: {
        description = "Haskell's embedded SQL";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hesql";
      }) {};
 
   "hetero-dict" = callPackage
@@ -132677,6 +134074,7 @@ self: {
        description = "Text Tetris";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hetris";
        broken = true;
      }) {inherit (pkgs) ncurses;};
 
@@ -132742,6 +134140,7 @@ self: {
        description = "Ethereum virtual machine evaluator";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hevm";
      }) {inherit (pkgs) libff; inherit (pkgs) secp256k1;};
 
   "hevolisa" = callPackage
@@ -132759,6 +134158,7 @@ self: {
        description = "Genetic Mona Lisa problem in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hevolisa";
      }) {};
 
   "hevolisa-dph" = callPackage
@@ -132778,6 +134178,7 @@ self: {
        description = "Genetic Mona Lisa problem in Haskell - using Data Parallel Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hevolisa";
      }) {};
 
   "hex" = callPackage
@@ -132858,6 +134259,7 @@ self: {
        description = "A small game based on domino-like hexagonal tiles";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hexmino";
        broken = true;
      }) {};
 
@@ -133113,6 +134515,7 @@ self: {
        description = "a text classification library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hext-exe";
        broken = true;
      }) {};
 
@@ -133182,6 +134585,7 @@ self: {
        description = "A server for Eye-Fi SD cards";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "heyefi";
        broken = true;
      }) {};
 
@@ -133240,6 +134644,7 @@ self: {
        description = "Flash debugger";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hfd";
      }) {};
 
   "hfiar" = callPackage
@@ -133256,6 +134661,7 @@ self: {
        description = "Four in a Row in Haskell!!";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hfiar";
      }) {};
 
   "hflags" = callPackage
@@ -133302,6 +134708,7 @@ self: {
        description = "Haskell source code formatter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hfmt";
        broken = true;
      }) {};
 
@@ -133323,6 +134730,7 @@ self: {
        description = "Hess-Smith panel code for inviscid 2-d airfoil analysis";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hfoil";
        broken = true;
      }) {};
 
@@ -133372,6 +134780,7 @@ self: {
        description = "OpenGL fractal renderer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hfractal";
      }) {};
 
   "hfsevents" = callPackage
@@ -133387,7 +134796,6 @@ self: {
        libraryToolDepends = [ CoreServices ];
        description = "File/folder watching for OS X";
        license = lib.licenses.bsd3;
-       platforms = [ "aarch64-darwin" "x86_64-darwin" ];
      }) {inherit (pkgs.darwin.apple_sdk.frameworks) Cocoa; 
          inherit (pkgs.darwin.apple_sdk.frameworks) CoreServices;};
 
@@ -133502,6 +134910,7 @@ self: {
        description = "Random generation of modal and hybrid logic formulas";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgen";
      }) {};
 
   "hgeometric" = callPackage
@@ -133679,6 +135088,7 @@ self: {
        description = "Bindings to libintl.h (gettext, bindtextdomain)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgettext";
        broken = true;
      }) {};
 
@@ -133726,6 +135136,7 @@ self: {
        description = "Haskell bindings to the GitHub API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgithub";
      }) {};
 
   "hgl-example" = callPackage
@@ -133742,6 +135153,7 @@ self: {
        description = "Various animations generated using HGL";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgl-example";
        broken = true;
      }) {HTam = null;};
 
@@ -133778,6 +135190,7 @@ self: {
        description = "An haskell port of the java version of gom";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgom";
        broken = true;
      }) {};
 
@@ -133847,6 +135260,7 @@ self: {
        description = "Search Haskell source code from the command line";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgrep";
        broken = true;
      }) {};
 
@@ -133973,6 +135387,7 @@ self: {
        description = "Generate scaffold for cabal project";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hi";
        broken = true;
      }) {};
 
@@ -134033,6 +135448,7 @@ self: {
        description = "Relatively efficient Tcl interpreter with support for basic operations";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hiccup";
      }) {};
 
   "hichi" = callPackage
@@ -134047,6 +135463,7 @@ self: {
        description = "haskell robot for IChat protocol";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hichi";
        broken = true;
      }) {};
 
@@ -134113,9 +135530,7 @@ self: {
        librarySystemDepends = [ systemd ];
        description = "Haskell bindings to HIDAPI";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) systemd;};
 
   "hidden-char" = callPackage
@@ -134164,6 +135579,7 @@ self: {
        ];
        description = "Set up a GHC API session";
        license = lib.licenses.bsd3;
+       mainProgram = "hie-bios";
      }) {};
 
   "hie-compat" = callPackage
@@ -134217,6 +135633,7 @@ self: {
        description = "The core of an IDE";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hie-core";
      }) {};
 
   "hiedb" = callPackage
@@ -134244,6 +135661,7 @@ self: {
        ];
        description = "Generates a references DB from .hie files";
        license = lib.licenses.bsd3;
+       mainProgram = "hiedb";
      }) {};
 
   "hieraclus" = callPackage
@@ -134356,6 +135774,7 @@ self: {
        description = "Hierarchical spectral clustering of a graph";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cluster-tree";
      }) {};
 
   "hierarchy" = callPackage
@@ -134417,6 +135836,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "WiFi connection script generator";
        license = lib.licenses.bsd3;
+       mainProgram = "hifi";
      }) {};
 
   "higgledy" = callPackage
@@ -134456,6 +135876,7 @@ self: {
        description = "Memory usage statistics";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "highWaterMark";
        broken = true;
      }) {};
 
@@ -134602,6 +136023,7 @@ self: {
        description = "Highlight package versions which differ from the latest version on Hackage";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "highlight-versions";
        broken = true;
      }) {};
 
@@ -134680,6 +136102,7 @@ self: {
        ];
        description = "Generate STL models from SRTM elevation data";
        license = lib.licenses.bsd3;
+       mainProgram = "hills";
      }) {};
 
   "himerge" = callPackage
@@ -134699,6 +136122,7 @@ self: {
        description = "Haskell Graphical User Interface for Emerge";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "himerge";
        broken = true;
      }) {mozembed = null;};
 
@@ -134721,6 +136145,7 @@ self: {
        description = "Simple gtk2hs image viewer. Point it at an image and fire away.";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "himg";
        broken = true;
      }) {};
 
@@ -134744,6 +136169,7 @@ self: {
        description = "multithreaded snmp poller for riemann";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "himpy";
      }) {};
 
   "hindent" = callPackage
@@ -134778,6 +136204,7 @@ self: {
        ];
        description = "Extensible Haskell pretty printer";
        license = lib.licenses.bsd3;
+       mainProgram = "hindent";
      }) {};
 
   "hindley-milner" = callPackage
@@ -134913,6 +136340,7 @@ self: {
        testHaskellDepends = [ aeson base optparse-applicative text yaml ];
        description = "Command Line App With Info on your Haskell App";
        license = lib.licenses.bsd3;
+       mainProgram = "hinfo";
      }) {};
 
   "hinit" = callPackage
@@ -134943,7 +136371,8 @@ self: {
        ];
        description = "Generic project initialization tool";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ poscat ];
+       mainProgram = "hi";
+       maintainers = [ lib.maintainers.poscat ];
      }) {};
 
   "hinotify_0_3_9" = callPackage
@@ -134991,9 +136420,7 @@ self: {
        ];
        description = "Haskell binding to inotify, using ByteString filepaths";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "hinotify-conduit" = callPackage
@@ -135158,6 +136585,7 @@ self: {
        description = "Space Invaders";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hinvaders";
      }) {};
 
   "hinze-streams" = callPackage
@@ -135270,6 +136698,7 @@ self: {
        ];
        description = "an IPS patcher";
        license = lib.licenses.bsd3;
+       mainProgram = "hips";
      }) {};
 
   "hipsql-api" = callPackage
@@ -135305,6 +136734,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hipsql";
      }) {};
 
   "hipsql-monad" = callPackage
@@ -135337,6 +136767,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hipsql-demo-server";
      }) {};
 
   "hircules" = callPackage
@@ -135356,6 +136787,7 @@ self: {
        description = "IRC client";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hircules";
        broken = true;
      }) {};
 
@@ -135378,6 +136810,7 @@ self: {
        description = "Calculates IRT 2PL and 3PL models";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hirt";
      }) {};
 
   "hissmetrics" = callPackage
@@ -135419,6 +136852,7 @@ self: {
        description = "Umbrella package for the historical dictionary of Polish";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hist-pl";
      }) {};
 
   "hist-pl-dawg" = callPackage
@@ -135569,6 +137003,7 @@ self: {
        description = "Extract the interesting bits from shell history";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "historian";
        broken = true;
      }) {};
 
@@ -135589,6 +137024,7 @@ self: {
        description = "Git like program in haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Hit";
      }) {};
 
   "hit-graph" = callPackage
@@ -135627,6 +137063,7 @@ self: {
        description = "Haskell Git Helper Tool";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hit";
        broken = true;
      }) {};
 
@@ -135676,6 +137113,7 @@ self: {
        description = "JavaScript Parser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hjs";
        broken = true;
      }) {};
 
@@ -135702,6 +137140,7 @@ self: {
        ];
        description = "Haskell implementation of a javascript minifier";
        license = lib.licenses.bsd3;
+       mainProgram = "hjsmin";
      }) {};
 
   "hjson" = callPackage
@@ -135830,6 +137269,7 @@ self: {
        description = "Majority Judgment and Helios-C command line tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hjugement";
      }) {};
 
   "hjugement-protocol" = callPackage
@@ -135942,6 +137382,7 @@ self: {
        ];
        description = "Simple Hackage release workflow for package maintainers";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hkgr";
      }) {};
 
   "hkgr_0_4" = callPackage
@@ -135962,6 +137403,7 @@ self: {
        description = "Simple Hackage release workflow for package maintainers";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hkgr";
      }) {};
 
   "hkt" = callPackage
@@ -136063,6 +137505,7 @@ self: {
        description = "Web Socket interface to Leap Motion controller";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "leap-tracker";
        broken = true;
      }) {};
 
@@ -136105,7 +137548,8 @@ self: {
        ];
        description = "Command-line interface for the hledger accounting system";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger_1_26" = callPackage
@@ -136148,7 +137592,8 @@ self: {
        description = "Command-line interface for the hledger accounting system";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger-api" = callPackage
@@ -136174,6 +137619,7 @@ self: {
        description = "Web API server for the hledger accounting tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hledger-api";
        broken = true;
      }) {};
 
@@ -136194,6 +137640,7 @@ self: {
        description = "A pie chart image generator for the hledger accounting tool";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hledger-chart";
        broken = true;
      }) {};
 
@@ -136209,6 +137656,7 @@ self: {
        description = "Compares the transactions in two ledger files";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hledger-diff";
        broken = true;
      }) {};
 
@@ -136235,6 +137683,7 @@ self: {
        ];
        description = "An hledger workflow focusing on automated statement import and classification";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hledger-flow";
      }) {};
 
   "hledger-iadd" = callPackage
@@ -136269,6 +137718,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A terminal UI as drop-in replacement for hledger add";
        license = lib.licenses.bsd3;
+       mainProgram = "hledger-iadd";
      }) {};
 
   "hledger-interest" = callPackage
@@ -136287,7 +137737,8 @@ self: {
        ];
        description = "computes interest for a given account";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger-interest";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger-interest_1_6_4" = callPackage
@@ -136305,7 +137756,8 @@ self: {
        description = "computes interest for a given account";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger-interest";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger-irr" = callPackage
@@ -136325,6 +137777,7 @@ self: {
        description = "computes the internal rate of return of an investment";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hledger-irr";
        broken = true;
      }) {};
 
@@ -136420,6 +137873,7 @@ self: {
        ];
        description = "An hledger workflow focusing on automated statement import and classification";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hledger-makeitso";
      }) {};
 
   "hledger-stockquotes" = callPackage
@@ -136449,6 +137903,7 @@ self: {
        ];
        description = "Generate HLedger Price Directives From Daily Stock Quotes";
        license = lib.licenses.bsd3;
+       mainProgram = "hledger-stockquotes";
      }) {};
 
   "hledger-stockquotes_0_1_2_1" = callPackage
@@ -136477,6 +137932,7 @@ self: {
        description = "Generate HLedger Price Directives From Daily Stock Quotes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hledger-stockquotes";
      }) {};
 
   "hledger-ui" = callPackage
@@ -136500,7 +137956,8 @@ self: {
        ];
        description = "Curses-style terminal interface for the hledger accounting system";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger-ui";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger-ui_1_26" = callPackage
@@ -136527,7 +137984,8 @@ self: {
        description = "Curses-style terminal interface for the hledger accounting system";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger-ui";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger-vty" = callPackage
@@ -136546,6 +138004,7 @@ self: {
        description = "A curses-style console interface for the hledger accounting tool";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hledger-vty";
        broken = true;
      }) {};
 
@@ -136582,7 +138041,8 @@ self: {
        ];
        description = "Web-based user interface for the hledger accounting system";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger-web";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hledger-web_1_26" = callPackage
@@ -136619,7 +138079,8 @@ self: {
        description = "Web-based user interface for the hledger accounting system";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "hledger-web";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hlibBladeRF" = callPackage
@@ -136651,6 +138112,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Bindings to https://github.com/anrieff/libcpuid";
        license = lib.licenses.mit;
+       mainProgram = "cpuid";
      }) {};
 
   "hlibev" = callPackage
@@ -136733,7 +138195,8 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Source code suggestions";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "hlint";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hlint_3_4" = callPackage
@@ -136760,7 +138223,8 @@ self: {
        description = "Source code suggestions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "hlint";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hlint-test" = callPackage
@@ -136775,6 +138239,7 @@ self: {
        executableHaskellDepends = [ base hlint ];
        description = "Run hlint in test suite";
        license = lib.licenses.bsd3;
+       mainProgram = "hlint-test";
      }) {};
 
   "hlist" = callPackage
@@ -136839,6 +138304,7 @@ self: {
        description = "Library and utility interfacing to longurl.org";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hlongurl";
        broken = true;
      }) {};
 
@@ -137500,6 +138966,7 @@ self: {
        description = "A tool and library for Markov chains based text generation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmark";
      }) {};
 
   "hmarkup" = callPackage
@@ -137534,7 +139001,7 @@ self: {
        librarySystemDepends = [ openblasCompat ];
        description = "Numeric Linear Algebra";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {inherit (pkgs) openblasCompat;};
 
   "hmatrix-backprop" = callPackage
@@ -137917,6 +139384,7 @@ self: {
        description = "CLI fuzzy finder and launcher";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmenu";
        broken = true;
      }) {};
 
@@ -137969,6 +139437,7 @@ self: {
        description = "A make alternative based on Plan9's mk";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmk";
        broken = true;
      }) {};
 
@@ -138055,6 +139524,7 @@ self: {
        description = "An ncurses mp3 player written in Haskell";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmp3";
        broken = true;
      }) {inherit (pkgs) ncurses;};
 
@@ -138076,6 +139546,7 @@ self: {
        executableSystemDepends = [ ncurses ];
        description = "A 2019 fork of an ncurses mp3 player written in Haskell";
        license = "GPL";
+       mainProgram = "hmp3";
      }) {inherit (pkgs) ncurses;};
 
   "hmpfr" = callPackage
@@ -138149,6 +139620,7 @@ self: {
        description = "Interpreter for the MUMPS langugae";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmumps";
        broken = true;
      }) {};
 
@@ -138234,7 +139706,10 @@ self: {
        ];
        description = "Haskell implementation of the Nix language";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Anton-Latukha sorki ];
+       mainProgram = "hnix";
+       maintainers = [
+         lib.maintainers.Anton-Latukha lib.maintainers.sorki
+       ];
      }) {};
 
   "hnix_0_16_0" = callPackage
@@ -138289,7 +139764,10 @@ self: {
        description = "Haskell implementation of the Nix language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Anton-Latukha sorki ];
+       mainProgram = "hnix";
+       maintainers = [
+         lib.maintainers.Anton-Latukha lib.maintainers.sorki
+       ];
      }) {};
 
   "hnix-store-core_0_5_0_0" = callPackage
@@ -138323,7 +139801,9 @@ self: {
        description = "Core effects for interacting with the Nix store";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Anton-Latukha sorki ];
+       maintainers = [
+         lib.maintainers.Anton-Latukha lib.maintainers.sorki
+       ];
      }) {};
 
   "hnix-store-core" = callPackage
@@ -138355,7 +139835,9 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "Core effects for interacting with the Nix store";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ Anton-Latukha sorki ];
+       maintainers = [
+         lib.maintainers.Anton-Latukha lib.maintainers.sorki
+       ];
      }) {};
 
   "hnix-store-remote_0_5_0_0" = callPackage
@@ -138375,7 +139857,9 @@ self: {
        description = "Remote hnix store";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Anton-Latukha sorki ];
+       maintainers = [
+         lib.maintainers.Anton-Latukha lib.maintainers.sorki
+       ];
      }) {};
 
   "hnix-store-remote" = callPackage
@@ -138394,7 +139878,9 @@ self: {
        ];
        description = "Remote hnix store";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ Anton-Latukha sorki ];
+       maintainers = [
+         lib.maintainers.Anton-Latukha lib.maintainers.sorki
+       ];
      }) {};
 
   "hnn" = callPackage
@@ -138430,6 +139916,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "A Nock interpreter";
        license = lib.licenses.mit;
+       mainProgram = "hnock";
      }) {};
 
   "hnop" = callPackage
@@ -138443,6 +139930,7 @@ self: {
        executableHaskellDepends = [ base ];
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hnop";
        broken = true;
      }) {};
 
@@ -138586,6 +140074,7 @@ self: {
        description = "A source code editor aiming for the convenience of use";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hob";
      }) {};
 
   "hobbes" = callPackage
@@ -138604,6 +140093,7 @@ self: {
        description = "A small file watcher for OSX";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hobbes";
        broken = true;
      }) {};
 
@@ -138747,6 +140237,7 @@ self: {
        description = "hoe: Haskell One-liner Evaluator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoe";
        broken = true;
      }) {};
 
@@ -138779,6 +140270,7 @@ self: {
        description = "Simple IRC logger bot";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hog";
        broken = true;
      }) {};
 
@@ -138825,6 +140317,7 @@ self: {
        description = "Bindings to the Toggl.com REST API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoggl";
        broken = true;
      }) {};
 
@@ -138874,6 +140367,7 @@ self: {
        description = "OIS bindings";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "OISConsole";
        broken = true;
      }) {OIS = null;};
 
@@ -138919,6 +140413,7 @@ self: {
        description = "Higher order logic";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hol-pkg";
        broken = true;
      }) {};
 
@@ -139058,7 +140553,10 @@ self: {
        ];
        description = "DirectSound extension (Windows) for the Hommage sound library";
        license = "GPL";
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "homoiconic" = callPackage
@@ -139118,6 +140616,7 @@ self: {
        description = "Haskell code quality tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "homplexity-cli";
        broken = true;
      }) {};
 
@@ -139132,6 +140631,7 @@ self: {
        libraryHaskellDepends = [ base hourglass split ];
        executableHaskellDepends = [ base hourglass split ];
        license = lib.licenses.mit;
+       mainProgram = "homura-stopwatch";
      }) {};
 
   "honeycomb" = callPackage
@@ -139189,9 +140689,7 @@ self: {
        libraryHaskellDepends = [ base ];
        description = "Cross-platform interface to the PC speaker";
        license = lib.licenses.asl20;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "hoobuddy" = callPackage
@@ -139211,6 +140709,7 @@ self: {
        description = "Simple tool for fetching and merging hoogle data";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoobuddy";
        broken = true;
      }) {};
 
@@ -139269,6 +140768,7 @@ self: {
        description = "A small, toy roguelike";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoodie";
      }) {};
 
   "hoodle" = callPackage
@@ -139290,6 +140790,7 @@ self: {
        description = "Executable for hoodle";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoodle";
      }) {};
 
   "hoodle-builder" = callPackage
@@ -139411,6 +140912,7 @@ self: {
        description = "publish hoodle files as a static web site";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoodle-publish";
      }) {};
 
   "hoodle-render" = callPackage
@@ -139482,6 +140984,7 @@ self: {
        testTarget = "--test-option=--no-net";
        description = "Haskell API Search";
        license = lib.licenses.bsd3;
+       mainProgram = "hoogle";
      }) {};
 
   "hoogle-index" = callPackage
@@ -139502,6 +141005,7 @@ self: {
        description = "Easily generate Hoogle indices for installed packages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoogle-index";
        broken = true;
      }) {};
 
@@ -139600,6 +141104,7 @@ self: {
        description = "Haskell Media Server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoovie";
      }) {};
 
   "hopencc" = callPackage
@@ -139686,7 +141191,7 @@ self: {
        testHaskellDepends = [ base bytestring HUnit ];
        description = "FFI Bindings to OpenSSL's EVP Digest Interface";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {inherit (pkgs) openssl;};
 
   "hopfield" = callPackage
@@ -139742,6 +141247,7 @@ self: {
        ];
        description = "Hopfield Networks for unsupervised learning in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "hopfield_demonstration";
      }) {};
 
   "hopfli" = callPackage
@@ -139851,6 +141357,7 @@ self: {
        description = "Handy Operations on Power Series";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hops";
        broken = true;
      }) {};
 
@@ -139872,6 +141379,7 @@ self: {
        description = "A language based on homotopy type theory with an interval type";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hoq";
        broken = true;
      }) {};
 
@@ -139922,6 +141430,7 @@ self: {
        testHaskellDepends = [ base HMock tasty tasty-hunit ];
        description = "horizontal rule for the terminal";
        license = lib.licenses.mit;
+       mainProgram = "hr";
      }) {};
 
   "horname" = callPackage
@@ -139941,6 +141450,7 @@ self: {
        description = "Rename function definitions returned by SMT solvers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "horname";
        broken = true;
      }) {};
 
@@ -140057,6 +141567,7 @@ self: {
        description = "An dns server which is extremely easy to config";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hosts-server";
        broken = true;
      }) {};
 
@@ -140077,6 +141588,7 @@ self: {
        description = "Generates ctags for Haskell, incorporating import lists and qualified imports";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hothasktags";
        broken = true;
      }) {};
 
@@ -140168,6 +141680,7 @@ self: {
        description = "A Haskell implementation of Foreman";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "houseman";
        broken = true;
      }) {};
 
@@ -140244,6 +141757,7 @@ self: {
        description = "A utility to visualise and compare heap profiles";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hp2any-manager";
      }) {};
 
   "hp2html" = callPackage
@@ -140258,6 +141772,7 @@ self: {
        executableHaskellDepends = [ base containers filepath ];
        description = "A tool for converting GHC heap-profiles to HTML";
        license = lib.licenses.bsd3;
+       mainProgram = "hp2html";
      }) {};
 
   "hp2pretty" = callPackage
@@ -140276,6 +141791,7 @@ self: {
        ];
        description = "generate pretty graphs from heap profiles";
        license = lib.licenses.bsd3;
+       mainProgram = "hp2pretty";
      }) {};
 
   "hpack" = callPackage
@@ -140314,6 +141830,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A modern format for Haskell packages";
        license = lib.licenses.mit;
+       mainProgram = "hpack";
      }) {};
 
   "hpack_0_35_0" = callPackage
@@ -140353,6 +141870,7 @@ self: {
        description = "A modern format for Haskell packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpack";
      }) {};
 
   "hpack-convert" = callPackage
@@ -140385,6 +141903,7 @@ self: {
        description = "Convert Cabal manifests into hpack's package.yamls";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpack-convert";
        broken = true;
      }) {};
 
@@ -140465,6 +141984,7 @@ self: {
        description = "Modular template compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpaco";
      }) {};
 
   "hpaco-lib" = callPackage
@@ -140505,6 +142025,7 @@ self: {
        description = "A scrapbook for Haskell developers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpage";
      }) {};
 
   "hpapi" = callPackage
@@ -140517,9 +142038,7 @@ self: {
        librarySystemDepends = [ papi ];
        description = "Binding for the PAPI library";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) papi;};
 
   "hpaste" = callPackage
@@ -140548,6 +142067,7 @@ self: {
        description = "Haskell paste web site";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpaste";
      }) {};
 
   "hpasteit" = callPackage
@@ -140568,6 +142088,7 @@ self: {
        description = "A command-line client for hpaste.org";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpasteit";
        broken = true;
      }) {};
 
@@ -140685,6 +142206,7 @@ self: {
        ];
        description = "Generate codecov report from hpc data";
        license = lib.licenses.bsd3;
+       mainProgram = "hpc-codecov";
      }) {};
 
   "hpc-coveralls" = callPackage
@@ -140739,6 +142261,7 @@ self: {
        description = "Convert HPC output into LCOV format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpc-lcov";
        broken = true;
      }) {};
 
@@ -140768,6 +142291,7 @@ self: {
        testHaskellDepends = [ base deepseq hspec ];
        description = "Ensure the code coverage is above configured thresholds";
        license = lib.licenses.bsd3;
+       mainProgram = "hpc-threshold";
      }) {};
 
   "hpc-tracer" = callPackage
@@ -140787,6 +142311,7 @@ self: {
        description = "Tracer with AJAX interface";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpc-tracer";
      }) {};
 
   "hpdft" = callPackage
@@ -140810,6 +142335,7 @@ self: {
        ];
        description = "A tool for looking through PDF file using Haskell";
        license = lib.licenses.mit;
+       mainProgram = "hpdft";
      }) {};
 
   "hpg" = callPackage
@@ -140824,6 +142350,7 @@ self: {
        description = "a simple password generator";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpg";
        broken = true;
      }) {};
 
@@ -140888,6 +142415,7 @@ self: {
        description = "Application for managing playlist files on a music player";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hplaylist";
        broken = true;
      }) {};
 
@@ -140909,6 +142437,7 @@ self: {
        description = "Podcast Aggregator (downloader)";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpodder";
        broken = true;
      }) {};
 
@@ -140930,6 +142459,7 @@ self: {
        testHaskellDepends = [ base bytestring transformers ];
        description = "A Haskell pre-processor";
        license = lib.licenses.bsd3;
+       mainProgram = "hpp";
      }) {};
 
   "hpqtypes" = callPackage
@@ -141014,6 +142544,7 @@ self: {
        description = "Parse Google Protocol Buffer specifications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hprotoc";
        broken = true;
      }) {};
 
@@ -141044,6 +142575,7 @@ self: {
        description = "Parse Google Protocol Buffer specifications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hprotoc";
      }) {};
 
   "hprox" = callPackage
@@ -141066,6 +142598,7 @@ self: {
        ];
        description = "a lightweight HTTP proxy server, and more";
        license = lib.licenses.asl20;
+       mainProgram = "hprox";
      }) {};
 
   "hps" = callPackage
@@ -141153,6 +142686,7 @@ self: {
        description = "AI of Pylos game with GLUT interface";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpylos";
        broken = true;
      }) {};
 
@@ -141170,6 +142704,7 @@ self: {
        description = "pyrg utility done right";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hpyrg";
        broken = true;
      }) {};
 
@@ -141201,6 +142736,7 @@ self: {
        description = "Python language tools";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "hq" = callPackage
@@ -141259,6 +142795,7 @@ self: {
        description = "HQuantLib is a port of essencial parts of QuantLib to Haskell";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mctest";
      }) {};
 
   "hquantlib-time" = callPackage
@@ -141305,6 +142842,7 @@ self: {
        description = "Basic utility for ranking a list of items";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hranker";
      }) {};
 
   "hreader" = callPackage
@@ -141368,6 +142906,7 @@ self: {
        description = "A Type dependent Highlevel HTTP client library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "hreq-conduit" = callPackage
@@ -141441,6 +142980,7 @@ self: {
        description = "A Cricket scoring application";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hricket";
        broken = true;
      }) {};
 
@@ -141467,6 +143007,7 @@ self: {
        ];
        description = "A Riemann Client for Haskell";
        license = lib.licenses.mit;
+       mainProgram = "hriemann-exe";
      }) {};
 
   "hruby" = callPackage
@@ -141515,6 +143056,7 @@ self: {
        description = "GHC-toolchain installer broker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs";
      }) {};
 
   "hs-GeoIP" = callPackage
@@ -141677,6 +143219,7 @@ self: {
        ];
        description = "Conllu validating parser and utils";
        license = lib.licenses.lgpl3Only;
+       mainProgram = "hs-conllu";
      }) {};
 
   "hs-di" = callPackage
@@ -141707,6 +143250,7 @@ self: {
        description = "Dependency Injection library for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-di-cases";
        broken = true;
      }) {};
 
@@ -141834,6 +143378,7 @@ self: {
        description = "Utility to generate haskell-names interface files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-gen-iface";
      }) {};
 
   "hs-gizapp" = callPackage
@@ -141938,6 +143483,7 @@ self: {
        description = "Logo interpreter written in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-logo";
        broken = true;
      }) {};
 
@@ -141998,6 +143544,7 @@ self: {
        description = "Name generator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-nombre-generator";
        broken = true;
      }) {};
 
@@ -142014,6 +143561,7 @@ self: {
        description = "The OpenMoji emoji dataset";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
        broken = true;
      }) {};
 
@@ -142310,6 +143858,7 @@ self: {
        description = "DSL for musical patterns and transformation, based on contravariant functors";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-pattrans";
        broken = true;
      }) {};
 
@@ -142331,6 +143880,7 @@ self: {
        description = "Programmer's Mine Sweeper in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-pgms";
        broken = true;
      }) {};
 
@@ -142393,6 +143943,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Bindings to C pipe functions";
        license = lib.licenses.bsd3;
+       mainProgram = "ls-example-exe";
      }) {};
 
   "hs-profunctors" = callPackage
@@ -142457,6 +144008,7 @@ self: {
        description = "Experimental! Wraps this awesome rust library so you can use it in haskell. https://docs.rs/crate/notify";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "notify";
        broken = true;
      }) {notifier = null;};
 
@@ -142502,6 +144054,7 @@ self: {
        description = "Terminal Emulator written in Haskell, SDL2 Backend";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-sdl-term-emulator";
      }) {};
 
   "hs-server-starter" = callPackage
@@ -142534,6 +144087,7 @@ self: {
        description = "snowtify send your result of `stack build` (`stack test`) to notify-daemon :dog2:";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snowtify";
        broken = true;
      }) {};
 
@@ -142553,6 +144107,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Convert an eventlog into the speedscope json format";
        license = lib.licenses.bsd3;
+       mainProgram = "hs-speedscope";
      }) {};
 
   "hs-swisstable-hashtables-class" = callPackage
@@ -142584,6 +144139,7 @@ self: {
        description = "Create tag files (ctags and etags) for Haskell code";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-tags";
        broken = true;
      }) {};
 
@@ -142642,6 +144198,7 @@ self: {
        description = "Commandline Twitter feed archiver";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-twitterarchiver";
        broken = true;
      }) {};
 
@@ -142721,6 +144278,7 @@ self: {
        ];
        description = "A 2048 clone in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "hs2048";
      }) {};
 
   "hs2ats" = callPackage
@@ -142745,6 +144303,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion ];
        description = "Create ATS types from Haskell types";
        license = lib.licenses.bsd3;
+       mainProgram = "hs2ats";
      }) {};
 
   "hs2bf" = callPackage
@@ -142764,6 +144323,7 @@ self: {
        description = "Haskell to Brainfuck compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs2bf";
        broken = true;
      }) {};
 
@@ -142783,6 +144343,7 @@ self: {
        description = "Generate graphviz-code from Haskell-code";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs2dot";
      }) {};
 
   "hs2ps" = callPackage
@@ -142899,6 +144460,7 @@ self: {
        ];
        description = "Akamai API(Edgegrid and Netstorage)";
        license = lib.licenses.bsd3;
+       mainProgram = "purge";
      }) {};
 
   "hsaml2" = callPackage
@@ -142984,6 +144546,7 @@ self: {
        description = "(ab)Use Google Translate as a speech synthesiser";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsay";
        broken = true;
      }) {};
 
@@ -143002,6 +144565,7 @@ self: {
        ];
        description = "Preprocesses a file, adding blobs from files as string literals";
        license = lib.licenses.bsd3;
+       mainProgram = "hsb2hs";
      }) {};
 
   "hsbackup" = callPackage
@@ -143021,6 +144585,7 @@ self: {
        description = "simple utility for rolling filesystem backups";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsbackup";
      }) {};
 
   "hsbc" = callPackage
@@ -143035,6 +144600,7 @@ self: {
        description = "A command line calculator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsbc";
        broken = true;
      }) {};
 
@@ -143124,6 +144690,7 @@ self: {
        ];
        description = "A preprocessor that helps with writing Haskell bindings to C code";
        license = lib.licenses.bsd3;
+       mainProgram = "hsc2hs";
      }) {};
 
   "hsc3" = callPackage
@@ -143240,6 +144807,7 @@ self: {
        description = "FORTH SUPERCOLLIDER";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsc3-forth";
      }) {};
 
   "hsc3-graphs" = callPackage
@@ -143265,6 +144833,7 @@ self: {
        description = "Haskell SuperCollider Graphs";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsc3-graphs";
      }) {};
 
   "hsc3-lang" = callPackage
@@ -143307,6 +144876,7 @@ self: {
        description = "LISP SUPERCOLLIDER";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsc3-lisp";
      }) {};
 
   "hsc3-plot" = callPackage
@@ -143500,6 +145070,7 @@ self: {
        description = "Very simple file/directory structure scaffolding writer monad EDSL";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsfiles-from-directory";
        broken = true;
      }) {};
 
@@ -143549,6 +145120,7 @@ self: {
        description = "Command line client and library for SoundCloud.com";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hscd";
        broken = true;
      }) {};
 
@@ -143725,6 +145297,7 @@ self: {
        description = "hscim json schema and server implementation";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hscim-server";
        broken = true;
      }) {};
 
@@ -143740,6 +145313,7 @@ self: {
        description = "An elegant analog clock using Haskell, GTK and Cairo";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsclock";
        broken = true;
      }) {};
 
@@ -143756,6 +145330,7 @@ self: {
        executableHaskellDepends = [ base containers ];
        description = "Colourise Haskell code";
        license = "LGPL";
+       mainProgram = "HsColour";
      }) {};
 
   "hscope" = callPackage
@@ -143779,6 +145354,7 @@ self: {
        description = "cscope like browser for Haskell code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hscope";
      }) {};
 
   "hscrtmpl" = callPackage
@@ -143794,6 +145370,7 @@ self: {
        ];
        description = "Haskell shell script template";
        license = lib.licenses.isc;
+       mainProgram = "hscrtmpl";
      }) {};
 
   "hscuid" = callPackage
@@ -143814,6 +145391,7 @@ self: {
        description = "Collision-resistant IDs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "perf-test";
        broken = true;
      }) {};
 
@@ -143845,6 +145423,7 @@ self: {
        executableHaskellDepends = [ base hscurses random safe unix ];
        description = "hscurses swimming fish example";
        license = lib.licenses.isc;
+       mainProgram = "hscurses-fish-ex";
      }) {};
 
   "hsdev" = callPackage
@@ -143889,6 +145468,7 @@ self: {
        description = "Haskell development library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsdev";
      }) {};
 
   "hsdif" = callPackage
@@ -143918,6 +145498,7 @@ self: {
        description = "hsdip - a Diplomacy parser/renderer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsdip";
        broken = true;
      }) {};
 
@@ -143935,7 +145516,7 @@ self: {
        librarySystemDepends = [ adns ];
        description = "Asynchronous DNS Resolver";
        license = lib.licenses.lgpl3Only;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {inherit (pkgs) adns;};
 
   "hsdns-cache" = callPackage
@@ -143995,7 +145576,7 @@ self: {
        testHaskellDepends = [ base hspec parsec time ];
        description = "Parsec parsers for the Internet Message format (e-mail)";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hsemail-ns" = callPackage
@@ -144026,6 +145607,7 @@ self: {
        ];
        description = "sendxmpp clone, sending XMPP messages via CLI";
        license = lib.licenses.agpl3Only;
+       mainProgram = "hsendxmpp";
      }) {};
 
   "hsenv" = callPackage
@@ -144047,6 +145629,7 @@ self: {
        description = "Virtual Haskell Environment builder";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsenv";
        broken = true;
      }) {};
 
@@ -144061,6 +145644,7 @@ self: {
        executableHaskellDepends = [ base cmdargs wai-app-static warp ];
        description = "Simple http server in haskell";
        license = lib.licenses.mit;
+       mainProgram = "hserv";
      }) {};
 
   "hset" = callPackage
@@ -144134,6 +145718,7 @@ self: {
        description = "Z-decoder";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsfilt";
        broken = true;
      }) {};
 
@@ -144219,6 +145804,7 @@ self: {
        ];
        description = "Console-based gettings-things-done application";
        license = "GPL";
+       mainProgram = "hsgtd";
      }) {};
 
   "hsharc" = callPackage
@@ -144266,6 +145852,7 @@ self: {
        ];
        description = "RPN calculator";
        license = lib.licenses.mit;
+       mainProgram = "hsilop";
      }) {};
 
   "hsimport" = callPackage
@@ -144294,6 +145881,7 @@ self: {
        description = "Extend the import list of a Haskell source file";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsimport";
        broken = true;
      }) {};
 
@@ -144339,6 +145927,7 @@ self: {
        description = "Inspect Haskell source files";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsinspect";
        broken = true;
      }) {};
 
@@ -144371,6 +145960,7 @@ self: {
        description = "LSP interface over the hsinspect binary";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsinspect-lsp";
      }) {};
 
   "hsinstall" = callPackage
@@ -144392,6 +145982,7 @@ self: {
        ];
        description = "Install Haskell software";
        license = lib.licenses.isc;
+       mainProgram = "hsinstall";
      }) {};
 
   "hskeleton" = callPackage
@@ -144421,6 +146012,7 @@ self: {
        description = "HSlackBuilder automatically generates slackBuild scripts from a cabal package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cabal2slackBuild";
        broken = true;
      }) {};
 
@@ -144454,6 +146046,7 @@ self: {
        description = "Resolves links to Haskell identifiers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hslinks";
        broken = true;
      }) {};
 
@@ -145052,6 +146645,7 @@ self: {
        description = "Tool for generating .dir-locals.el for intero";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsmodetweaks";
        broken = true;
      }) {};
 
@@ -145123,6 +146717,7 @@ self: {
        description = "Nock 5K interpreter";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsnock";
        broken = true;
      }) {};
 
@@ -145149,6 +146744,7 @@ self: {
        description = "a miniature network sniffer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsns";
        broken = true;
      }) {};
 
@@ -145557,7 +147153,8 @@ self: {
        description = "Automatically discover and run Hspec tests";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "hspec-discover";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hspec-discover" = callPackage
@@ -145578,7 +147175,8 @@ self: {
        testToolDepends = [ hspec-meta ];
        description = "Automatically discover and run Hspec tests";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "hspec-discover";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hspec-discover_2_10_0" = callPackage
@@ -145600,7 +147198,8 @@ self: {
        description = "Automatically discover and run Hspec tests";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "hspec-discover";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "hspec-expectations" = callPackage
@@ -145739,6 +147338,7 @@ self: {
        description = "Golden tests for hspec";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hgold";
      }) {};
 
   "hspec-golden" = callPackage
@@ -145756,6 +147356,7 @@ self: {
        testHaskellDepends = [ base directory hspec hspec-core silently ];
        description = "Golden tests for hspec";
        license = lib.licenses.mit;
+       mainProgram = "hgold";
      }) {};
 
   "hspec-golden-aeson" = callPackage
@@ -145938,6 +147539,7 @@ self: {
        ];
        description = "A version of Hspec which is used to test Hspec itself";
        license = lib.licenses.mit;
+       mainProgram = "hspec-meta-discover";
      }) {};
 
   "hspec-meta_2_9_3" = callPackage
@@ -145964,6 +147566,7 @@ self: {
        description = "A version of Hspec which is used to test Hspec itself";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hspec-meta-discover";
      }) {};
 
   "hspec-monad-control" = callPackage
@@ -146094,6 +147697,7 @@ self: {
        description = "Add an hspec test-suite in one command";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hspec-setup";
      }) {};
 
   "hspec-shouldbe" = callPackage
@@ -146436,6 +148040,7 @@ self: {
        description = "A terminal presentation tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hspresent";
        broken = true;
      }) {};
 
@@ -146459,6 +148064,7 @@ self: {
        description = "My opinionated Haskell project formatter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hspretty";
        broken = true;
      }) {};
 
@@ -146486,6 +148092,7 @@ self: {
        description = "The Haskell Stream Processor command line utility";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsp";
      }) {};
 
   "hsql" = callPackage
@@ -146621,6 +148228,7 @@ self: {
        description = "HsQML-based clone of Pipe Mania";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsqml-manic";
      }) {};
 
   "hsqml-demo-morris" = callPackage
@@ -146640,6 +148248,7 @@ self: {
        description = "HsQML-based implementation of Nine Men's Morris";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsqml-morris";
      }) {};
 
   "hsqml-demo-notes" = callPackage
@@ -146693,6 +148302,7 @@ self: {
        description = "HsQML-based implementation of Nine Men's Morris";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsqml-morris";
      }) {};
 
   "hsreadability" = callPackage
@@ -146863,6 +148473,7 @@ self: {
        description = "Haskell version of tar CLI utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hstar";
      }) {};
 
   "hstatistics" = callPackage
@@ -146922,6 +148533,7 @@ self: {
        description = "Runs tests via QuickCheck1 and HUnit; like quickCheck-script but uses GHC api";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hstest";
        broken = true;
      }) {};
 
@@ -146937,6 +148549,7 @@ self: {
        description = "Takes haskell source on stdin, parses it, then prettyprints it to stdout";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hstidy";
        broken = true;
      }) {};
 
@@ -146967,6 +148580,7 @@ self: {
        description = "Distributed instant messaging over Tor";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hstorchat";
      }) {};
 
   "hstox" = callPackage
@@ -147020,6 +148634,7 @@ self: {
        description = "Tradeking API bindings for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tradeking";
      }) {};
 
   "hstyle" = callPackage
@@ -147038,6 +148653,7 @@ self: {
        description = "Checks Haskell source code for style compliance";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hstyle";
        broken = true;
      }) {};
 
@@ -147060,6 +148676,7 @@ self: {
        description = "A two player abstract strategy game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hstzaar";
      }) {};
 
   "hsubconvert" = callPackage
@@ -147082,6 +148699,7 @@ self: {
        description = "One-time, faithful conversion of Subversion repositories to Git";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsubconvert";
      }) {};
 
   "hsudoku" = callPackage
@@ -147111,6 +148729,7 @@ self: {
        description = "Sudoku game with a GTK3 interface";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsudoku";
        broken = true;
      }) {};
 
@@ -147161,6 +148780,7 @@ self: {
        description = "HSX (Haskell Source with XML) allows literal XML syntax in Haskell source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trhsx";
        broken = true;
      }) {};
 
@@ -147211,6 +148831,7 @@ self: {
        description = "HSX (Haskell Source with XML) allows literal XML syntax in Haskell source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsx2hs";
        broken = true;
      }) {};
 
@@ -147240,7 +148861,7 @@ self: {
        libraryHaskellDepends = [ base ];
        description = "FFI interface to syslog(3) from POSIX.1-2001";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "hsyslog-tcp" = callPackage
@@ -147322,6 +148943,7 @@ self: {
        ];
        description = "A Haskell98 parsing tags program similar to ctags";
        license = lib.licenses.bsd3;
+       mainProgram = "htags";
      }) {};
 
   "htalkat" = callPackage
@@ -147348,6 +148970,7 @@ self: {
        executablePkgconfigDepends = [ ncurses ];
        description = "Talk across TLS";
        license = lib.licenses.gpl3Only;
+       mainProgram = "htalkat";
      }) {inherit (pkgs) ncurses;};
 
   "htar" = callPackage
@@ -147366,6 +148989,7 @@ self: {
        description = "Command-line tar archive utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htar";
        broken = true;
      }) {};
 
@@ -147412,6 +149036,7 @@ self: {
        description = "A library for testing correctness of pseudo random number generators in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "runTestu";
        broken = true;
      }) {inherit (pkgs) gcc;};
 
@@ -147444,6 +149069,7 @@ self: {
        executableHaskellDepends = [ base process time ];
        description = "Timing utility for the command line";
        license = lib.licenses.bsd3;
+       mainProgram = "htime";
      }) {};
 
   "htirage" = callPackage
@@ -147509,6 +149135,7 @@ self: {
        description = "Determine character encoding of HTML documents/fragments";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "html-charset";
        broken = true;
      }) {};
 
@@ -147662,6 +149289,7 @@ self: {
        description = "Simple tool to create html presentation for text";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htmlpt";
      }) {};
 
   "html-rules" = callPackage
@@ -147737,6 +149365,7 @@ self: {
        ];
        description = "A command-line interface for https://validator.w3.org/";
        license = lib.licenses.bsd3;
+       mainProgram = "validatehtml";
      }) {};
 
   "html2hamlet" = callPackage
@@ -147756,6 +149385,7 @@ self: {
        ];
        description = "HTML to Hamlet converter";
        license = lib.licenses.bsd3;
+       mainProgram = "html2hamlet";
      }) {};
 
   "html5-entity" = callPackage
@@ -147795,6 +149425,7 @@ self: {
        executableHaskellDepends = [ base HDBC HDBC-sqlite3 ];
        description = "A todo application";
        license = lib.licenses.bsd3;
+       mainProgram = "htodo";
      }) {};
 
   "htoml" = callPackage
@@ -147918,6 +149549,7 @@ self: {
        description = "Parse XML files from The Sports Network feed";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htsn";
        broken = true;
      }) {};
 
@@ -147962,6 +149594,7 @@ self: {
        description = "Import XML files from The Sports Network into an RDBMS";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htsn-import";
      }) {};
 
   "htssets" = callPackage
@@ -148227,6 +149860,7 @@ self: {
        ];
        description = "HTTP client overrides";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "http-client-request-modifiers" = callPackage
@@ -149060,6 +150694,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Test framework for HTTP APIs";
        license = lib.licenses.bsd3;
+       mainProgram = "test-http-test-bayeshive";
      }) {};
 
   "http-trace" = callPackage
@@ -149079,6 +150714,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Tracking http redirects";
        license = lib.licenses.mit;
+       mainProgram = "http-trace";
      }) {};
 
   "http-types" = callPackage
@@ -149186,6 +150822,7 @@ self: {
        description = "A command-line http2 client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "http2-client-exe";
      }) {};
 
   "http2-client-grpc" = callPackage
@@ -149368,6 +151005,7 @@ self: {
        description = "harmonic analyser and tuner for musical instruments";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htune";
        broken = true;
      }) {};
 
@@ -149412,6 +151050,7 @@ self: {
        description = "A two player abstract strategy game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "htzaar";
        broken = true;
      }) {};
 
@@ -149431,6 +151070,7 @@ self: {
        ];
        description = "For multiplexing GHC installations and providing development sandboxes";
        license = lib.licenses.bsd3;
+       mainProgram = "hub";
      }) {};
 
   "hubigraph" = callPackage
@@ -149468,6 +151108,7 @@ self: {
        description = "Support library for Hubris, the Ruby <=> Haskell bridge";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Hubrify";
      }) {inherit (pkgs) ruby;};
 
   "huck" = callPackage
@@ -149522,6 +151163,7 @@ self: {
        description = "A fast-foward-based planner";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "blocksWorld";
        broken = true;
      }) {};
 
@@ -149614,6 +151256,7 @@ self: {
        description = "A TUI MPD client, inspired by ncmpcpp";
        license = lib.licenses.gpl2Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hum";
        broken = true;
      }) {};
 
@@ -149692,6 +151335,7 @@ self: {
        description = "Haskell UPnP Media Server";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hums";
        broken = true;
      }) {};
 
@@ -149716,6 +151360,7 @@ self: {
        description = "CSS-like syntax for file system manipulation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hunch";
        broken = true;
      }) {};
 
@@ -149744,6 +151389,7 @@ self: {
        description = "A GUI testrunner for HUnit";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tests";
      }) {};
 
   "hunit-parsec" = callPackage
@@ -149788,6 +151434,7 @@ self: {
        description = "Unpacker tool with DWIM";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hunp";
      }) {};
 
   "hunspell-hs" = callPackage
@@ -149862,6 +151509,7 @@ self: {
        description = "A search and indexing engine server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hunt-server";
      }) {};
 
   "hunt-server-cli" = callPackage
@@ -149886,6 +151534,7 @@ self: {
        description = "A Command line Interface for the Hunt server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hunt-server-cli";
        broken = true;
      }) {hunt-client = null;};
 
@@ -149918,6 +151567,7 @@ self: {
        description = "Upload packages and/or documentation to a hackage server";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hup";
        broken = true;
      }) {};
 
@@ -149935,6 +151585,7 @@ self: {
        description = "Extract function names from Windows DLLs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hurdle";
      }) {};
 
   "hurl" = callPackage
@@ -149959,6 +151610,7 @@ self: {
        executableHaskellDepends = [ base directory network-uri ];
        description = "Haskell URL resolver";
        license = lib.licenses.gpl3Only;
+       mainProgram = "hurl";
      }) {};
 
   "hurriyet" = callPackage
@@ -150036,6 +151688,7 @@ self: {
        description = "A simple command line calculator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "husky";
        broken = true;
      }) {};
 
@@ -150058,6 +151711,7 @@ self: {
        description = "A program for the button on Reddit";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hutton";
        broken = true;
      }) {};
 
@@ -150073,6 +151727,7 @@ self: {
        description = "Quick implemention of Hutton's Razor";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "huttons-razor";
        broken = true;
      }) {};
 
@@ -150251,6 +151906,7 @@ self: {
        doHaddock = false;
        description = "Balanced parentheses";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-balancedparens";
      }) {};
 
   "hw-bits" = callPackage
@@ -150296,6 +151952,7 @@ self: {
        description = "CI Assistant for Haskell projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hw-ci-assist";
        broken = true;
      }) {};
 
@@ -150395,6 +152052,7 @@ self: {
        ];
        description = "Unbelievably fast streaming DSV file parser";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-dsv";
      }) {};
 
   "hw-dump" = callPackage
@@ -150428,6 +152086,7 @@ self: {
        ];
        description = "File Dump";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-dump";
      }) {};
 
   "hw-eliasfano" = callPackage
@@ -150465,6 +152124,7 @@ self: {
        ];
        description = "Elias-Fano";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-eliasfano";
      }) {};
 
   "hw-excess" = callPackage
@@ -150614,6 +152274,7 @@ self: {
        doHaddock = false;
        description = "Library for manipulating IP addresses and CIDR blocks";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-ip";
      }) {};
 
   "hw-json" = callPackage
@@ -150659,6 +152320,7 @@ self: {
        description = "Memory efficient JSON parser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hw-json";
      }) {};
 
   "hw-json-demo" = callPackage
@@ -150733,6 +152395,7 @@ self: {
        testToolDepends = [ doctest-discover ];
        description = "SIMD-based JSON semi-indexer";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-json-simd";
      }) {};
 
   "hw-json-simple-cursor" = callPackage
@@ -150768,6 +152431,7 @@ self: {
        ];
        description = "Memory efficient JSON parser";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-json";
      }) {};
 
   "hw-json-standard-cursor" = callPackage
@@ -150805,6 +152469,7 @@ self: {
        ];
        description = "Memory efficient JSON parser";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-json-standard-cursor";
      }) {};
 
   "hw-kafka-avro" = callPackage
@@ -150941,6 +152606,7 @@ self: {
        description = "Monadic query DSL";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hw-mquery-example";
        broken = true;
      }) {};
 
@@ -150973,6 +152639,7 @@ self: {
        ];
        description = "Packed Vector";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-packed-vector";
      }) {};
 
   "hw-parser" = callPackage
@@ -151062,6 +152729,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion vector ];
        description = "Primitive support for bit manipulation";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-prim-bits-exe";
      }) {};
 
   "hw-rankselect" = callPackage
@@ -151099,6 +152767,7 @@ self: {
        doHaddock = false;
        description = "Rank-select";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-rankselect";
      }) {};
 
   "hw-rankselect-base" = callPackage
@@ -151189,6 +152858,7 @@ self: {
        testToolDepends = [ doctest-discover ];
        description = "SIMD library";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-simd";
      }) {};
 
   "hw-streams" = callPackage
@@ -151276,6 +152946,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Library for creating and extracting tar archives";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-tar";
      }) {};
 
   "hw-uri" = callPackage
@@ -151312,6 +152983,7 @@ self: {
        description = "Supports IO on URIs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hw-uri";
      }) {};
 
   "hw-vector" = callPackage
@@ -151367,6 +153039,7 @@ self: {
        ];
        description = "XML parser based on succinct data structures";
        license = lib.licenses.bsd3;
+       mainProgram = "hw-xml";
      }) {};
 
   "hwall-auth-iitk" = callPackage
@@ -151386,6 +153059,7 @@ self: {
        description = "Initial version of firewall Authentication for IITK network";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "firewall-auth";
        broken = true;
      }) {};
 
@@ -151432,6 +153106,7 @@ self: {
        description = "An implementation of Neil D. Jones' While language";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hwhile";
        broken = true;
      }) {};
 
@@ -151451,6 +153126,7 @@ self: {
        ];
        description = "Commandline text processing with Haskell functions";
        license = lib.licenses.mit;
+       mainProgram = "hwk";
      }) {};
 
   "hworker" = callPackage
@@ -151524,6 +153200,7 @@ self: {
        description = "magic-wormhole client";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hwormhole-exe";
      }) {};
 
   "hws" = callPackage
@@ -151543,6 +153220,7 @@ self: {
        description = "Simple Haskell Web Server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hws";
      }) {};
 
   "hwsl2" = callPackage
@@ -151622,6 +153300,7 @@ self: {
        description = "Haskell XMPP (Jabber Client) Command Line Interface (CLI)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hxmppc";
      }) {};
 
   "hxournal" = callPackage
@@ -151649,6 +153328,7 @@ self: {
        description = "A pen notetaking program written in haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hxournal";
      }) {};
 
   "hxt" = callPackage
@@ -151932,6 +153612,7 @@ self: {
        executableHaskellDepends = [ base containers HUnit random ];
        description = "A Yahtzee game implementation in Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "hyahtzee";
      }) {};
 
   "hyakko" = callPackage
@@ -151954,6 +153635,7 @@ self: {
        description = "Literate-style Documentation Generator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hyakko";
        broken = true;
      }) {};
 
@@ -151972,6 +153654,7 @@ self: {
        description = "A implementation of a type-checker for Lambda-H";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hybrid";
      }) {};
 
   "hybrid-vectors" = callPackage
@@ -152073,6 +153756,7 @@ self: {
        description = "Hydrogen Data";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "h";
      }) {};
 
   "hydrogen-cli-args" = callPackage
@@ -152243,6 +153927,7 @@ self: {
        description = "WebGL live-coding environment for writing shaders with Hylogen";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hylide";
        broken = true;
      }) {};
 
@@ -152287,6 +153972,7 @@ self: {
        description = "Tableau based theorem prover for hybrid logics";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hylotab";
      }) {};
 
   "hyloutils" = callPackage
@@ -152349,6 +154035,7 @@ self: {
        description = "Server back-end for the HyperHaskell graphical Haskell interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hyper-haskell-server";
        broken = true;
      }) {};
 
@@ -152369,6 +154056,7 @@ self: {
        description = "a fast, trustworthy HTTP(s) server built";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pong";
        broken = true;
      }) {};
 
@@ -152496,6 +154184,7 @@ self: {
        description = "A parser for the _hyperscript programming language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hyperscript-exe";
        broken = true;
      }) {};
 
@@ -152613,6 +154302,7 @@ self: {
        description = "Modules for parsing, generating and manipulating AB1 files";
        license = "(BSD-3-Clause OR Apache-2.0)";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hyraxAbif-exe";
        broken = true;
      }) {};
 
@@ -152650,6 +154340,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "This package is Zaif Exchange Api wrapper";
        license = lib.licenses.bsd3;
+       mainProgram = "hzaif-exe";
      }) {};
 
   "hzenhan" = callPackage
@@ -152801,7 +154492,7 @@ self: {
        ];
        description = "iCalendar data types, parser, and printer";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "iException" = callPackage
@@ -152849,6 +154540,7 @@ self: {
        description = "An API for the Interactive Brokers Trading Workstation written in pure Haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ex";
        broken = true;
      }) {};
 
@@ -152903,6 +154595,7 @@ self: {
        description = "iCalendar format parser and org-mode converter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ical-org";
        broken = true;
      }) {};
 
@@ -153067,6 +154760,7 @@ self: {
        description = "An IDE backend library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ide-backend-exe-cabal";
      }) {};
 
   "ide-backend-common" = callPackage
@@ -153128,6 +154822,7 @@ self: {
        description = "An IDE backend server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ide-backend-server";
      }) {};
 
   "ideas" = callPackage
@@ -153167,6 +154862,7 @@ self: {
        description = "Interactive domain reasoner for logic and mathematics";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ideas-math";
      }) {};
 
   "ideas-math-types" = callPackage
@@ -153197,6 +154893,7 @@ self: {
        description = "Interactive domain reasoner for statistics";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "statistics.cgi";
      }) {};
 
   "idempotent" = callPackage
@@ -153306,6 +155003,7 @@ self: {
        description = "ID3v2 (tagging standard for MP3 files) library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "read-idiii";
        broken = true;
      }) {};
 
@@ -153364,6 +155062,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "A project manage tool for Idris";
        license = lib.licenses.bsd3;
+       mainProgram = "idrin";
      }) {};
 
   "idris" = callPackage
@@ -153598,6 +155297,7 @@ self: {
        description = "An keyboard-driven interactive graph editor";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ige";
        broken = true;
      }) {};
 
@@ -153638,6 +155338,7 @@ self: {
        description = "Handle ignore files of different VCSes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ignore";
        broken = true;
      }) {};
 
@@ -153706,6 +155407,7 @@ self: {
        ];
        description = "A Haskell backend kernel for the IPython project";
        license = lib.licenses.mit;
+       mainProgram = "ihaskell";
      }) {};
 
   "ihaskell-aeson" = callPackage
@@ -153987,6 +155689,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "Interpolated Haskell";
        license = lib.licenses.publicDomain;
+       mainProgram = "ihs";
      }) {};
 
   "ihttp" = callPackage
@@ -154006,6 +155709,7 @@ self: {
        description = "Incremental HTTP iteratee";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ihttp-test";
      }) {};
 
   "ilist" = callPackage
@@ -154046,6 +155750,7 @@ self: {
        description = "A fast syntax highlighting library built with alex";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "illuminate";
        broken = true;
      }) {};
 
@@ -154117,6 +155822,7 @@ self: {
        description = "Command-line image paste utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imagepaste";
        broken = true;
      }) {};
 
@@ -154183,6 +155889,7 @@ self: {
        description = "Downloads email from imap SSL servers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imapget";
      }) {};
 
   "imbib" = callPackage
@@ -154242,6 +155949,7 @@ self: {
        description = "Uploader for Imgur";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imgurder";
      }) {};
 
   "imj-animation" = callPackage
@@ -154280,6 +155988,7 @@ self: {
        description = "Game engine with geometry, easing, animated text, delta rendering";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imj-base-examples-exe";
      }) {};
 
   "imj-game-hamazed" = callPackage
@@ -154301,6 +156010,7 @@ self: {
        description = "A game with flying numbers and 8-bit color animations";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imj-game-hamazed-exe";
      }) {};
 
   "imj-measure-stdout" = callPackage
@@ -154317,6 +156027,7 @@ self: {
        description = "An application to determine the maximum capacity of stdout buffer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imj-measure-stdout-exe";
      }) {};
 
   "imj-prelude" = callPackage
@@ -154455,6 +156166,7 @@ self: {
        description = "Multi-platform parser analyzer and generator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imparse";
      }) {};
 
   "imperative-edsl" = callPackage
@@ -154546,7 +156258,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion linear parsec ];
        description = "A math-inspired programmatic 2D & 3D CAD system";
        license = lib.licenses.agpl3Plus;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "implicit-hie" = callPackage
@@ -154573,6 +156285,7 @@ self: {
        ];
        description = "Auto generate hie-bios cradles & hie.yaml";
        license = lib.licenses.bsd3;
+       mainProgram = "gen-hie";
      }) {};
 
   "implicit-hie-cradle" = callPackage
@@ -154865,6 +156578,7 @@ self: {
        description = "A type-checker for Haskell with integer constraints";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "inch";
      }) {};
 
   "inchworm" = callPackage
@@ -155082,6 +156796,7 @@ self: {
        executableHaskellDepends = [ base optparse-applicative text ];
        description = "Fix your indentation";
        license = lib.licenses.bsd3;
+       mainProgram = "indent";
      }) {};
 
   "indentation" = callPackage
@@ -155183,7 +156898,7 @@ self: {
        description = "Indexed Types";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
        broken = true;
      }) {};
 
@@ -155439,6 +157154,7 @@ self: {
        description = "Convenient imperative eDSL over Lorentz";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "indigo";
      }) {};
 
   "inf-interval" = callPackage
@@ -155489,6 +157205,7 @@ self: {
        description = "Find the repository from where a given repo was forked";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "infer-upstream";
        broken = true;
      }) {};
 
@@ -155559,6 +157276,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "infinity";
      }) {};
 
   "infix" = callPackage
@@ -155661,6 +157379,7 @@ self: {
        description = "A yesod subsite serving a wiki";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "informative-test";
        broken = true;
      }) {};
 
@@ -155768,6 +157487,7 @@ self: {
        ];
        description = "A minimalistic template engine";
        license = lib.licenses.mit;
+       mainProgram = "inject";
      }) {};
 
   "inject-function" = callPackage
@@ -155848,7 +157568,7 @@ self: {
        ];
        description = "Write Haskell source files including C code inline. No FFI required.";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "inline-c-cpp" = callPackage
@@ -155869,7 +157589,7 @@ self: {
        ];
        description = "Lets you embed C++ code into Haskell";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ roberth ];
+       maintainers = [ lib.maintainers.roberth ];
      }) {};
 
   "inline-c-win32" = callPackage
@@ -155968,6 +157688,7 @@ self: {
        testHaskellDepends = [ base text ];
        description = "Interactive literate programming";
        license = lib.licenses.mit;
+       mainProgram = "inlitpp";
      }) {};
 
   "input-parsers" = callPackage
@@ -155998,6 +157719,7 @@ self: {
        description = "Console client for encyclopedias";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "inquire";
        broken = true;
      }) {aether = null;};
 
@@ -156054,6 +157776,7 @@ self: {
        description = "A simple proxy for debugging plaintext protocols communication";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "inspection-proxy";
      }) {};
 
   "inspection-testing" = callPackage
@@ -156110,6 +157833,7 @@ self: {
        description = "Create benchmarks from the HAR files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "inspector-wrecker-exe";
      }) {};
 
   "instana-haskell-trace-sdk" = callPackage
@@ -156286,6 +158010,7 @@ self: {
        description = "Basic HTTP gateway to save articles to Instapaper";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "instapaper-sender";
      }) {};
 
   "instinct" = callPackage
@@ -156546,6 +158271,7 @@ self: {
        description = "Integrate different assays";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "integreat";
      }) {};
 
   "intel-aes" = callPackage
@@ -156625,6 +158351,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Interactive quick time series plotting";
        license = lib.licenses.bsd3;
+       mainProgram = "interactive-plot-demo";
      }) {};
 
   "interchangeable" = callPackage
@@ -156650,6 +158377,7 @@ self: {
        description = "Generates a version of a module using InterleavableIO";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "interleavableGen";
        broken = true;
      }) {};
 
@@ -156742,6 +158470,7 @@ self: {
        description = "Shell command for constructing custom stamps for German Post";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "internetmarke";
        broken = true;
      }) {};
 
@@ -156770,6 +158499,7 @@ self: {
        description = "Complete interactive development program for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "intero";
        broken = true;
      }) {};
 
@@ -156803,6 +158533,7 @@ self: {
        description = "Tracery-like randomized text interpolation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "interp";
        broken = true;
      }) {};
 
@@ -156828,6 +158559,7 @@ self: {
        description = "GHC preprocessor and library to enable variable interpolation in strings";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "interpol";
        broken = true;
      }) {};
 
@@ -157118,6 +158850,7 @@ self: {
        description = "A game of competitive puzzle-design";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "intricacy";
        broken = true;
      }) {inherit (pkgs) ncurses;};
 
@@ -157296,6 +159029,7 @@ self: {
        ];
        description = "Project statistics and definition analysis";
        license = lib.licenses.bsd3;
+       mainProgram = "inventory";
      }) {};
 
   "invert" = callPackage
@@ -157478,6 +159212,7 @@ self: {
        executableHaskellDepends = [ base containers ];
        description = "Skeleton library around the IO monad";
        license = lib.licenses.bsd3;
+       mainProgram = "SimpleEchoExample";
      }) {};
 
   "io-memoize" = callPackage
@@ -157504,6 +159239,7 @@ self: {
        description = "An API for generating TIMBER style reactive objects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "io-reactive-test";
        broken = true;
      }) {};
 
@@ -157655,6 +159391,7 @@ self: {
        description = "EDSL for concurrent, realtime, embedded programming on top of Ivory";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ion_example";
      }) {};
 
   "ioref-stable" = callPackage
@@ -157804,6 +159541,7 @@ self: {
        executableHaskellDepends = [ base cmdargs IPv6Addr text ];
        description = "Commandline tool to deal with IPv6 address text representations";
        license = lib.licenses.bsd3;
+       mainProgram = "ip6addr";
      }) {};
 
   "ipa" = callPackage
@@ -157841,6 +159579,7 @@ self: {
        description = "interactive patch editor";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ipatch";
      }) {};
 
   "ipc" = callPackage
@@ -158013,6 +159752,7 @@ self: {
        description = "iptables rules parser/printer library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "iptables-helpers-test";
        broken = true;
      }) {};
 
@@ -158039,6 +159779,7 @@ self: {
        description = "web-interface for iptables";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "iptadmin";
      }) {};
 
   "ipynb" = callPackage
@@ -158132,7 +159873,7 @@ self: {
        ];
        description = "An IRC client library";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "irc-colors" = callPackage
@@ -158179,7 +159920,7 @@ self: {
        testHaskellDepends = [ base hashable HUnit text ];
        description = "IRC core library for glirc";
        license = lib.licenses.isc;
-       maintainers = with lib.maintainers; [ kiwi ];
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "irc-ctcp" = callPackage
@@ -158321,6 +160062,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A library for writing IRC bots";
        license = lib.licenses.bsd3;
+       mainProgram = "ircbot-demo";
      }) {};
 
   "ircbouncer" = callPackage
@@ -158400,6 +160142,7 @@ self: {
        description = "Automated Local Cabal Package Testing and Uploading";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "iridium";
        broken = true;
      }) {};
 
@@ -158437,6 +160180,7 @@ self: {
        description = "A technical demo for Antisplice";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ironforge";
      }) {};
 
   "irt" = callPackage
@@ -158494,6 +160238,7 @@ self: {
        description = "An executable and library to determine if a file is a DICOM file";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "isdicom";
        broken = true;
      }) {};
 
@@ -158520,6 +160265,7 @@ self: {
        executableHaskellDepends = [ base gtk3 ];
        description = "A program to show the size of image and whether suitable for wallpaper";
        license = lib.licenses.bsd3;
+       mainProgram = "isiz";
      }) {};
 
   "islink" = callPackage
@@ -158700,6 +160446,7 @@ self: {
        testHaskellDepends = [ base bytestring text ];
        description = "A portable alternative to GNU Readline";
        license = lib.licenses.mit;
+       mainProgram = "example";
      }) {};
 
   "isohunt" = callPackage
@@ -158800,6 +160547,7 @@ self: {
        description = "Issue Tracker for the CLI";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "itcli";
        broken = true;
      }) {};
 
@@ -159032,6 +160780,7 @@ self: {
        executableHaskellDepends = [ base bytestring ];
        description = "Enable graphical display of images inline on some terminals";
        license = lib.licenses.bsd3;
+       mainProgram = "it2-show";
      }) {};
 
   "iterm-show-JuicyPixels" = callPackage
@@ -159198,6 +160947,7 @@ self: {
        description = "Ivory bit-data support";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ivory-bitdata-example";
      }) {};
 
   "ivory-eval" = callPackage
@@ -159240,6 +160990,7 @@ self: {
        description = "Ivory examples";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ivory-c-clang-test";
      }) {};
 
   "ivory-hw" = callPackage
@@ -159350,9 +161101,7 @@ self: {
        librarySystemDepends = [ wirelesstools ];
        description = "Bindings for the iw C library";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) wirelesstools;};
 
   "ix" = callPackage
@@ -159398,6 +161147,7 @@ self: {
        description = "A preprocessor for expanding \"ixdo\" notation for indexed monads";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ixdopp";
        broken = true;
      }) {};
 
@@ -159549,6 +161299,7 @@ self: {
        description = "CLI (command line interface) to YQL";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "iyql";
      }) {};
 
   "j" = callPackage
@@ -159586,6 +161337,7 @@ self: {
        description = "j2hs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "j2hs";
      }) {};
 
   "ja-base-extra" = callPackage
@@ -159630,7 +161382,8 @@ self: {
        description = "Functional, expression-oriented data processing language";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       mainProgram = "ja";
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "jack" = callPackage
@@ -159721,6 +161474,7 @@ self: {
        description = "Generate flamegraphs from Jaeger .json dumps.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jaeger-flamegraph";
        broken = true;
      }) {};
 
@@ -159751,7 +161505,8 @@ self: {
        executableHaskellDepends = [ base Cabal Cabal-syntax ];
        description = "Strip version restrictions from Cabal files";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "jailbreak-cabal";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "jalaali" = callPackage
@@ -159809,6 +161564,7 @@ self: {
        executableHaskellDepends = [ base boxes directory filepath ];
        description = "Export sheet music and audio from Windows/Mac app Jammit";
        license = lib.licenses.gpl3Only;
+       mainProgram = "jammittools";
      }) {};
 
   "japanese-calendar" = callPackage
@@ -159855,6 +161611,7 @@ self: {
        description = "Tool for searching java classes, members and fields in classfiles and JAR archives";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jarf";
        broken = true;
      }) {};
 
@@ -159878,6 +161635,7 @@ self: {
        description = "Jarification of Haskell sources";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jarify";
        broken = true;
      }) {};
 
@@ -159899,6 +161657,7 @@ self: {
        description = "A fast JASONETTE-iOS JSON combinator library for haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jason";
        broken = true;
      }) {};
 
@@ -159915,6 +161674,7 @@ self: {
        executableToolDepends = [ alex happy ];
        description = "Create immutable algebraic data structures for Java";
        license = "unknown";
+       mainProgram = "java-adt";
      }) {};
 
   "java-bridge" = callPackage
@@ -159978,6 +161738,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "The etude of the Haskell programming";
        license = lib.licenses.mit;
+       mainProgram = "java-poker";
      }) {};
 
   "java-reflect" = callPackage
@@ -160055,6 +161816,7 @@ self: {
        description = "Extra javascript functions when using GHCJS";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "javascript-extras-test";
      }) {};
 
   "javasf" = callPackage
@@ -160076,6 +161838,7 @@ self: {
        description = "A utility to print the SourceFile attribute of one or more Java class files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "javasf";
      }) {};
 
   "javav" = callPackage
@@ -160093,6 +161856,7 @@ self: {
        description = "A utility to print the target version of Java class files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "javav";
        broken = true;
      }) {};
 
@@ -160116,6 +161880,7 @@ self: {
        description = "Just Build It - a \"do what I mean\" abstraction for Haskell build tools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jbi";
        broken = true;
      }) {};
 
@@ -160153,6 +161918,7 @@ self: {
        description = "Implementation of Java Debug Interface";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Test";
        broken = true;
      }) {};
 
@@ -160176,6 +161942,7 @@ self: {
        description = "Generate a cabal freeze file from a stack.yaml";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jenga";
        broken = true;
      }) {};
 
@@ -160202,6 +161969,7 @@ self: {
        description = "Generate nix for Jenkins plugins";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jenkinsPlugins2nix";
        broken = true;
      }) {};
 
@@ -160233,6 +162001,7 @@ self: {
        description = "Extract all JavaScript from an HTML page and consolidate it in one script";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jespresso";
      }) {};
 
   "jet" = callPackage
@@ -160271,6 +162040,7 @@ self: {
          vector vty
        ];
        license = lib.licenses.bsd3;
+       mainProgram = "jet";
      }) {};
 
   "jet-stream" = callPackage
@@ -160315,6 +162085,7 @@ self: {
        description = "Unit conversion and manipulation library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quantities";
        broken = true;
      }) {};
 
@@ -160333,6 +162104,7 @@ self: {
        testHaskellDepends = [ base parsec tasty tasty-hunit text ];
        description = "Handle Jira wiki markup";
        license = lib.licenses.mit;
+       mainProgram = "jira-wiki-markup";
      }) {};
 
   "jl" = callPackage
@@ -160357,6 +162129,7 @@ self: {
        ];
        description = "Functional sed for JSON";
        license = lib.licenses.bsd3;
+       mainProgram = "jl";
      }) {};
 
   "jmacro" = callPackage
@@ -160384,6 +162157,7 @@ self: {
        description = "QuasiQuotation library for programmatic generation of Javascript code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jmacro";
      }) {};
 
   "jmacro-rpc" = callPackage
@@ -160695,6 +162469,7 @@ self: {
        description = "JP's own ray tracer";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jort";
        broken = true;
      }) {};
 
@@ -160767,6 +162542,7 @@ self: {
        ];
        description = "Tiny markdown notebook";
        license = lib.licenses.isc;
+       mainProgram = "jot";
      }) {};
 
   "joy-rewrite" = callPackage
@@ -160815,6 +162591,7 @@ self: {
        executableHaskellDepends = [ base optparse-applicative time ];
        description = "Ephemerides for solar system objects from the JPL Horizons service";
        license = lib.licenses.bsd3;
+       mainProgram = "jh-csv";
      }) {};
 
   "jps" = callPackage
@@ -160965,9 +162742,7 @@ self: {
        ];
        description = "JSaddle Hello World, an example package";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "jsaddle-warp" = callPackage
@@ -161013,9 +162788,7 @@ self: {
        ];
        description = "Interface for JavaScript that works with GHCJS and GHC";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "jsaddle-webkitgtk" = callPackage
@@ -161256,6 +163029,7 @@ self: {
        description = "Automatic type declaration for JSON input data";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "json-autotype";
      }) {};
 
   "json-b" = callPackage
@@ -161279,6 +163053,7 @@ self: {
        description = "JSON parser that uses byte strings";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "json-schema";
      }) {};
 
   "json-builder" = callPackage
@@ -161337,6 +163112,7 @@ self: {
        description = "Load JSON from files in a directory structure";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jsondir";
        broken = true;
      }) {};
 
@@ -161866,6 +163642,7 @@ self: {
          recursion-schemes text unordered-containers vector
        ];
        license = lib.licenses.bsd3;
+       mainProgram = "json-to-haskell";
      }) {};
 
   "json-togo" = callPackage
@@ -162027,6 +163804,7 @@ self: {
        executableHaskellDepends = [ aeson base bytestring yaml ];
        description = "Utility to convert a file from JSON to YAML format. (deprecated)";
        license = lib.licenses.bsd3;
+       mainProgram = "json2yaml";
      }) {};
 
   "json5hs" = callPackage
@@ -162063,6 +163841,7 @@ self: {
        description = "Filter select values in JSON objects to unix programs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jsonextfilter";
        broken = true;
      }) {};
 
@@ -162183,6 +163962,7 @@ self: {
        description = "Jsonnet implementaton in pure Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-jsonnet";
        broken = true;
      }) {};
 
@@ -162293,6 +164073,7 @@ self: {
        description = "JSON to JSON Schema";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jsons-to-schema-exe";
      }) {};
 
   "jsonschema-gen" = callPackage
@@ -162337,6 +164118,7 @@ self: {
        description = "Interpolate JSON object values into SQL strings";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jsonsql";
        broken = true;
      }) {};
 
@@ -162359,6 +164141,7 @@ self: {
        description = "JSON to TSV transformer";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jsontsv";
        broken = true;
      }) {};
 
@@ -162381,6 +164164,7 @@ self: {
        description = "json to xlsx converter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jsonxlsx";
        broken = true;
      }) {};
 
@@ -162447,6 +164231,7 @@ self: {
        ];
        description = "Manage users in MariaDB >= 10.1.1";
        license = lib.licenses.mit;
+       mainProgram = "juandelacosa";
      }) {};
 
   "judge" = callPackage
@@ -162474,6 +164259,7 @@ self: {
        description = "Tableau-based theorem prover for justification logic";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "judge";
        broken = true;
      }) {};
 
@@ -162508,6 +164294,7 @@ self: {
        executableHaskellDepends = [ base JuicyPixels ];
        description = "Draw and fill lines, rectangles and polygons";
        license = lib.licenses.mit;
+       mainProgram = "juicy-draw-demo";
      }) {};
 
   "juicy-gcode" = callPackage
@@ -162527,6 +164314,7 @@ self: {
        description = "SVG to G-Code converter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "juicy-gcode";
        broken = true;
      }) {};
 
@@ -162549,6 +164337,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A first-order reasoning toolbox";
        license = lib.licenses.bsd3;
+       mainProgram = "jukebox";
      }) {};
 
   "jump" = callPackage
@@ -162575,6 +164364,7 @@ self: {
        executableHaskellDepends = [ base parallel ];
        description = "an elementary symmetric chiffre for pragmatically protecting one's effects";
        license = lib.licenses.bsd3;
+       mainProgram = "jumpthefive";
      }) {};
 
   "junit-xml" = callPackage
@@ -162902,6 +164692,7 @@ self: {
        description = "GLUT events via a Kafka message broker";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kafka-device-glut";
      }) {};
 
   "kafka-device-joystick" = callPackage
@@ -162923,6 +164714,7 @@ self: {
        description = "Linux joystick events via a Kafka message broker";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kafka-device-joystick";
      }) {};
 
   "kafka-device-leap" = callPackage
@@ -162942,6 +164734,7 @@ self: {
        description = "Leap Motion events via a Kafka message broker";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kafka-device-leap";
      }) {};
 
   "kafka-device-spacenav" = callPackage
@@ -162963,6 +164756,7 @@ self: {
        description = "Linux SpaceNavigator events via a Kafka message broker";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kafka-device-spacenav";
      }) {};
 
   "kafka-device-vrpn" = callPackage
@@ -162978,6 +164772,7 @@ self: {
        description = "VRPN events via a Kafka message broker";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kafka-device-vrpn";
      }) {};
 
   "kaleidoscope" = callPackage
@@ -163519,6 +165314,7 @@ self: {
        description = "Client for the Kattis judge system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "katt";
        broken = true;
      }) {};
 
@@ -163554,6 +165350,7 @@ self: {
        description = "A haskell implementation of Katydid";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "katydid-exe";
        broken = true;
      }) {};
 
@@ -163576,6 +165373,7 @@ self: {
        testHaskellDepends = [ base hedgehog text unordered-containers ];
        description = "Key-value store in single files";
        license = lib.licenses.bsd3;
+       mainProgram = "kawa";
      }) {};
 
   "kawaii" = callPackage
@@ -163717,6 +165515,7 @@ self: {
        description = "Build profiles for kdesrc-build";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kdesrc-build-extra";
        broken = true;
      }) {};
 
@@ -163736,6 +165535,7 @@ self: {
        ];
        description = "Build profiles for kdesrc-build";
        license = lib.licenses.gpl3Only;
+       mainProgram = "kdesrc-build-profiles";
      }) {};
 
   "kdt" = callPackage
@@ -163783,6 +165583,7 @@ self: {
        description = "cryptographic functions based on the sponge construction";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "collision";
        broken = true;
      }) {};
 
@@ -163812,6 +165613,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "keenser-exe";
      }) {};
 
   "keep-alive" = callPackage
@@ -164191,6 +165993,7 @@ self: {
        description = "Get notifications when your sitting posture is inappropriate";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "keera-posture";
      }) {inherit (pkgs) SDL_mixer;};
 
   "keid-core" = callPackage
@@ -164216,10 +166019,7 @@ self: {
        ];
        description = "Core parts of Keid engine";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {};
@@ -164253,10 +166053,7 @@ self: {
        ];
        description = "Geometry primitives for Keid engine";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -164278,10 +166075,7 @@ self: {
        ];
        description = "Basic rendering programs for Keid engine";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -164316,10 +166110,7 @@ self: {
        ];
        description = "OpenAL sound system for Keid engine";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -164338,10 +166129,7 @@ self: {
        ];
        description = "DearImGui elements for Keid engine";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -164365,6 +166153,7 @@ self: {
        description = "Multi-process orchestration for development and integration testing";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "keiretsu";
        broken = true;
      }) {};
 
@@ -164401,6 +166190,7 @@ self: {
        description = "Kempe compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kc";
        broken = true;
      }) {};
 
@@ -164486,6 +166276,7 @@ self: {
        ];
        description = "Web application deployment manager, focusing on Haskell web frameworks";
        license = lib.licenses.mit;
+       mainProgram = "keter";
      }) {};
 
   "kevin" = callPackage
@@ -164507,6 +166298,7 @@ self: {
        description = "a dAmn ↔ IRC proxy";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kevin";
      }) {};
 
   "kewar" = callPackage
@@ -164524,6 +166316,7 @@ self: {
        description = "CLI and library to generate QR codes";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kewar";
        broken = true;
      }) {};
 
@@ -164587,6 +166380,7 @@ self: {
        executableHaskellDepends = [ base hslogger ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -164691,6 +166485,7 @@ self: {
        description = "back up a secret key securely to the cloud";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "keysafe";
      }) {};
 
   "keystore" = callPackage
@@ -164763,6 +166558,7 @@ self: {
        description = "Extract data from a keyword-args config file format";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "keyword-args";
      }) {};
 
   "khph" = callPackage
@@ -164783,6 +166579,7 @@ self: {
        description = "Command-line file tagging and organization tool";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "khph";
        broken = true;
      }) {};
 
@@ -164889,6 +166686,7 @@ self: {
        description = "Process KIF iOS test logs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kif-parser";
      }) {};
 
   "kind-apply" = callPackage
@@ -164961,6 +166759,7 @@ self: {
        description = "A dependency manager for Xcode (Objective-C) projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kit";
      }) {};
 
   "kleene" = callPackage
@@ -165051,6 +166850,7 @@ self: {
        description = "An implementation of the kmeans clustering algorithm based on the vector package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kmeans-example";
      }) {};
 
   "kmn-programming" = callPackage
@@ -165068,6 +166868,7 @@ self: {
        ];
        description = "K_M,N quadratic programming";
        license = lib.licenses.bsd3;
+       mainProgram = "kmn-programming";
      }) {};
 
   "kmonad" = callPackage
@@ -165088,6 +166889,7 @@ self: {
        description = "Advanced keyboard remapping utility";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "kmonad";
        broken = true;
      }) {};
 
@@ -165221,6 +167023,7 @@ self: {
        description = "Khovanov homology computations";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Rolfsen-Kh";
        broken = true;
      }) {};
 
@@ -165269,6 +167072,7 @@ self: {
        description = "CLI tool for installing rpms directly from Fedora Koji";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "koji-install";
      }) {};
 
   "koji-tool" = callPackage
@@ -165292,6 +167096,7 @@ self: {
        description = "Koji CLI tool for querying tasks and installing builds";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "koji-tool";
      }) {};
 
   "koneko" = callPackage
@@ -165325,6 +167130,7 @@ self: {
        description = "a concatenative not-quite-lisp for kittens";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "koneko";
        broken = true;
      }) {};
 
@@ -165418,6 +167224,7 @@ self: {
        description = "The Korfu ORF Utility";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "korfu";
      }) {};
 
   "kparams" = callPackage
@@ -165434,6 +167241,7 @@ self: {
        doHaddock = false;
        description = "Extracts values from /proc/cmdline";
        license = lib.licenses.mit;
+       mainProgram = "kparams";
      }) {};
 
   "kqueue" = callPackage
@@ -165447,7 +167255,9 @@ self: {
        libraryToolDepends = [ c2hs ];
        description = "A binding to the kqueue event library";
        license = lib.licenses.bsd3;
-       platforms = [ "aarch64-darwin" "x86_64-darwin" ];
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "aarch64-linux" "armv7l-linux"
+       ];
      }) {};
 
   "kraken" = callPackage
@@ -165498,6 +167308,7 @@ self: {
        description = "Krank checks issue tracker link status in your source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "krank";
        broken = true;
      }) {};
 
@@ -165876,6 +167687,7 @@ self: {
        description = "an experiment management framework";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "labor-example";
      }) {};
 
   "labsat" = callPackage
@@ -165900,6 +167712,7 @@ self: {
        description = "LabSat TCP Interface Wrapper";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "labsat";
      }) {};
 
   "labyrinth" = callPackage
@@ -165956,6 +167769,7 @@ self: {
        description = "A complicated turn-based game - Web server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "labyrinth-server";
      }) {};
 
   "lackey" = callPackage
@@ -166049,6 +167863,7 @@ self: {
        description = "A bridge from Haskell (on a CPU) to VHDL on a FPGA";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-test1";
        broken = true;
      }) {};
 
@@ -166076,6 +167891,7 @@ self: {
        description = "A lambda calculus interpreter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambda-calculator";
      }) {};
 
   "lambda-calculus-interpreter" = callPackage
@@ -166091,6 +167907,7 @@ self: {
        testHaskellDepends = [ base tasty tasty-hunit ];
        description = "Lambda Calculus interpreter";
        license = lib.licenses.bsd3;
+       mainProgram = "lci";
      }) {};
 
   "lambda-canvas" = callPackage
@@ -166149,6 +167966,7 @@ self: {
        description = "a Paralell-DEVS implementaion based on distributed-process";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambda-devs-example";
      }) {};
 
   "lambda-options" = callPackage
@@ -166207,6 +168025,7 @@ self: {
        description = "An application to work with the lambda calculus (for learning)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambda-toolbox";
        broken = true;
      }) {};
 
@@ -166222,6 +168041,7 @@ self: {
        description = "Untyped Lambda calculus to JavaScript compiler";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambda2js";
        broken = true;
      }) {};
 
@@ -166250,6 +168070,7 @@ self: {
        description = "RSS 2.0 feed generator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdaFeed";
      }) {};
 
   "lambdaLit" = callPackage
@@ -166268,6 +168089,7 @@ self: {
        description = "...";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdaLit";
      }) {};
 
   "lambdabot" = callPackage
@@ -166290,7 +168112,8 @@ self: {
        ];
        description = "Lambdabot is a development tool and advanced IRC bot";
        license = "GPL";
-       maintainers = with lib.maintainers; [ ncfavier ];
+       mainProgram = "lambdabot";
+       maintainers = [ lib.maintainers.ncfavier ];
      }) {};
 
   "lambdabot-core" = callPackage
@@ -166459,6 +168282,7 @@ self: {
        description = "Lambdabot for Telegram";
        license = lib.licenses.gpl2Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "telegram-lambdabot";
        broken = true;
      }) {};
 
@@ -166519,6 +168343,7 @@ self: {
        description = "Lambdabot plugin for XMPP (Jabber) protocol";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdabot-xmpp";
        broken = true;
      }) {};
 
@@ -166541,6 +168366,7 @@ self: {
        description = "Lambdabot for Zulip Chat";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lamdabot-zulip-server";
      }) {};
 
   "lambdacat" = callPackage
@@ -166560,6 +168386,7 @@ self: {
        description = "Webkit Browser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdacat";
      }) {};
 
   "lambdacms-core" = callPackage
@@ -166617,6 +168444,7 @@ self: {
        description = "A simple lambda cube type checker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cube";
      }) {};
 
   "lambdacube-bullet" = callPackage
@@ -166656,6 +168484,7 @@ self: {
        description = "LambdaCube 3D is a DSL to program GPUs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lc";
      }) {};
 
   "lambdacube-core" = callPackage
@@ -166862,6 +168691,7 @@ self: {
        description = "Diff Viewer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lambdiff";
      }) {};
 
   "lame" = callPackage
@@ -166952,6 +168782,7 @@ self: {
        description = "Parser, pretty-printer, and more for the Modula-2 programming language";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parse";
      }) {};
 
   "language-asn" = callPackage
@@ -166991,6 +168822,7 @@ self: {
        ];
        description = "Parsing of ASN1 definitions";
        license = lib.licenses.bsd3;
+       mainProgram = "dump-asn1-ast";
      }) {};
 
   "language-ats" = callPackage
@@ -167074,6 +168906,7 @@ self: {
        description = "Interpreter and language infrastructure for Boogie";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "boogaloo";
      }) {};
 
   "language-c" = callPackage
@@ -167092,7 +168925,7 @@ self: {
        testHaskellDepends = [ base directory filepath process ];
        description = "Analysis and generation of C code";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {};
 
   "language-c-comments" = callPackage
@@ -167303,6 +169136,7 @@ self: {
        doHaddock = false;
        description = "A language for generative literature";
        license = lib.licenses.bsd3;
+       mainProgram = "emd";
      }) {};
 
   "language-docker" = callPackage
@@ -167393,6 +169227,7 @@ self: {
        testHaskellDepends = [ base parsec ];
        description = "A library for the analysis and creation of Graphviz DOT files";
        license = lib.licenses.bsd3;
+       mainProgram = "ppdot";
      }) {};
 
   "language-ecmascript" = callPackage
@@ -167536,6 +169371,7 @@ self: {
        ];
        description = "GLSL abstract syntax tree, parser, and pretty-printer";
        license = lib.licenses.bsd3;
+       mainProgram = "glsl-pprint";
      }) {};
 
   "language-go" = callPackage
@@ -167803,6 +169639,7 @@ self: {
        description = "Parser, pretty-printer, and AST types for the MIXAL assembly language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mixal-pretty";
        broken = true;
      }) {};
 
@@ -167858,7 +169695,7 @@ self: {
        ];
        description = "Data types and functions to represent the Nix language";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "language-oberon" = callPackage
@@ -167891,6 +169728,7 @@ self: {
        description = "Parser, pretty-printer, and more for the Oberon programming language";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parse";
      }) {};
 
   "language-objc" = callPackage
@@ -167954,6 +169792,7 @@ self: {
        description = "A simple parser for OpenSCAD";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Test";
        broken = true;
      }) {};
 
@@ -168065,6 +169904,7 @@ self: {
        description = "Generate coloured XHTML for Python code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pycol";
      }) {};
 
   "language-python-test" = callPackage
@@ -168535,11 +170375,8 @@ self: {
        ];
        description = "Efficiently hash (large) Haskell values";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       badPlatforms = [ "aarch64-linux" ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "large-records" = callPackage
@@ -168600,6 +170437,7 @@ self: {
        description = "Tool to track security alerts on LWN";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lat";
      }) {};
 
   "latest-npm-version" = callPackage
@@ -168631,6 +170469,7 @@ self: {
        description = "Find the latest version of a package on npm";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "latest-npm-version";
      }) {};
 
   "latex" = callPackage
@@ -168703,6 +170542,7 @@ self: {
        description = "Render LaTeX formulae in pandoc documents to images with an actual LaTeX installation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "latex-formulae-filter";
      }) {};
 
   "latex-function-tables" = callPackage
@@ -168725,6 +170565,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Function table specifications in latex";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "latex-live-snippets" = callPackage
@@ -168740,6 +170581,7 @@ self: {
        ];
        description = "Automatically inline Haskell snippets into LaTeX documents";
        license = lib.licenses.bsd3;
+       mainProgram = "latex-live-snippets";
      }) {};
 
   "latex-svg-hakyll" = callPackage
@@ -168795,6 +170637,7 @@ self: {
        description = "Render LaTeX formulae in pandoc documents to images with an actual LaTeX";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "latex-svg-filter";
      }) {};
 
   "lattices" = callPackage
@@ -168873,6 +170716,7 @@ self: {
        description = "High and low-level interface to the Novation Launchpad midi controller";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "launchpad-control-examples";
        broken = true;
      }) {};
 
@@ -168986,6 +170830,7 @@ self: {
        description = "A prototypical 2d platform game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "layers";
      }) {};
 
   "layout" = callPackage
@@ -169120,6 +170965,7 @@ self: {
        executableHaskellDepends = [ base bytestring ];
        description = "Efficient lazy parsers for CSV (comma-separated values)";
        license = lib.licenses.bsd3;
+       mainProgram = "csvSelect";
      }) {};
 
   "lazy-hash" = callPackage
@@ -169201,6 +171047,7 @@ self: {
        description = "Lazy-Spined Monadic Priority Queues";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Levenshtein";
        broken = true;
      }) {};
 
@@ -169414,6 +171261,7 @@ self: {
        description = "See README for synopsis";
        license = lib.licenses.agpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ldap-scim-bridge";
      }) {};
 
   "ldapply" = callPackage
@@ -169433,6 +171281,7 @@ self: {
        description = "LDIF idempotent apply tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ldapply";
      }) {};
 
   "ldif" = callPackage
@@ -169476,6 +171325,7 @@ self: {
        description = "A simple portfolio generator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "leaf";
        broken = true;
      }) {};
 
@@ -169496,6 +171346,7 @@ self: {
        description = "Robust space leak, and its strictification";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "leaky";
      }) {};
 
   "lean" = callPackage
@@ -169761,7 +171612,7 @@ self: {
        ];
        description = "LEB128 and SLEB128 encoding";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ nomeata ];
+       maintainers = [ lib.maintainers.nomeata ];
      }) {};
 
   "leetify" = callPackage
@@ -169777,6 +171628,7 @@ self: {
        description = "Leetify text";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "leetify";
        broken = true;
      }) {};
 
@@ -169791,6 +171643,7 @@ self: {
        executableHaskellDepends = [ base hscharm random random-shuffle ];
        description = "left4dead-inspired roguelike";
        license = lib.licenses.bsd3;
+       mainProgram = "left4deadrl";
      }) {};
 
   "legion" = callPackage
@@ -169839,6 +171692,7 @@ self: {
        description = "A discovery service based on Legion";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "legion-discovery";
      }) {};
 
   "legion-discovery-client" = callPackage
@@ -169919,6 +171773,7 @@ self: {
        description = "Haskell IDE written in Haskell";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "leksah";
      }) {inherit (pkgs) gtk3;};
 
   "leksah-server" = callPackage
@@ -170469,7 +172324,7 @@ self: {
        description = "Tutorial for the lens library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
        broken = true;
      }) {};
 
@@ -170574,7 +172429,8 @@ self: {
        ];
        description = "frugal issue tracker";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ rvl ];
+       mainProgram = "lentil";
+       maintainers = [ lib.maintainers.rvl ];
      }) {};
 
   "lenz" = callPackage
@@ -170843,6 +172699,7 @@ self: {
        description = "Lens GUI Toolkit";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lgtkdemo";
      }) {};
 
   "lha" = callPackage
@@ -170875,6 +172732,7 @@ self: {
        description = "Simple spreadsheet program";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lhae";
      }) {};
 
   "lhc" = callPackage
@@ -170921,6 +172779,7 @@ self: {
        description = "Literate highlighter preprocessor for lhs2tex";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lhs2TeX-hl";
        broken = true;
      }) {};
 
@@ -170936,6 +172795,7 @@ self: {
        executableHaskellDepends = [ base directory filepath Glob ];
        description = "Compile lhs in bird style to md, html, hs";
        license = lib.licenses.publicDomain;
+       mainProgram = "lhs2html";
      }) {};
 
   "lhs2tex" = callPackage
@@ -170956,7 +172816,8 @@ self: {
        ];
        description = "Preprocessor for typesetting Haskell sources with LaTeX";
        license = "GPL";
-       maintainers = with lib.maintainers; [ nomeata ];
+       mainProgram = "lhs2TeX";
+       maintainers = [ lib.maintainers.nomeata ];
      }) {};
 
   "lhslatex" = callPackage
@@ -170973,6 +172834,7 @@ self: {
        description = "Tool for using pdflatex with .lhs files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lhslatex";
        broken = true;
      }) {};
 
@@ -170989,6 +172851,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "A binding to the libBF library";
        license = lib.licenses.mit;
+       mainProgram = "bf-test";
      }) {};
 
   "libGenI" = callPackage
@@ -171212,6 +173075,7 @@ self: {
        description = "Backend for text editors to provide better Haskell editing support";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "libhbb-cli";
        broken = true;
      }) {};
 
@@ -171431,6 +173295,7 @@ self: {
        ];
        description = "Bindings for libmdbx, an embedded key/value store";
        license = lib.licenses.bsd3;
+       mainProgram = "libmdbx-exe";
      }) {};
 
   "libmodbus" = callPackage
@@ -171443,9 +173308,7 @@ self: {
        librarySystemDepends = [ modbus ];
        description = "Haskell bindings to the C modbus library";
        license = lib.licenses.bsd2;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {modbus = null;};
 
   "libmolude" = callPackage
@@ -171573,6 +173436,7 @@ self: {
        description = "Bindings to liboath";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "oathtool-hs";
        broken = true;
      }) {liboath = null; oath = null;};
 
@@ -171672,6 +173536,7 @@ self: {
        description = "Raft consensus algorithm";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "raft-example";
      }) {};
 
   "librandomorg" = callPackage
@@ -171879,9 +173744,7 @@ self: {
        libraryPkgconfigDepends = [ systemd ];
        description = "Haskell bindings to libsystemd-journal";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {inherit (pkgs) systemd;};
@@ -171916,9 +173779,7 @@ self: {
        libraryPkgconfigDepends = [ libtelnet ];
        description = "Bindings to libtelnet";
        license = lib.licenses.gpl3Plus;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) libtelnet;};
 
   "libversion" = callPackage
@@ -171944,10 +173805,7 @@ self: {
        libraryToolDepends = [ c2hs ];
        description = "FFI bindings to libvirt virtualization API (http://libvirt.org)";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "aarch64-linux" "armv7l-linux" "i686-linux"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" ];
      }) {inherit (pkgs) libvirt;};
 
   "libvorbis" = callPackage
@@ -172088,10 +173946,9 @@ self: {
        executableSystemDepends = [ nvpair zfs ];
        description = "Bindings to libzfs, for dealing with the Z File System and Zpools";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {nvpair = null; inherit (pkgs) zfs;};
 
@@ -172113,6 +173970,7 @@ self: {
        description = "A license compatibility helper";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "licensor";
        broken = true;
      }) {};
 
@@ -172129,6 +173987,7 @@ self: {
        description = "Lie Algebras";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Lie";
        broken = true;
      }) {};
 
@@ -172144,6 +174003,7 @@ self: {
        executableHaskellDepends = [ array base GLUT OpenGL random ];
        description = "Conway's Life cellular automaton";
        license = lib.licenses.bsd3;
+       mainProgram = "life";
      }) {};
 
   "life-sync" = callPackage
@@ -172171,6 +174031,7 @@ self: {
        description = "Synchronize personal configs across multiple machines";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "life";
        broken = true;
      }) {};
 
@@ -172374,6 +174235,7 @@ self: {
        description = "A boulderdash-like game and solution validator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lifter";
        broken = true;
      }) {};
 
@@ -172488,6 +174350,7 @@ self: {
        description = "LightStep OpenTracing client library";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lightstep-haskell-stress-test";
      }) {};
 
   "lighttpd-conf" = callPackage
@@ -172629,6 +174492,7 @@ self: {
        description = "Zen gardening, based on l-systems";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "linden-example";
        broken = true;
      }) {};
 
@@ -172708,6 +174572,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Convert newlines in text";
        license = lib.licenses.gpl3Only;
+       mainProgram = "linebreak";
      }) {};
 
   "line-drawing" = callPackage
@@ -172735,6 +174600,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Display the number of bytes of each line";
        license = lib.licenses.gpl3Only;
+       mainProgram = "line-size";
      }) {};
 
   "line2pdf" = callPackage
@@ -172749,6 +174615,7 @@ self: {
        executableHaskellDepends = [ base bytestring containers ];
        description = "Simple command-line utility to convert text into PDF";
        license = lib.licenses.bsd3;
+       mainProgram = "line2pdf";
      }) {};
 
   "linear" = callPackage
@@ -172815,6 +174682,7 @@ self: {
        description = "A linear algebra library with bindings to BLAS and LAPACK";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-hs-linear-algebra";
        broken = true;
      }) {};
 
@@ -173046,10 +174914,7 @@ self: {
        libraryHaskellDepends = [ base sbv ];
        description = "Use SMT solvers to solve linear systems over integers and rationals";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
      }) {};
 
   "linearmap-category" = callPackage
@@ -173146,6 +175011,7 @@ self: {
        ];
        description = "A lightweight readline-replacement library for Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "linenoise-demo";
      }) {};
 
   "lines-of-action" = callPackage
@@ -173182,6 +175048,7 @@ self: {
        description = "File extension based programming language detection";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "generate";
        broken = true;
      }) {};
 
@@ -173232,6 +175099,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Check for broken links in CI";
        license = lib.licenses.mit;
+       mainProgram = "linkcheck";
      }) {};
 
   "linkchk" = callPackage
@@ -173250,6 +175118,7 @@ self: {
        description = "linkchk is a network interface link ping monitor";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "linkchk";
      }) {};
 
   "linkcore" = callPackage
@@ -173267,6 +175136,7 @@ self: {
        description = "Combines multiple GHC Core modules into a single module";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "linkcore";
      }) {};
 
   "linked-list-with-iterator" = callPackage
@@ -173488,9 +175358,7 @@ self: {
        libraryHaskellDepends = [ base bytestring time unix ];
        description = "Bindings to Linux evdev input device interface";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "linux-file-extents" = callPackage
@@ -173504,9 +175372,7 @@ self: {
        libraryHaskellDepends = [ base unix ];
        description = "Retrieve file fragmentation information under Linux";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "linux-framebuffer" = callPackage
@@ -173529,9 +175395,7 @@ self: {
        libraryHaskellDepends = [ base bytestring hashable unix ];
        description = "Thinner binding to the Linux Kernel's inotify interface";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "linux-kmod" = callPackage
@@ -173557,9 +175421,7 @@ self: {
        libraryHaskellDepends = [ base bytestring ];
        description = "Mount and unmount filesystems";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "linux-namespaces" = callPackage
@@ -173571,9 +175433,7 @@ self: {
        libraryHaskellDepends = [ base bytestring unix ];
        description = "Work with linux namespaces: create new or enter existing ones";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "linux-perf" = callPackage
@@ -173648,6 +175508,7 @@ self: {
        description = "Implementation of the Enea LINX gateway protocol";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Ping";
        broken = true;
      }) {};
 
@@ -173692,9 +175553,7 @@ self: {
        ];
        description = "Labeled File System interface for LIO";
        license = "GPL";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "lio-simple" = callPackage
@@ -173720,6 +175579,7 @@ self: {
        description = "LIO support for the Simple web framework";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lio-simple";
      }) {};
 
   "lion" = callPackage
@@ -173859,6 +175719,7 @@ self: {
        description = "Predicate Abstraction-based Horn-Clause/Implication Constraint Solver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "fixpoint";
      }) {inherit (pkgs) git; inherit (pkgs) nettools; 
          inherit (pkgs) z3;};
 
@@ -173909,6 +175770,7 @@ self: {
        description = "A battery-included platform for LiquidHaskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "liquidhaskell";
      }) {};
 
   "liquid-prelude" = callPackage
@@ -173981,6 +175843,7 @@ self: {
        description = "Liquid Types for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "liquid";
      }) {inherit (pkgs) z3;};
 
   "liquidhaskell-cabal" = callPackage
@@ -174012,6 +175875,7 @@ self: {
        description = "Demo of Liquid Haskell integration for Cabal and Stack";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ffi";
      }) {};
 
   "lispparser" = callPackage
@@ -174157,6 +176021,7 @@ self: {
        description = "List all remote forwards for mail accounts stored in a SQL database";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "list-remote-forwards";
        broken = true;
      }) {};
 
@@ -174296,7 +176161,7 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "List monad transformer";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "list-tries" = callPackage
@@ -174515,6 +176380,7 @@ self: {
        description = "A simple tool for literate programming";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lit";
        broken = true;
      }) {};
 
@@ -174555,6 +176421,7 @@ self: {
        ];
        description = "transform literate source code to Markdown";
        license = lib.licenses.mit;
+       mainProgram = "literatex";
      }) {};
 
   "little-earley" = callPackage
@@ -174721,6 +176588,7 @@ self: {
        description = "An implementation of the LLSD data system";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "llsdutil";
        broken = true;
      }) {};
 
@@ -175112,6 +176980,7 @@ self: {
        ];
        description = "Generate Pkg-Config configuration file for LLVM";
        license = lib.licenses.bsd3;
+       mainProgram = "llvm-pkg-config";
      }) {};
 
   "llvm-pretty" = callPackage
@@ -175157,6 +177026,7 @@ self: {
        description = "LLVM bitcode parsing library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "llvm-disasm";
      }) {};
 
   "llvm-tf" = callPackage
@@ -175382,6 +177252,7 @@ self: {
        description = "A command line tool to manage LNURL auth identities";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lnurl-authenticator";
      }) {};
 
   "load-balancing" = callPackage
@@ -175551,7 +177422,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion ];
        description = "Location-aware variants of partial functions";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ gridaphobe ];
+       maintainers = [ lib.maintainers.gridaphobe ];
      }) {};
 
   "located-monad-logger" = callPackage
@@ -175598,6 +177469,7 @@ self: {
        description = "Support for precise error locations in source files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "loch";
        broken = true;
      }) {};
 
@@ -175652,6 +177524,7 @@ self: {
        description = "Very simple poll lock";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "locked-poll";
      }) {};
 
   "lockfree-queue" = callPackage
@@ -175768,6 +177641,7 @@ self: {
        ];
        description = "An extensible log effect using extensible-effects";
        license = lib.licenses.mit;
+       mainProgram = "log-example";
      }) {};
 
   "log-effect-syslog" = callPackage
@@ -175899,6 +177773,7 @@ self: {
        description = "Turn log file records into JSON";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "log2json";
        broken = true;
      }) {};
 
@@ -176015,6 +177890,7 @@ self: {
        executableHaskellDepends = [ base protolude stm ];
        description = "Run FastLogger in a thread and direct all queued messages to it";
        license = lib.licenses.bsd3;
+       mainProgram = "logger-thread-exe";
      }) {};
 
   "logging" = callPackage
@@ -176076,6 +177952,7 @@ self: {
        description = "Supplemental packages for `logging-effect`";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "log-extra";
      }) {};
 
   "logging-effect-extra-file" = callPackage
@@ -176150,9 +178027,7 @@ self: {
        ];
        description = "Journald back-end for logging-facade";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -176165,7 +178040,7 @@ self: {
        libraryHaskellDepends = [ base hsyslog logging-facade ];
        description = "A logging back-end to syslog(3) for the logging-facade library";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "logic-TPTP" = callPackage
@@ -176359,6 +178234,7 @@ self: {
        description = "Useful utilities for the Lojban language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "jbovlastegendb";
      }) {};
 
   "lojbanParser" = callPackage
@@ -176374,6 +178250,7 @@ self: {
        description = "lojban parser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "testParser";
        broken = true;
      }) {};
 
@@ -176390,6 +178267,7 @@ self: {
        description = "lojban to xiragan";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xiragan";
        broken = true;
      }) {};
 
@@ -176405,6 +178283,7 @@ self: {
        description = "Prolog with lojban";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lojysamban";
      }) {};
 
   "lol" = callPackage
@@ -176495,6 +178374,7 @@ self: {
        description = "Calculus for LOL (λω language)";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lol-calculus";
      }) {};
 
   "lol-cpp" = callPackage
@@ -176655,11 +178535,9 @@ self: {
        ];
        description = "Fast Brute-force search using parallelism";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "longshot";
        broken = true;
      }) {};
 
@@ -176811,6 +178689,7 @@ self: {
        description = "Find all biological feedback loops within an ecosystem graph";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "loopy";
        broken = true;
      }) {};
 
@@ -176853,6 +178732,7 @@ self: {
        description = "A command line interface to online radios";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lord";
        broken = true;
      }) {};
 
@@ -176869,6 +178749,7 @@ self: {
        description = "Library for generating filler text";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lorem";
        broken = true;
      }) {};
 
@@ -176927,6 +178808,7 @@ self: {
        description = "Minecraft 1.7 server proxy that answers to queries when the server is offline";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "loshadka";
        broken = true;
      }) {};
 
@@ -176946,6 +178828,7 @@ self: {
        description = "An implementation of an adictive two-player card game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lostcities";
      }) {};
 
   "louis" = callPackage
@@ -177121,6 +179004,7 @@ self: {
        description = "List USB devices";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ls-usb";
      }) {};
 
   "lscabal" = callPackage
@@ -177139,6 +179023,7 @@ self: {
        description = "List exported modules from a set of .cabal files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lscabal";
        broken = true;
      }) {};
 
@@ -177159,6 +179044,7 @@ self: {
        description = "List directory files starting from a specific name";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lsfrom";
        broken = true;
      }) {};
 
@@ -177280,6 +179166,7 @@ self: {
        description = "Paint an L-System Grammar";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lsystem";
      }) {};
 
   "ltext" = callPackage
@@ -177312,6 +179199,7 @@ self: {
        description = "Parameterized file evaluator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ltext";
      }) {};
 
   "lti13" = callPackage
@@ -177552,6 +179440,7 @@ self: {
        testHaskellDepends = [ base lucid text ];
        description = "Use Alpine.js in your lucid templates";
        license = lib.licenses.bsd3;
+       mainProgram = "lucid-alpine-exe";
      }) {};
 
   "lucid-aria" = callPackage
@@ -177647,6 +179536,7 @@ self: {
        description = "Use _hyperscript with lucid";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lucid-hyperscript-exe";
        broken = true;
      }) {};
 
@@ -177802,6 +179692,7 @@ self: {
        ];
        description = "Trek through your code forest and make logs";
        license = lib.licenses.isc;
+       mainProgram = "example_log";
      }) {};
 
   "luminance" = callPackage
@@ -177853,6 +179744,7 @@ self: {
        description = "Create ctags compatible tags files for Haskell programs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lushtags";
        broken = true;
      }) {};
 
@@ -177930,6 +179822,7 @@ self: {
        description = "The Lazy Virtual Machine (LVM)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "coreasm";
        broken = true;
      }) {};
 
@@ -177944,6 +179837,7 @@ self: {
        description = "The Lazy Virtual Machine (LVM) Runtime System";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lvmrun";
        broken = true;
      }) {};
 
@@ -177956,9 +179850,7 @@ self: {
        libraryHaskellDepends = [ base bindings-lxc mtl transformers ];
        description = "High level Haskell bindings to LXC (Linux containers)";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "lxd-client" = callPackage
@@ -177989,6 +179881,7 @@ self: {
        description = "LXD client written in Haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lxd-client-example";
        broken = true;
      }) {};
 
@@ -178028,6 +179921,7 @@ self: {
        description = "A Lilypond-compiling music box";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lye";
        broken = true;
      }) {};
 
@@ -178086,6 +179980,7 @@ self: {
        description = "LZ4 compression for conduits";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "LZ4";
      }) {};
 
   "lz4-frame-conduit" = callPackage
@@ -178115,6 +180010,7 @@ self: {
        description = "Conduit implementing the official LZ4 frame streaming format";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-lz4c";
        broken = true;
      }) {};
 
@@ -178199,7 +180095,6 @@ self: {
        doHaddock = false;
        description = "liblzma C library and headers for use by LZMA bindings";
        license = lib.licenses.publicDomain;
-       platforms = lib.platforms.none;
      }) {};
 
   "lzma-conduit" = callPackage
@@ -178335,6 +180230,7 @@ self: {
        description = "Monadic Abstracting Abstract Machines (MAAM) built on Galois Transformers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "maam_examples";
        broken = true;
      }) {};
 
@@ -178397,6 +180293,7 @@ self: {
        description = "Macbeth - A beautiful and minimalistic FICS client";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Macbeth";
      }) {};
 
   "maccatcher" = callPackage
@@ -178674,6 +180571,7 @@ self: {
        description = "Control screen and keyboard backlights on MACs under Linux";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "maclight";
        broken = true;
      }) {};
 
@@ -178712,6 +180610,7 @@ self: {
        description = "Make a macosx app standalone deployable";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "macosx-make-standalone";
      }) {};
 
   "macrm" = callPackage
@@ -178737,6 +180636,7 @@ self: {
        description = "Alternative rm command for macOS that remove files/dirs to the system trash";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "macrm";
        broken = true;
      }) {};
 
@@ -178761,6 +180661,7 @@ self: {
        description = "Monadic DSL for building constraint solvers using basic propagators";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sudoku-exe";
        broken = true;
      }) {};
 
@@ -178793,6 +180694,7 @@ self: {
        description = "Randomized templating language DSL";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "madlang";
        broken = true;
      }) {};
 
@@ -178810,6 +180712,7 @@ self: {
        description = "Rogue-like";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mage";
        broken = true;
      }) {inherit (pkgs) ncurses;};
 
@@ -178867,6 +180770,7 @@ self: {
        description = "Interact with Magic Wormhole";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hocus-pocus";
      }) {};
 
   "magicbane" = callPackage
@@ -178915,6 +180819,7 @@ self: {
        ];
        description = "Compute solutions for Magico puzzle";
        license = lib.licenses.bsd3;
+       mainProgram = "magico";
      }) {};
 
   "magma" = callPackage
@@ -178960,6 +180865,7 @@ self: {
        description = "ImageBoards to XMPP gate";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mahoro";
      }) {};
 
   "maid" = callPackage
@@ -178982,6 +180888,7 @@ self: {
        description = "A simple static web server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "maid";
      }) {};
 
   "mail-pool" = callPackage
@@ -179005,6 +180912,7 @@ self: {
        description = "Preconfigured email connection pool on top of smtp";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exe";
      }) {};
 
   "mail-reports" = callPackage
@@ -179044,6 +180952,7 @@ self: {
        ];
        description = "Count mailboxes in a SQL database";
        license = lib.licenses.agpl3Only;
+       mainProgram = "mailbox-count";
      }) {};
 
   "mailchimp" = callPackage
@@ -179083,6 +180992,7 @@ self: {
        description = "MailChimp subscription request handler";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mailchimp-subscribe";
        broken = true;
      }) {};
 
@@ -179186,6 +181096,7 @@ self: {
        description = "Change duplicated files into hard-links";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "make-hard-links";
        broken = true;
      }) {};
 
@@ -179221,6 +181132,7 @@ self: {
        description = "Make a cabalized package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "make-package";
      }) {};
 
   "makedo" = callPackage
@@ -179281,6 +181193,7 @@ self: {
        description = "Database migration and testing as a library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mallard";
        broken = true;
      }) {};
 
@@ -179297,6 +181210,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Static Website Generator in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "mameya";
      }) {};
 
   "managed" = callPackage
@@ -179310,7 +181224,7 @@ self: {
        libraryHaskellDepends = [ base transformers ];
        description = "A monad for managed values";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "managed-functions" = callPackage
@@ -179375,6 +181289,7 @@ self: {
        description = "The Haskell/Gtk+ Integrated Live Environment";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee";
      }) {};
 
   "manatee-all" = callPackage
@@ -179401,6 +181316,7 @@ self: {
        description = "Virtual package to install all Manatee packages";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-all";
      }) {};
 
   "manatee-anything" = callPackage
@@ -179422,6 +181338,7 @@ self: {
        description = "Multithread interactive input/search framework for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-anything";
      }) {};
 
   "manatee-browser" = callPackage
@@ -179442,6 +181359,7 @@ self: {
        description = "Browser extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-browser";
      }) {};
 
   "manatee-core" = callPackage
@@ -179489,6 +181407,7 @@ self: {
        description = "Download Manager extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-curl";
      }) {};
 
   "manatee-editor" = callPackage
@@ -179510,6 +181429,7 @@ self: {
        description = "Editor extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-editor";
      }) {};
 
   "manatee-filemanager" = callPackage
@@ -179531,6 +181451,7 @@ self: {
        description = "File manager extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-filemanager";
      }) {};
 
   "manatee-imageviewer" = callPackage
@@ -179552,6 +181473,7 @@ self: {
        description = "Image viewer extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-imageviewer";
      }) {};
 
   "manatee-ircclient" = callPackage
@@ -179620,6 +181542,7 @@ self: {
        description = "PDF viewer extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-pdfviewer";
      }) {};
 
   "manatee-processmanager" = callPackage
@@ -179640,6 +181563,7 @@ self: {
        description = "Process manager extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-processmanager";
      }) {};
 
   "manatee-reader" = callPackage
@@ -179661,6 +181585,7 @@ self: {
        description = "Feed reader extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-reader";
      }) {};
 
   "manatee-template" = callPackage
@@ -179681,6 +181606,7 @@ self: {
        description = "Template code to create Manatee application";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-template";
      }) {};
 
   "manatee-terminal" = callPackage
@@ -179701,6 +181627,7 @@ self: {
        description = "Terminal Emulator extension for Manatee";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-terminal";
      }) {};
 
   "manatee-welcome" = callPackage
@@ -179721,6 +181648,7 @@ self: {
        description = "Welcome module to help user play Manatee quickly";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "manatee-welcome";
      }) {};
 
   "mancala" = callPackage
@@ -179734,6 +181662,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Simple mancala game";
        license = lib.licenses.lgpl3Only;
+       mainProgram = "mancala";
      }) {};
 
   "mandrill" = callPackage
@@ -179777,6 +181706,7 @@ self: {
        description = "A zooming visualisation of the Mandelbrot Set as many Julia Sets";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mandulia";
        broken = true;
      }) {};
 
@@ -179817,6 +181747,7 @@ self: {
        description = "Bindings to the MangoPay API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mangopay-passphrase";
        broken = true;
      }) {};
 
@@ -180027,6 +181958,7 @@ self: {
        description = "A functional programming language focused around maps";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mappy";
        broken = true;
      }) {};
 
@@ -180070,6 +182002,7 @@ self: {
        testHaskellDepends = [ base directory filepath process ];
        description = "Minimal tool to make your blog in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "marihana";
      }) {};
 
   "marionetta" = callPackage
@@ -180088,6 +182021,7 @@ self: {
        description = "A study of marionetta movements";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "marionetta";
      }) {};
 
   "markdown" = callPackage
@@ -180168,6 +182102,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Literate Haskell support for Markdown";
        license = lib.licenses.mit;
+       mainProgram = "markdown-unlit";
      }) {};
 
   "markdown2svg" = callPackage
@@ -180187,6 +182122,7 @@ self: {
        description = "markdown to svg converter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "markdown2svg";
      }) {};
 
   "marked-pretty" = callPackage
@@ -180311,6 +182247,7 @@ self: {
        description = "A simple markup document preview (markdown, textile, reStructuredText)";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "markup-preview";
      }) {};
 
   "marmalade-upload" = callPackage
@@ -180339,6 +182276,7 @@ self: {
        description = "Upload packages to Marmalade";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "marmalade-upload";
      }) {};
 
   "marquise" = callPackage
@@ -180483,6 +182421,7 @@ self: {
        description = "Markup language preprocessor for Haskell";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "marxup";
      }) {};
 
   "masakazu-bot" = callPackage
@@ -180506,6 +182445,7 @@ self: {
        description = "@minamiyama1994_bot on haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "masakazu-bot";
      }) {};
 
   "mason" = callPackage
@@ -180674,6 +182614,7 @@ self: {
        description = "The project management tool for hackers";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "master-plan";
        broken = true;
      }) {};
 
@@ -180688,6 +182629,7 @@ self: {
        executableHaskellDepends = [ base random ];
        description = "console mastermind decypher";
        license = lib.licenses.bsd3;
+       mainProgram = "mastermind";
      }) {};
 
   "matchable" = callPackage
@@ -180969,6 +182911,7 @@ self: {
        ];
        description = "Discover your (academic) ancestors!";
        license = lib.licenses.gpl2Only;
+       mainProgram = "mathgenealogy";
      }) {};
 
   "mathista" = callPackage
@@ -180992,6 +182935,7 @@ self: {
        testHaskellDepends = [ base hspec parsec ];
        description = "A small programming language for numerical computing";
        license = lib.licenses.publicDomain;
+       mainProgram = "mathista";
      }) {};
 
   "mathlink" = callPackage
@@ -181133,7 +183077,7 @@ self: {
        ];
        description = "A matrix client library";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "matrix-lens" = callPackage
@@ -181273,6 +183217,7 @@ self: {
        description = "ncurses XMPP client";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "matsuri";
      }) {};
 
   "matterhorn" = callPackage
@@ -181313,7 +183258,8 @@ self: {
        ];
        description = "Terminal client for the Mattermost chat system";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ kiwi ];
+       mainProgram = "matterhorn";
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "mattermost-api" = callPackage
@@ -181342,7 +183288,7 @@ self: {
        ];
        description = "Client API for Mattermost chat system";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ kiwi ];
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "mattermost-api-qc" = callPackage
@@ -181358,7 +183304,7 @@ self: {
        ];
        description = "QuickCheck instances for the Mattermost client API library";
        license = lib.licenses.isc;
-       maintainers = with lib.maintainers; [ kiwi ];
+       maintainers = [ lib.maintainers.kiwi ];
      }) {};
 
   "maude" = callPackage
@@ -181422,6 +183368,7 @@ self: {
        description = "Hayes and Wilson's maxent learning algorithm for phonotactic grammars";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "phono-learner-hw";
        broken = true;
      }) {};
 
@@ -181445,6 +183392,7 @@ self: {
        description = "GUI for maxent-learner-hw";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "phono-learner-hw-gui";
      }) {};
 
   "maximal-cliques" = callPackage
@@ -181478,6 +183426,7 @@ self: {
        description = "Maximal sharing of terms in the lambda calculus with letrec";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "maxsharing";
      }) {};
 
   "maybe-justify" = callPackage
@@ -181561,6 +183510,7 @@ self: {
        ];
        description = "List contents of an mbox file containing e-mails";
        license = lib.licenses.bsd3;
+       mainProgram = "lsmbox";
      }) {};
 
   "mbtiles" = callPackage
@@ -181605,6 +183555,7 @@ self: {
        description = "download bugs mailboxes";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mbug";
        broken = true;
      }) {};
 
@@ -181621,6 +183572,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "An Aeson parsing toolkit";
        license = lib.licenses.bsd3;
+       mainProgram = "mcaeson-exe";
      }) {};
 
   "mcl" = callPackage
@@ -181709,7 +183661,7 @@ self: {
        ];
        description = "Sample from a posterior using Markov chain Monte Carlo";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "mcmc_0_6_2_5" = callPackage
@@ -181737,7 +183689,7 @@ self: {
        description = "Sample from a posterior using Markov chain Monte Carlo";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "mcmc-samplers" = callPackage
@@ -181836,6 +183788,7 @@ self: {
        description = "Markdown viewer in your terminal";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mdcat";
        broken = true;
      }) {};
 
@@ -181850,6 +183803,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "Command-line tool to run a command on each of the items";
        license = lib.licenses.bsd3;
+       mainProgram = "mdo";
      }) {};
 
   "mdp" = callPackage
@@ -181961,6 +183915,7 @@ self: {
        libraryHaskellDepends = [ base ];
        description = "A constructive solid geometry (CSG) modeling language";
        license = lib.licenses.bsd3;
+       mainProgram = "mecha-examples";
      }) {};
 
   "mechs" = callPackage
@@ -182118,6 +184073,7 @@ self: {
        description = "Receive and Send RTP Packets";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mediabus-demo-rtp-alaw-player";
      }) {};
 
   "median-stream" = callPackage
@@ -182177,6 +184133,7 @@ self: {
        ];
        description = "Convert MediaWiki text to LaTeX";
        license = "GPL";
+       mainProgram = "mediawiki2latex";
      }) {};
 
   "medium-sdk-haskell" = callPackage
@@ -182235,6 +184192,7 @@ self: {
        ];
        description = "Handles uploading to Hackage from mega repos";
        license = lib.licenses.mit;
+       mainProgram = "mega-sdist";
      }) {};
 
   "megalisp" = callPackage
@@ -182434,6 +184392,7 @@ self: {
        description = "A functional scripting language";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "imelody";
        broken = true;
      }) {};
 
@@ -182650,6 +184609,7 @@ self: {
        description = "Memis Efficient Manual Image Sorting";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "memis";
      }) {};
 
   "memo-ptr" = callPackage
@@ -182734,6 +184694,7 @@ self: {
        benchmarkHaskellDepends = [ base bytestring criterion random ];
        description = "Generate human memorable strings from binary data";
        license = lib.licenses.bsd2;
+       mainProgram = "membits";
      }) {};
 
   "memory" = callPackage
@@ -182836,6 +184797,7 @@ self: {
        executableHaskellDepends = [ base haskeline transformers ];
        description = "Command line utility for memorizing scriptures or any other text";
        license = "GPL";
+       mainProgram = "memscript";
      }) {};
 
   "menoh" = callPackage
@@ -182942,6 +184904,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "command line utility to merge bash_history";
        license = lib.licenses.bsd3;
+       mainProgram = "merge-bash-history";
      }) {};
 
   "mergeful" = callPackage
@@ -183295,6 +185258,7 @@ self: {
        description = "Australian METAR";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "metar";
      }) {};
 
   "metar-http" = callPackage
@@ -183320,6 +185284,7 @@ self: {
        description = "HTTP for METAR";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "metar-http";
      }) {};
 
   "method" = callPackage
@@ -183600,6 +185565,7 @@ self: {
        description = "spam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test1";
        broken = true;
      }) {};
 
@@ -183630,6 +185596,7 @@ self: {
        description = "A Micro service gateway";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "simple-gateway";
      }) {};
 
   "micro-recursion-schemes" = callPackage
@@ -183712,6 +185679,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "microc compiler";
        license = lib.licenses.bsd3;
+       mainProgram = "microc-exe";
      }) {};
 
   "microformats2-parser" = callPackage
@@ -184095,6 +186063,7 @@ self: {
        description = "Language for algorithmic generation of MIDI files";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mida";
        broken = true;
      }) {};
 
@@ -184142,9 +186111,7 @@ self: {
        ];
        description = "Convert between datatypes of the midi and the alsa packages";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "midi-music-box" = callPackage
@@ -184166,6 +186133,7 @@ self: {
        ];
        description = "Convert MIDI file to music box punch tape";
        license = lib.licenses.bsd3;
+       mainProgram = "midi-music-box";
      }) {};
 
   "midi-simple" = callPackage
@@ -184241,6 +186209,7 @@ self: {
        description = "A Memory-like (Concentration, Pairs, ...) game for tones";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "midimory";
      }) {};
 
   "midisurface" = callPackage
@@ -184259,6 +186228,7 @@ self: {
        description = "A control midi surface";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "midisurface";
        broken = true;
      }) {};
 
@@ -184451,6 +186421,7 @@ self: {
        description = "Lambda calculus interpreter";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mikrokosmos";
        broken = true;
      }) {};
 
@@ -184571,6 +186542,7 @@ self: {
        ];
        description = "Send mime-mail messages via Amazon SES";
        license = lib.licenses.mit;
+       mainProgram = "send-aws";
      }) {};
 
   "mime-string" = callPackage
@@ -184659,6 +186631,7 @@ self: {
        executableHaskellDepends = [ base directory mtl random ];
        description = "Minesweeper simulation using neural networks";
        license = "unknown";
+       mainProgram = "mines";
      }) {};
 
   "minesweeper" = callPackage
@@ -184679,6 +186652,7 @@ self: {
        description = "Minesweeper game which is always solvable without guessing";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "minesweeper";
      }) {};
 
   "mini-egison" = callPackage
@@ -184701,6 +186675,7 @@ self: {
        description = "Template Haskell Implementation of Egison Pattern Matching";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cdcl";
      }) {};
 
   "miniball" = callPackage
@@ -184734,6 +186709,7 @@ self: {
        description = "Miniature FORTH-like interpreter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "miniforth";
        broken = true;
      }) {};
 
@@ -184806,6 +186782,7 @@ self: {
        description = "A binding library of minilight for Lua langauge";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "minimal-configuration" = callPackage
@@ -184847,6 +186824,7 @@ self: {
        description = "Shows how to run grabber on Mac OS X";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "minimung";
      }) {};
 
   "minio-hs" = callPackage
@@ -184902,6 +186880,7 @@ self: {
        description = "A fast parallel ssh tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "minions";
        broken = true;
      }) {};
 
@@ -184958,6 +186937,7 @@ self: {
        description = "Minimalistic file rotation utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "minirotate";
      }) {};
 
   "minisat" = callPackage
@@ -185000,6 +186980,7 @@ self: {
        description = "an interpreter for an operational semantics for the STG machine";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ministg";
        broken = true;
      }) {};
 
@@ -185118,6 +187099,7 @@ self: {
        description = "A Minisat-based CDCL SAT solver in Haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mios162";
        broken = true;
      }) {};
 
@@ -185138,6 +187120,7 @@ self: {
        description = "Tweet mirror";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mirror-tweet";
      }) {};
 
   "misfortune" = callPackage
@@ -185333,6 +187316,7 @@ self: {
        ];
        description = "Convert HTML to miso View syntax";
        license = lib.licenses.bsd3;
+       mainProgram = "miso-from-html";
      }) {};
 
   "miss" = callPackage
@@ -185438,6 +187422,7 @@ self: {
        description = "A git wrapper with a streamlined UX";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mit";
        broken = true;
      }) {};
 
@@ -185465,6 +187450,7 @@ self: {
        ];
        description = "Vim plugin manager written in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "miv";
      }) {};
 
   "mix-arrows" = callPackage
@@ -185495,6 +187481,7 @@ self: {
        description = "Find optimal mixed strategies for two-player games";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "oms";
      }) {};
 
   "mixed-types-num" = callPackage
@@ -185554,6 +187541,7 @@ self: {
        description = "Makes an OS X .app bundle from a binary.";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mkbndl";
      }) {};
 
   "mkcabal" = callPackage
@@ -185573,6 +187561,7 @@ self: {
        description = "Generate cabal files for a Haskell project";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mkcabal";
        broken = true;
      }) {};
 
@@ -185589,6 +187578,7 @@ self: {
        description = "Minimal ML language to to demonstrate the W type infererence algorithm";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ML";
        broken = true;
      }) {};
 
@@ -185702,6 +187692,7 @@ self: {
        description = "Command line interface to the MMark markdown processor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmark";
      }) {};
 
   "mmark-ext" = callPackage
@@ -185738,7 +187729,7 @@ self: {
        description = "Monad morphisms";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "mmorph" = callPackage
@@ -185754,7 +187745,7 @@ self: {
        ];
        description = "Monad morphisms";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "mmorph_1_2_0" = callPackage
@@ -185771,7 +187762,7 @@ self: {
        description = "Monad morphisms";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "mmsyn2" = callPackage
@@ -185846,6 +187837,7 @@ self: {
        description = "The \"glue\" between electronic tables and GraphViz";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn4";
      }) {};
 
   "mmsyn5" = callPackage
@@ -185881,6 +187873,7 @@ self: {
        description = "A musical instrument synthesizer or a tool for Ukrainian language listening";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn6ukr";
      }) {};
 
   "mmsyn6ukr-array" = callPackage
@@ -185905,6 +187898,7 @@ self: {
        description = "A musical instrument synthesizer or a tool for Ukrainian language listening";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn6ukra";
      }) {};
 
   "mmsyn7h" = callPackage
@@ -185928,6 +187922,7 @@ self: {
        description = "Produces a sound recording specified by the Ukrainian text";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn7h";
      }) {};
 
   "mmsyn7l" = callPackage
@@ -185949,6 +187944,7 @@ self: {
        description = "Modifies the amplitudes of the Ukrainian sounds representations created by mmsyn7ukr package";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn7l";
      }) {};
 
   "mmsyn7s" = callPackage
@@ -185964,6 +187960,7 @@ self: {
        description = "Shows a sorted list of the Ukrainian sounds representations that can be used by mmsyn7 series of programs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn7s";
      }) {};
 
   "mmsyn7ukr" = callPackage
@@ -185986,6 +187983,7 @@ self: {
        description = "A simple basic interface to some SoX functionality or to produce a voice that can be used by mmsyn7h";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mmsyn7ukr";
      }) {};
 
   "mmsyn7ukr-common" = callPackage
@@ -186116,6 +188114,7 @@ self: {
        description = "A HTTP server for testing HTTP clients";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mock-httpd";
        broken = true;
      }) {};
 
@@ -186302,6 +188301,7 @@ self: {
        description = "Modify fasta (and CLIP) files in several optional ways";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "modify-fasta";
      }) {};
 
   "modsplit" = callPackage
@@ -186323,6 +188323,7 @@ self: {
        description = "Haskell source splitter driven by special comments";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "modsplit";
      }) {};
 
   "modular" = callPackage
@@ -186424,6 +188425,7 @@ self: {
        description = "Clean up module imports, split and merge modules";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hmm";
        broken = true;
      }) {};
 
@@ -186463,6 +188465,7 @@ self: {
        description = "Modular C code generator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "modulo";
      }) {};
 
   "moe" = callPackage
@@ -186503,6 +188506,7 @@ self: {
        description = "A functional firewall killer";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "moesocks";
        broken = true;
      }) {};
 
@@ -186528,6 +188532,7 @@ self: {
        description = "Modular Haskell Web Server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hws";
        broken = true;
      }) {};
 
@@ -186560,6 +188565,7 @@ self: {
        description = "A glorified string replacement tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mole";
      }) {};
 
   "mollie-api-haskell" = callPackage
@@ -186673,6 +188679,7 @@ self: {
        description = "A library for probabilistic programming";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -187154,6 +189161,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "JSON logging using monad-logger interface";
        license = lib.licenses.mit;
+       mainProgram = "readme-example";
      }) {};
 
   "monad-logger-extras" = callPackage
@@ -187172,6 +189180,7 @@ self: {
        executableHaskellDepends = [ base monad-logger ];
        description = "Utilities for composing loggers, coloring output, plus a few orphan instances";
        license = lib.licenses.bsd3;
+       mainProgram = "readme";
      }) {};
 
   "monad-logger-json" = callPackage
@@ -188143,6 +190152,7 @@ self: {
        description = "A preprocessor for generating monadic call traces";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "MonadLoc";
        broken = true;
      }) {};
 
@@ -188384,6 +190394,7 @@ self: {
        description = "Do things when files change";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "monitor";
        broken = true;
      }) {};
 
@@ -188410,6 +190421,7 @@ self: {
        description = "A system state collecting library and application";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "monky";
      }) {};
 
   "mono-foldable" = callPackage
@@ -189043,6 +191055,7 @@ self: {
        description = "A tool for supervised learning of morphology";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morfette";
        broken = true;
      }) {};
 
@@ -189102,6 +191115,7 @@ self: {
        description = "Developer tools for the Michelson Language";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morley";
      }) {};
 
   "morley-client" = callPackage
@@ -189146,6 +191160,7 @@ self: {
        description = "Client to interact with the Tezos blockchain";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morley-client";
      }) {};
 
   "morley-prelude" = callPackage
@@ -189195,6 +191210,7 @@ self: {
        description = "Upgradeability infrastructure based on Morley";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morley-ustore-reader";
      }) {};
 
   "morloc" = callPackage
@@ -189234,6 +191250,7 @@ self: {
        description = "A multi-lingual, typed, workflow language";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morloc";
        broken = true;
      }) {};
 
@@ -189254,6 +191271,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A simple database migrator for PostgreSQL";
        license = lib.licenses.bsd3;
+       mainProgram = "morph";
      }) {};
 
   "morpheus-graphql" = callPackage
@@ -189333,6 +191351,7 @@ self: {
        description = "Morpheus GraphQL CLI";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morpheus";
      }) {};
 
   "morpheus-graphql-client" = callPackage
@@ -189384,6 +191403,7 @@ self: {
        description = "Morpheus GraphQL CLI";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "morpheus";
      }) {};
 
   "morpheus-graphql-core" = callPackage
@@ -189552,7 +191572,8 @@ self: {
        description = "A bare-bones calculus of constructions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       mainProgram = "morte";
+       maintainers = [ lib.maintainers.Gabriel439 ];
        broken = true;
      }) {};
 
@@ -189586,6 +191607,7 @@ self: {
        description = "Library for setting up and running scrapers with webdriver";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mortred";
      }) {};
 
   "mosaico-lib" = callPackage
@@ -189696,6 +191718,7 @@ self: {
        description = "Type-safe effectful state machines in Haskell";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-door";
        broken = true;
      }) {};
 
@@ -189783,6 +191806,7 @@ self: {
        description = "Plays videos using GStreamer and GTK+";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "movie-monad";
        broken = true;
      }) {};
 
@@ -189821,6 +191845,7 @@ self: {
        description = "Music player for linux";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mp";
      }) {};
 
   "mp3decoder" = callPackage
@@ -189837,6 +191862,7 @@ self: {
        description = "MP3 decoder for teaching";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mp3driver";
      }) {};
 
   "mpdmate" = callPackage
@@ -189853,6 +191879,7 @@ self: {
        description = "MPD/PowerMate executable";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mpdmate";
      }) {};
 
   "mpeff" = callPackage
@@ -189897,7 +191924,9 @@ self: {
        testSystemDepends = [ mpich ];
        description = "MPI bindings for Haskell";
        license = lib.licenses.asl20;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
      }) {inherit (pkgs) mpich;};
 
   "mpi-hs-binary" = callPackage
@@ -189915,7 +191944,9 @@ self: {
        testHaskellDepends = [ base ];
        description = "MPI bindings for Haskell";
        license = lib.licenses.asl20;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
      }) {};
 
   "mpi-hs-cereal" = callPackage
@@ -189933,7 +191964,9 @@ self: {
        testHaskellDepends = [ base ];
        description = "MPI bindings for Haskell";
        license = lib.licenses.asl20;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
      }) {};
 
   "mpi-hs-store" = callPackage
@@ -189951,7 +191984,9 @@ self: {
        testHaskellDepends = [ base ];
        description = "MPI bindings for Haskell";
        license = lib.licenses.asl20;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
      }) {};
 
   "mplayer-spot" = callPackage
@@ -189972,10 +192007,8 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Save your spot when watching movies with @mplayer@";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
+       mainProgram = "mplayer-spot";
      }) {};
 
   "mpppc" = callPackage
@@ -190058,6 +192091,7 @@ self: {
        description = "Simple equational reasoning for a Haskell-ish language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mp";
      }) {};
 
   "mps" = callPackage
@@ -190130,10 +192164,9 @@ self: {
        testHaskellDepends = [ base HUnit ip mptcp text ];
        description = "A Multipath TCP path manager";
        license = lib.licenses.gpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mptcp-pm";
      }) {};
 
   "mptcpanalyzer" = callPackage
@@ -190180,6 +192213,7 @@ self: {
        description = "A Multipath TCP analyzer";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mptcpanalyzer";
      }) {};
 
   "mpvguihs" = callPackage
@@ -190199,6 +192233,7 @@ self: {
        description = "A minimalist mpv GUI written in I/O heavy Haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mpvguihs";
        broken = true;
      }) {};
 
@@ -190276,6 +192311,7 @@ self: {
        description = "Decompiles Glulx files";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mrifk";
        broken = true;
      }) {};
 
@@ -190448,6 +192484,7 @@ self: {
        description = "An IDL Compiler for MessagePack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mpidl";
      }) {};
 
   "msgpack-persist" = callPackage
@@ -190475,6 +192512,7 @@ self: {
        description = "A Haskell implementation of MessagePack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "msgpack-parser";
        broken = true;
      }) {};
 
@@ -190593,6 +192631,7 @@ self: {
        description = "A command line tool to change backlit colors of your MSI keyboards";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "msi-kb-backlit";
        broken = true;
      }) {};
 
@@ -190645,6 +192684,7 @@ self: {
        testHaskellDepends = [ base bytestring errors hspec ];
        description = "Monitor Setup Utility";
        license = lib.licenses.mit;
+       mainProgram = "msu";
      }) {};
 
   "mtgoxapi" = callPackage
@@ -190882,6 +192922,7 @@ self: {
        description = "Avro serialization support for Mu microservices";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-avro";
      }) {};
 
   "mu-graphql" = callPackage
@@ -190912,6 +192953,7 @@ self: {
        description = "GraphQL support for Mu";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "library-graphql";
      }) {};
 
   "mu-grpc-client" = callPackage
@@ -190981,6 +193023,7 @@ self: {
        description = "gRPC servers for Mu definitions";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "grpc-example-server";
      }) {};
 
   "mu-kafka" = callPackage
@@ -191091,6 +193134,7 @@ self: {
        description = "Protocol Buffers serialization and gRPC schema import for Mu microservices";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-protobuf";
      }) {};
 
   "mu-rpc" = callPackage
@@ -191152,6 +193196,7 @@ self: {
        description = "Servant servers for Mu definitions";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-example-server";
      }) {};
 
   "mu-tracing" = callPackage
@@ -191202,6 +193247,7 @@ self: {
        description = "Multi-version deployer for web applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mud";
        broken = true;
      }) {};
 
@@ -191224,6 +193270,7 @@ self: {
        description = "Continuous deployment server for use with GitHub";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mudbath";
        broken = true;
      }) {};
 
@@ -191297,6 +193344,7 @@ self: {
        description = "An intermediate language designed to perform advanced code analysis";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mulang";
        broken = true;
      }) {};
 
@@ -191333,6 +193381,7 @@ self: {
        description = "A tool supporting multi cabal project builds";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "multi-cabal";
      }) {};
 
   "multi-containers" = callPackage
@@ -191465,6 +193514,7 @@ self: {
        ];
        description = "create many files from one";
        license = lib.licenses.bsd3;
+       mainProgram = "multifile";
      }) {};
 
   "multifocal" = callPackage
@@ -191491,6 +193541,7 @@ self: {
        description = "Bidirectional Two-level Transformation of XML Schemas";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "multifocal";
      }) {};
 
   "multihash" = callPackage
@@ -191515,6 +193566,7 @@ self: {
        description = "Multihash library and CLI executable";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "multihash";
        broken = true;
      }) {};
 
@@ -191725,6 +193777,7 @@ self: {
        description = "Wrapper program for duplicity, adding config files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "multiplicity";
      }) {};
 
   "multipool" = callPackage
@@ -191955,6 +194008,7 @@ self: {
        description = "Multivariant assignments generation language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -191997,6 +194051,7 @@ self: {
        description = "Static blog generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "muon";
        broken = true;
      }) {};
 
@@ -192041,6 +194096,7 @@ self: {
        description = "Simple CUI Twitter Client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mur";
      }) {};
 
   "murmur-hash" = callPackage
@@ -192109,6 +194165,7 @@ self: {
        description = "Minimalist MPD client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mushu";
      }) {};
 
   "music-articulation" = callPackage
@@ -192338,6 +194395,7 @@ self: {
        description = "Utility for developing the Music Suite";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "music-util";
        broken = true;
      }) {};
 
@@ -192364,6 +194422,7 @@ self: {
        description = "Supply your tunes info without leaving your music player";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "music-scroll";
        broken = true;
      }) {inherit (pkgs) gtk3;};
 
@@ -192481,6 +194540,7 @@ self: {
        ];
        description = "A mustache template parser library";
        license = lib.licenses.bsd3;
+       mainProgram = "haskell-mustache";
      }) {};
 
   "mustache-haskell" = callPackage
@@ -192506,6 +194566,7 @@ self: {
        description = "Straight implementation of mustache templates";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mus";
        broken = true;
      }) {};
 
@@ -192526,6 +194587,7 @@ self: {
        description = "Utility to generate Haskell code from Mustache templates";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mustache2hs";
        broken = true;
      }) {};
 
@@ -192622,6 +194684,7 @@ self: {
        description = "Watches your screensaver and (un)mutes music when you (un)lock the screen";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mute-unmute";
      }) {};
 
   "mvar-lock" = callPackage
@@ -192650,7 +194713,7 @@ self: {
        description = "Model-view-controller";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
        broken = true;
      }) {};
 
@@ -192664,7 +194727,7 @@ self: {
        description = "Concurrent and combinable updates";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "mvclient" = callPackage
@@ -192865,6 +194928,7 @@ self: {
        description = "Train a neural network with MXNet in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "lenet";
      }) {};
 
   "mxnet-nnvm" = callPackage
@@ -192981,6 +195045,7 @@ self: {
        description = "Export from MyAnimeList";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "myanimelist-export";
        broken = true;
      }) {};
 
@@ -193019,6 +195084,7 @@ self: {
        description = "Haskell binding to the Myo armband";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "myo-ws-example";
        broken = true;
      }) {};
 
@@ -193222,6 +195288,7 @@ self: {
        description = "Bindings for Mystem morphological analyzer executabe";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mystem-test-exe";
        broken = true;
      }) {};
 
@@ -193248,6 +195315,7 @@ self: {
        description = "Web application to view and kill MySQL queries";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mywatch";
        broken = true;
      }) {};
 
@@ -193317,6 +195385,7 @@ self: {
        executableHaskellDepends = [ base HSH mtl process ];
        description = "Utility to call iwconfig";
        license = "unknown";
+       mainProgram = "n-m";
      }) {};
 
   "n-tuple" = callPackage
@@ -193423,6 +195492,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "EDSL to specify Nagios configuration files";
        license = lib.licenses.gpl3Only;
+       mainProgram = "nagios-config-example";
      }) {};
 
   "nagios-perfdata" = callPackage
@@ -193465,6 +195535,7 @@ self: {
        description = "Monitor ekg metrics via Nagios";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "check_ekg";
        broken = true;
      }) {};
 
@@ -193520,6 +195591,7 @@ self: {
        description = "Tool to keep namecoin names updated and well";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "namecoin-update";
        broken = true;
      }) {};
 
@@ -193763,6 +195835,7 @@ self: {
        description = "A toy dependently-typed language";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nanoAgda";
        broken = true;
      }) {};
 
@@ -193852,6 +195925,7 @@ self: {
        description = "An EDSL for creating compilers using small passes and many intermediate representations";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "dumb-nanopass-example";
        broken = true;
      }) {};
 
@@ -193927,6 +196001,7 @@ self: {
        description = "Performs 漢字検定 (Japan Kanji Aptitude Test) level analysis on given Kanji";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nanq";
        broken = true;
      }) {};
 
@@ -194055,6 +196130,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Native library manager for Windows";
        license = lib.licenses.bsd3;
+       mainProgram = "native";
      }) {};
 
   "nats" = callPackage
@@ -194095,6 +196171,7 @@ self: {
        description = "Another Haskell client for NATS (https://nats.io)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nats-client";
        broken = true;
      }) {};
 
@@ -194296,6 +196373,7 @@ self: {
        ];
        description = "CPU load and memory usage indicators for i3bar";
        license = lib.licenses.asl20;
+       mainProgram = "nc-indicators";
      }) {};
 
   "ncurses" = callPackage
@@ -194343,6 +196421,7 @@ self: {
        description = "A Fast Retargetable Template Engine";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "neat";
        broken = true;
      }) {};
 
@@ -194438,6 +196517,7 @@ self: {
        description = "General tools for Neil";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "neil";
        broken = true;
      }) {};
 
@@ -194509,6 +196589,7 @@ self: {
        description = "a TCP tunnel with packet length obfuscation";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "neko-obfs";
      }) {};
 
   "nemesis" = callPackage
@@ -194576,6 +196657,7 @@ self: {
        description = "Neptune Client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-app";
        broken = true;
      }) {};
 
@@ -194604,6 +196686,7 @@ self: {
        description = "Nerf, a named entity recognition tool based on linear-chain CRFs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nerf";
      }) {};
 
   "nero" = callPackage
@@ -194838,6 +196921,7 @@ self: {
        description = "Make RPC calls via an MQTT broker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mqtt-rpc";
      }) {};
 
   "net-spider" = callPackage
@@ -194958,6 +197042,7 @@ self: {
        description = "CLI executable of NetSpider.RPL.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "net-spider-rpl-cli";
      }) {};
 
   "netclock" = callPackage
@@ -195049,6 +197134,7 @@ self: {
        description = "NetEase Cloud Music FM client in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "netease-fm";
        broken = true;
      }) {};
 
@@ -195110,6 +197196,7 @@ self: {
        description = "Enumerator tools for text-based network protocols";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "netlines-test";
      }) {};
 
   "netlink" = callPackage
@@ -195128,9 +197215,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Netlink communication for Haskell";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "netlist" = callPackage
@@ -195511,6 +197596,7 @@ self: {
        description = "Haskell API for Tor anonymous networking";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tor-relay";
      }) {};
 
   "network-api-support" = callPackage
@@ -195637,6 +197723,7 @@ self: {
        description = "Linux NetworkNameSpace Builder";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "network-builder";
        broken = true;
      }) {};
 
@@ -195782,6 +197869,7 @@ self: {
        description = "Domain Name System data structures";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hs-network-dns-examples-resolver";
        broken = true;
      }) {};
 
@@ -195903,6 +197991,7 @@ self: {
        doHaddock = false;
        description = "network-manager tui";
        license = lib.licenses.bsd3;
+       mainProgram = "nmt";
      }) {};
 
   "network-messagepack-rpc" = callPackage
@@ -196138,6 +198227,7 @@ self: {
        description = "A light abstraction over sockets & co. for servers";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -196760,7 +198850,8 @@ self: {
        doHaddock = false;
        description = "Future-proof system for plain-text notes";
        license = lib.licenses.agpl3Only;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "neuron";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "newbase60" = callPackage
@@ -196822,6 +198913,7 @@ self: {
        description = "List ports newer than N days on a FreeBSD system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "newports";
        broken = true;
      }) {};
 
@@ -196852,6 +198944,7 @@ self: {
        description = "A basic newsletter implimentation, using various backends";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "newsletter-server";
        broken = true;
      }) {};
 
@@ -196887,6 +198980,7 @@ self: {
        description = "Exact and approximate synthesis of quantum circuits";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gridsynth";
      }) {};
 
   "newt" = callPackage
@@ -196908,6 +199002,7 @@ self: {
        description = "A trivially simple app to create things from simple templates";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "newt";
        broken = true;
      }) {};
 
@@ -197075,6 +199170,7 @@ self: {
        ];
        description = "Ngram models for compressing and classifying text";
        license = lib.licenses.bsd3;
+       mainProgram = "ngramClassifier";
      }) {};
 
   "ngrams-loader" = callPackage
@@ -197094,6 +199190,7 @@ self: {
        description = "Ngrams loader based on http://www.ngrams.info format";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ngrams-loader";
      }) {};
 
   "ngx-export" = callPackage
@@ -197238,6 +199335,7 @@ self: {
        executableHaskellDepends = [ base nicify-lib ];
        description = "Pretty print the standard output of default `Show` instances";
        license = lib.licenses.mit;
+       mainProgram = "nicify";
      }) {};
 
   "nicify-lib" = callPackage
@@ -197272,6 +199370,7 @@ self: {
        description = "Nico Nico Douga (ニコニコ動画) Comment Translator";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nicovideo-translator";
      }) {};
 
   "nikepub" = callPackage
@@ -197293,6 +199392,7 @@ self: {
        description = "Command line utility publishes Nike+ runs on blogs and Twitter";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nikepub";
      }) {};
 
   "nimber" = callPackage
@@ -197343,6 +199443,7 @@ self: {
        description = "IDL compiler and RPC/distributed object framework for microservices";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nirum";
      }) {};
 
   "nist-beacon" = callPackage
@@ -197405,6 +199506,7 @@ self: {
        ];
        description = "Easy dependency management for Nix projects";
        license = lib.licenses.mit;
+       mainProgram = "niv";
      }) {};
 
   "nix-delegate" = callPackage
@@ -197425,6 +199527,7 @@ self: {
        description = "Convenient utility for distributed Nix builds";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nix-delegate";
        broken = true;
      }) {};
 
@@ -197445,6 +199548,7 @@ self: {
        description = "Deploy Nix-built software to a NixOS machine";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nix-deploy";
        broken = true;
      }) {};
 
@@ -197470,7 +199574,8 @@ self: {
        benchmarkHaskellDepends = [ attoparsec base criterion text ];
        description = "Parse and render *.drv files";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 sorki ];
+       mainProgram = "pretty-derivation";
+       maintainers = [ lib.maintainers.Gabriel439 lib.maintainers.sorki ];
      }) {};
 
   "nix-diff" = callPackage
@@ -197491,7 +199596,11 @@ self: {
        ];
        description = "Explain why two Nix derivations differ";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 sorki terlar ];
+       mainProgram = "nix-diff";
+       maintainers = [
+         lib.maintainers.Gabriel439 lib.maintainers.sorki
+         lib.maintainers.terlar
+       ];
      }) {};
 
   "nix-eval" = callPackage
@@ -197538,6 +199647,7 @@ self: {
        description = "Convert a tree of files into fixed-output derivations";
        license = lib.licenses.agpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nix-freeze-tree";
        broken = true;
      }) {};
 
@@ -197564,6 +199674,7 @@ self: {
        description = "Reify the Nix build graph into a Haskell graph data structure";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nix-graph";
        broken = true;
      }) {};
 
@@ -197584,7 +199695,8 @@ self: {
        ];
        description = "Parse and render .narinfo files";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sorki ];
+       mainProgram = "pretty-narinfo";
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "nix-paths" = callPackage
@@ -197597,7 +199709,7 @@ self: {
        libraryToolDepends = [ nix ];
        description = "Knowledge of Nix's installation directories";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {inherit (pkgs) nix;};
 
   "nix-thunk" = callPackage
@@ -197626,6 +199738,7 @@ self: {
        description = "Lightweight dependency management with Nix";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nix-thunk";
      }) {};
 
   "nix-tools" = callPackage
@@ -197685,7 +199798,8 @@ self: {
        ];
        description = "Interactively browse a Nix store paths dependencies";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ utdemir ];
+       mainProgram = "nix-tree";
+       maintainers = [ lib.maintainers.utdemir ];
      }) {};
 
   "nixdu" = callPackage
@@ -197706,6 +199820,7 @@ self: {
        ];
        description = "Interactively browse a Nix store paths dependencies";
        license = lib.licenses.bsd3;
+       mainProgram = "nixdu";
      }) {};
 
   "nixfmt" = callPackage
@@ -197726,6 +199841,7 @@ self: {
        ];
        description = "An opinionated formatter for Nix";
        license = lib.licenses.mpl20;
+       mainProgram = "nixfmt";
      }) {};
 
   "nixfromnpm" = callPackage
@@ -197753,6 +199869,7 @@ self: {
        description = "Generate nix expressions from npm packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nixfromnpm";
        broken = true;
      }) {};
 
@@ -197819,6 +199936,7 @@ self: {
        description = "Tool for semi-automatic updating of nixpkgs repository";
        license = lib.licenses.cc0;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nixpkgs-update";
        broken = true;
      }) {};
 
@@ -197898,6 +200016,7 @@ self: {
        description = "Network Manager, binding to libnm-glib";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nm-demo";
        broken = true;
      }) {g = null; inherit (pkgs) glib; libnm-glib = null; 
          nm-glib = null;};
@@ -198019,6 +200138,7 @@ self: {
        description = "Math in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "noether";
        broken = true;
      }) {};
 
@@ -198034,6 +200154,7 @@ self: {
        description = "Parse and compare nofib runs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nofib-analyse";
        broken = true;
      }) {};
 
@@ -198049,6 +200170,7 @@ self: {
        description = "Parse and compare nofib runs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nofib-analyze";
        broken = true;
      }) {};
 
@@ -198074,6 +200196,7 @@ self: {
        description = "A friendly language for graphic design";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "noise";
        broken = true;
      }) {};
 
@@ -198239,6 +200362,7 @@ self: {
        description = "A Nomic game in haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nomyx-server";
      }) {};
 
   "nomyx-web" = callPackage
@@ -198609,6 +200733,7 @@ self: {
        ];
        description = "Normalize data using a variety of methods";
        license = lib.licenses.gpl3Only;
+       mainProgram = "normalize";
      }) {};
 
   "normalize-imports" = callPackage
@@ -198623,6 +200748,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "Sort and align Haskell import statements";
        license = lib.licenses.bsd3;
+       mainProgram = "normalize-imports";
      }) {};
 
   "not-gloss" = callPackage
@@ -198742,9 +200868,8 @@ self: {
          transformers tuple
        ];
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "notifications-tray-icon";
      }) {};
 
   "notmuch" = callPackage
@@ -198783,6 +200908,7 @@ self: {
        description = "Binding for notmuch MUA library";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "notmuch-test";
      }) {inherit (pkgs) notmuch;};
 
   "notmuch-web" = callPackage
@@ -198821,6 +200947,7 @@ self: {
        description = "A web interface to the notmuch email indexer";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "notmuch-web";
      }) {};
 
   "notzero" = callPackage
@@ -198877,6 +201004,7 @@ self: {
        description = "Zeit Now haskell-side integration and introspection tools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "module-scanner";
      }) {};
 
   "nowdoc" = callPackage
@@ -199182,6 +201310,7 @@ self: {
        ];
        description = "Computing the nth prime";
        license = lib.licenses.mit;
+       mainProgram = "nth-prime";
      }) {};
 
   "ntha" = callPackage
@@ -199203,6 +201332,7 @@ self: {
        testHaskellDepends = [ base containers hspec pretty ];
        description = "A tiny statically typed functional programming language";
        license = lib.licenses.bsd3;
+       mainProgram = "ntha";
      }) {};
 
   "nthable" = callPackage
@@ -199258,6 +201388,7 @@ self: {
        description = "NTRIP client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ntrip-client";
        broken = true;
      }) {};
 
@@ -199560,6 +201691,7 @@ self: {
        description = "Ode solvers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Kepler";
        broken = true;
      }) {};
 
@@ -199906,6 +202038,7 @@ self: {
        ];
        executableHaskellDepends = [ base optparse-applicative text ];
        license = lib.licenses.bsd3;
+       mainProgram = "nuxeo";
      }) {};
 
   "nvfetcher" = callPackage
@@ -199944,7 +202077,8 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Generate nix sources expr for the latest version of packages";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ berberman ];
+       mainProgram = "nvfetcher";
+       maintainers = [ lib.maintainers.berberman ];
      }) {};
 
   "nvim-hs" = callPackage
@@ -200030,6 +202164,7 @@ self: {
        description = "Neovim plugin that runs ghcid to update the quickfix list";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nvim-hs-ghcid";
      }) {};
 
   "nvvm" = callPackage
@@ -200064,6 +202199,7 @@ self: {
        description = "Bored? Nyan cat!";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nyan";
      }) {};
 
   "nyan-interpolation" = callPackage
@@ -200161,6 +202297,7 @@ self: {
        description = "An interactive GUI for manipulating L-systems";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "nymphaea";
      }) {};
 
   "nyx-game" = callPackage
@@ -200188,6 +202325,7 @@ self: {
        description = "A bullet-hell game made with SDL2";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "app";
        broken = true;
      }) {};
 
@@ -200211,6 +202349,7 @@ self: {
        testToolDepends = [ doctest markdown-unlit ];
        description = "Type-safe time library";
        license = lib.licenses.mpl20;
+       mainProgram = "play-o-clock";
      }) {};
 
   "oanda-rest-api" = callPackage
@@ -200617,6 +202756,7 @@ self: {
        description = "Parse Rocket League replays";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "octane";
      }) {};
 
   "octohat" = callPackage
@@ -200648,6 +202788,7 @@ self: {
        description = "A tested, minimal wrapper around GitHub's API";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "abc";
      }) {};
 
   "octopus" = callPackage
@@ -200669,6 +202810,7 @@ self: {
        description = "Lisp with more dynamism, more power, more simplicity";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "octi";
      }) {};
 
   "oculus" = callPackage
@@ -200685,9 +202827,7 @@ self: {
        librarySystemDepends = [ libGL libX11 libXinerama ovr systemd ];
        description = "Oculus Rift ffi providing head tracking data";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
      }) {inherit (pkgs) libGL; inherit (pkgs.xorg) libX11; 
          inherit (pkgs.xorg) libXinerama; ovr = null; 
@@ -200720,6 +202860,7 @@ self: {
        benchmarkHaskellDepends = [ async base text weigh ];
        description = "Haskell binding to the ODBC API, aimed at SQL Server driver";
        license = lib.licenses.bsd3;
+       mainProgram = "odbc";
      }) {inherit (pkgs) unixODBC;};
 
   "odd-jobs" = callPackage
@@ -200917,6 +203058,7 @@ self: {
        description = "Interface to the Ohloh API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "cmdoh";
      }) {};
 
   "oi" = callPackage
@@ -201063,6 +203205,7 @@ self: {
        description = "An OpenLayers JavaScript Wrapper and Webframework with snaplet-fay";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "olwrapper";
      }) {};
 
   "om-actor" = callPackage
@@ -201164,6 +203307,7 @@ self: {
        description = "A simple tool to generate OMakefile for latex files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "omaketex";
        broken = true;
      }) {};
 
@@ -201205,6 +203349,7 @@ self: {
        description = "A purely functional programming language and a proof system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "omega";
        broken = true;
      }) {};
 
@@ -201251,6 +203396,7 @@ self: {
        description = "A pretty-printer wrapper to faciliate ease of formatting during development";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "omnifmt";
        broken = true;
      }) {};
 
@@ -201293,6 +203439,7 @@ self: {
        description = "Program that sends traffic through SSH tunnels on-demand";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "on-demand-ssh-tunnel";
        broken = true;
      }) {};
 
@@ -201482,6 +203629,7 @@ self: {
        executableHaskellDepends = [ base parsec regex-compat ];
        description = "A grep-like tool for filtering on words or lines";
        license = "GPL";
+       mainProgram = "only";
      }) {};
 
   "onpartitions" = callPackage
@@ -201700,6 +203848,7 @@ self: {
        description = "Open algebraic data type examples";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "open-adt-tutorial";
      }) {};
 
   "open-browser" = callPackage
@@ -201714,6 +203863,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Open a web browser from Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "open-haddock" = callPackage
@@ -201728,6 +203878,7 @@ self: {
        description = "Open haddock HTML documentation";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "open-haddock";
        broken = true;
      }) {};
 
@@ -201810,6 +203961,7 @@ self: {
        executableHaskellDepends = [ base type-fun ];
        description = "Extensible, type-safe unions";
        license = lib.licenses.mit;
+       mainProgram = "example";
      }) {};
 
   "open-witness" = callPackage
@@ -201971,6 +204123,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "OpenAPI 3.0 data model";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "openapi3-code-generator" = callPackage
@@ -202011,6 +204164,7 @@ self: {
        description = "OpenAPI3 Haskell Client Code Generator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "openapi3-code-generator-exe";
        broken = true;
      }) {};
 
@@ -202206,6 +204360,7 @@ self: {
        ];
        description = "Library and example for using DLP stereo in OpenGL";
        license = lib.licenses.mit;
+       mainProgram = "opengl-dlp-test";
      }) {};
 
   "opengl-spacenavigator" = callPackage
@@ -202222,6 +204377,7 @@ self: {
        ];
        description = "Library and example for using a SpaceNavigator-compatible 3-D mouse with OpenGL";
        license = lib.licenses.mit;
+       mainProgram = "opengl-spacenavigator";
      }) {};
 
   "opengles" = callPackage
@@ -202448,6 +204604,7 @@ self: {
        description = "Fetch OpenSSH keys from a GitHub team";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "openssh-github-keys";
      }) {};
 
   "openssh-protocol" = callPackage
@@ -202641,6 +204798,7 @@ self: {
          splitmix text typed-process unordered-containers
        ];
        license = lib.licenses.asl20;
+       mainProgram = "eventlog-to-lightstep";
      }) {};
 
   "opentelemetry-lightstep_0_8_0" = callPackage
@@ -202668,6 +204826,7 @@ self: {
        ];
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "eventlog-to-lightstep";
      }) {};
 
   "opentelemetry-wai" = callPackage
@@ -202764,6 +204923,7 @@ self: {
        description = "Unicode characters";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "opentheory-char-test";
        broken = true;
      }) {};
 
@@ -203084,6 +205244,7 @@ self: {
        description = "Access data at OpenWeatherMap";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "openweathermap";
        broken = true;
      }) {};
 
@@ -203117,6 +205278,7 @@ self: {
        executableHaskellDepends = [ base mtl random ];
        description = "Implementation of difficult monads made easy with operational semantics";
        license = lib.licenses.bsd3;
+       mainProgram = "operational-TicTacToe";
      }) {};
 
   "operational-alacarte" = callPackage
@@ -203178,6 +205340,7 @@ self: {
        ];
        description = "Compiler for OpLang, an esoteric programming language";
        license = lib.licenses.gpl3Only;
+       mainProgram = "oplang";
      }) {};
 
   "opml" = callPackage
@@ -203236,6 +205399,7 @@ self: {
        description = "Open files or URLs using associated programs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "opn";
        broken = true;
      }) {};
 
@@ -203265,7 +205429,7 @@ self: {
        ];
        description = "Optics as an abstract interface";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "optics-core" = callPackage
@@ -203398,6 +205562,7 @@ self: {
        description = "Optimal Block boundary determination for rsync-like behaviours";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "chunk";
      }) {};
 
   "optimization" = callPackage
@@ -203434,6 +205599,7 @@ self: {
        description = "A supercompiler for f-lite";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "optimusprime";
      }) {};
 
   "option" = callPackage
@@ -203474,7 +205640,7 @@ self: {
        libraryHaskellDepends = [ base ];
        description = "Optional function arguments";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "options" = callPackage
@@ -203622,7 +205788,7 @@ self: {
        ];
        description = "Auto-generate a command-line parser for your datatype";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "optparse-helper" = callPackage
@@ -203731,7 +205897,7 @@ self: {
        description = "Types and functions for Kepler orbits";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
        broken = true;
      }) {};
 
@@ -203751,6 +205917,7 @@ self: {
        description = "Orchestration-style co-ordination EDSL";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "orc";
        broken = true;
      }) {};
 
@@ -203818,6 +205985,7 @@ self: {
        description = "Haskell Wiki Demo";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "orchid-demo";
      }) {};
 
   "ord-adhoc" = callPackage
@@ -204043,6 +206211,7 @@ self: {
        executableHaskellDepends = [ base parsec regex-compat ];
        description = "Basic org to anki exporter";
        license = lib.licenses.gpl3Only;
+       mainProgram = "org2anki";
      }) {};
 
   "organize-imports" = callPackage
@@ -204057,6 +206226,7 @@ self: {
        description = "Organize scala imports";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "organize-imports";
        broken = true;
      }) {};
 
@@ -204200,6 +206370,7 @@ self: {
        description = "Token-based authentication and authorization";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "orizentic";
        broken = true;
      }) {};
 
@@ -204229,6 +206400,7 @@ self: {
        description = "A formatter for Haskell source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ormolu";
      }) {};
 
   "ormolu" = callPackage
@@ -204259,6 +206431,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A formatter for Haskell source code";
        license = lib.licenses.bsd3;
+       mainProgram = "ormolu";
      }) {};
 
   "ormolu_0_5_0_0" = callPackage
@@ -204292,6 +206465,7 @@ self: {
        description = "A formatter for Haskell source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ormolu";
      }) {};
 
   "orthotope" = callPackage
@@ -204443,6 +206617,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "Show keys pressed with an on-screen display (Linux only)";
        license = lib.licenses.bsd3;
+       mainProgram = "osdkeys";
      }) {};
 
   "oset" = callPackage
@@ -204460,6 +206635,7 @@ self: {
        description = "An insertion-order-preserving set";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "oset-app";
        broken = true;
      }) {};
 
@@ -204586,6 +206762,7 @@ self: {
        description = "OTP Authenticator (a la google) command line client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "otp-auth";
      }) {};
 
   "ottparse-pretty" = callPackage
@@ -204604,6 +206781,7 @@ self: {
        description = "Pretty-printer for Ott parse trees";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ottparse-pretty";
        broken = true;
      }) {};
 
@@ -204629,6 +206807,7 @@ self: {
        ];
        description = "External sorting package based on Conduit";
        license = lib.licenses.mit;
+       mainProgram = "SortLines";
      }) {};
 
   "overhang" = callPackage
@@ -204833,6 +207012,7 @@ self: {
        description = "Haskell Package Versioning Tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "package-vt";
        broken = true;
      }) {};
 
@@ -204872,6 +207052,7 @@ self: {
        description = "Check your cabal packages for lagging dependencies";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "packdeps";
        broken = true;
      }) {};
 
@@ -205052,6 +207233,7 @@ self: {
        description = "Tool for detecting redundant Cabal package dependencies";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "packunused";
        broken = true;
      }) {};
 
@@ -205067,6 +207249,7 @@ self: {
        description = "Read whole Pacman database which pushes it into the memory cache";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pacman-memcache";
        broken = true;
      }) {};
 
@@ -205191,6 +207374,7 @@ self: {
        description = "Pagarme API wrapper";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "testbin";
        broken = true;
      }) {};
 
@@ -205213,6 +207397,7 @@ self: {
        executableHaskellDepends = [ base bytestring conduit-extra text ];
        description = "Open up a pager, like 'less' or 'more'";
        license = lib.licenses.bsd2;
+       mainProgram = "hs-pager-test-pager";
      }) {};
 
   "pagerduty" = callPackage
@@ -205299,6 +207484,7 @@ self: {
        ];
        description = "Pagure client";
        license = lib.licenses.gpl2Only;
+       mainProgram = "pagure";
      }) {};
 
   "pagure-hook-receiver" = callPackage
@@ -205385,6 +207571,7 @@ self: {
        executableHaskellDepends = [ array base bytestring containers ];
        description = "Finding palindromes in strings";
        license = lib.licenses.bsd3;
+       mainProgram = "palindromes";
      }) {};
 
   "pam" = callPackage
@@ -205400,9 +207587,7 @@ self: {
        libraryToolDepends = [ c2hs ];
        description = "Haskell binding for C PAM API";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) pam;};
 
   "pan-os-syslog" = callPackage
@@ -205500,7 +207685,8 @@ self: {
        '';
        description = "Conversion between markup formats";
        license = lib.licenses.gpl2Plus;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "pandoc";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "pandoc_2_18" = callPackage
@@ -205560,7 +207746,8 @@ self: {
        description = "Conversion between markup formats";
        license = lib.licenses.gpl2Plus;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "pandoc";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "pandoc-citeproc" = callPackage
@@ -205597,6 +207784,7 @@ self: {
        description = "Supports using pandoc with citeproc";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-citeproc";
        broken = true;
      }) {};
 
@@ -205615,6 +207803,7 @@ self: {
        ];
        description = "Insert a preamble before pandoc-citeproc's bibliography";
        license = lib.licenses.gpl3Only;
+       mainProgram = "pandoc-citeproc-preamble";
      }) {};
 
   "pandoc-crossref" = callPackage
@@ -205649,6 +207838,7 @@ self: {
        doHaddock = false;
        description = "Pandoc filter for cross-references";
        license = lib.licenses.gpl2Only;
+       mainProgram = "pandoc-crossref";
      }) {};
 
   "pandoc-csv2table" = callPackage
@@ -205664,6 +207854,7 @@ self: {
        executableHaskellDepends = [ base csv pandoc pandoc-types ];
        description = "Convert CSV to Pandoc Table Markdown";
        license = lib.licenses.mit;
+       mainProgram = "pandoc-csv2table";
      }) {};
 
   "pandoc-dhall-decoder" = callPackage
@@ -205701,6 +207892,7 @@ self: {
        description = "A Pandoc filter for emphasizing code in fenced blocks";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-emphasize-code";
        broken = true;
      }) {};
 
@@ -205722,6 +207914,7 @@ self: {
        description = "A Pandoc filter to use graphviz";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-filter-graphviz";
        broken = true;
      }) {};
 
@@ -205754,6 +207947,7 @@ self: {
        description = "Pandoc filter formatting Haskell code fragments using GHC lexer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-filter-indent";
        broken = true;
      }) {};
 
@@ -205793,6 +207987,7 @@ self: {
        description = "Include other Markdown files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-include";
        broken = true;
      }) {};
 
@@ -205818,6 +208013,7 @@ self: {
        ];
        description = "A Pandoc filter for including code from source files";
        license = lib.licenses.mpl20;
+       mainProgram = "pandoc-include-code";
      }) {};
 
   "pandoc-japanese-filters" = callPackage
@@ -205914,6 +208110,7 @@ self: {
        description = "Pandoc-filter to evaluate `code` section in markdown and auto-embed output";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-markdown-ghci-filter-exe";
        broken = true;
      }) {};
 
@@ -205937,6 +208134,7 @@ self: {
        description = "Pandoc filter to include CSV files";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-placetable";
        broken = true;
      }) {};
 
@@ -205962,6 +208160,7 @@ self: {
        description = "Render and insert PlantUML diagrams with Pandoc";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-plantuml-diagrams";
        broken = true;
      }) {};
 
@@ -205997,6 +208196,7 @@ self: {
        ];
        description = "A Pandoc filter to include figures generated from code blocks using your plotting toolkit of choice";
        license = lib.licenses.gpl2Plus;
+       mainProgram = "pandoc-plot";
      }) {};
 
   "pandoc-plot_1_5_3" = callPackage
@@ -206032,6 +208232,7 @@ self: {
        description = "A Pandoc filter to include figures generated from code blocks using your plotting toolkit of choice";
        license = lib.licenses.gpl2Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-plot";
      }) {};
 
   "pandoc-pyplot" = callPackage
@@ -206063,6 +208264,7 @@ self: {
        description = "A Pandoc filter to include figures generated from Python code blocks";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-pyplot";
        broken = true;
      }) {};
 
@@ -206078,6 +208280,7 @@ self: {
        executableHaskellDepends = [ base mtl pandoc-types text ];
        description = "Convert Pandoc Markdown-style footnotes into sidenotes";
        license = lib.licenses.mit;
+       mainProgram = "pandoc-sidenote";
      }) {};
 
   "pandoc-stylefrommeta" = callPackage
@@ -206095,6 +208298,7 @@ self: {
        ];
        description = "Pandoc filter to customize links, images and paragraphs";
        license = lib.licenses.bsd3;
+       mainProgram = "styleFromMeta";
      }) {};
 
   "pandoc-throw" = callPackage
@@ -206143,6 +208347,7 @@ self: {
        description = "Literate Haskell support for GitHub's Markdown flavor";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pandoc-unlit";
        broken = true;
      }) {};
 
@@ -206181,6 +208386,7 @@ self: {
        ];
        description = "Pandoc filter for native Vim code highlighting";
        license = lib.licenses.bsd3;
+       mainProgram = "vimhl";
      }) {};
 
   "pandora" = callPackage
@@ -206225,6 +208431,7 @@ self: {
        description = "A super-pang clone";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pang-a-lambda";
        broken = true;
      }) {};
 
@@ -206286,6 +208493,7 @@ self: {
        description = "Pandoc filter to unwrap nested blocks";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "panhandle";
        broken = true;
      }) {lazysmallcheck2012 = null;};
 
@@ -206320,6 +208528,7 @@ self: {
        description = "Pandoc filter to execute code blocks";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "panpipe";
        broken = true;
      }) {};
 
@@ -206350,6 +208559,7 @@ self: {
        description = "Pansite: a simple web site management tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pansite";
        broken = true;
      }) {};
 
@@ -206872,6 +209082,7 @@ self: {
        description = "A passphrase generator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "paphragen";
        broken = true;
      }) {};
 
@@ -206894,6 +209105,7 @@ self: {
        description = "packrat parser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "papillon";
        broken = true;
      }) {};
 
@@ -206909,6 +209121,7 @@ self: {
        description = "Packrat parsing; linear-time parsers for grammars in TDPL";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pappy";
        broken = true;
      }) {};
 
@@ -207001,6 +209214,7 @@ self: {
        description = "Paragon";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parac";
        broken = true;
      }) {};
 
@@ -207155,6 +209369,7 @@ self: {
        description = "http proxy server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "paranoia";
        broken = true;
      }) {};
 
@@ -207326,6 +209541,7 @@ self: {
        description = "Help Manage project specific documentation";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parochial";
        broken = true;
      }) {};
 
@@ -207338,9 +209554,7 @@ self: {
        libraryHaskellDepends = [ array base ];
        description = "Simply interfacing the parallel port on linux";
        license = "GPL";
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "parquet-hs" = callPackage
@@ -207446,6 +209660,7 @@ self: {
        description = "Parse command-line arguments";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parseargs-example";
        broken = true;
      }) {};
 
@@ -207570,6 +209785,7 @@ self: {
        description = "Pratt Parser combinator for Parsec";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parsec-pratt-example";
        broken = true;
      }) {};
 
@@ -207749,6 +209965,7 @@ self: {
        description = "Prints Haskell parse trees in JSON";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "parser-helper";
        broken = true;
      }) {};
 
@@ -208178,6 +210395,7 @@ self: {
        description = "Inspect, create, and alter MBRs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "partly";
        broken = true;
      }) {};
 
@@ -208227,6 +210445,7 @@ self: {
        description = "a simple password manager";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "passman";
        broken = true;
      }) {};
 
@@ -208249,6 +210468,7 @@ self: {
        description = "Deterministic password generator command line interface";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "passman-cli";
      }) {};
 
   "passman-core" = callPackage
@@ -208302,10 +210522,8 @@ self: {
        ];
        description = "Hashing and checking of passwords";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
+       maintainers = [ lib.maintainers.cdepillabout ];
      }) {};
 
   "password-instances" = callPackage
@@ -208329,10 +210547,8 @@ self: {
        ];
        description = "typeclass instances for password package";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
+       maintainers = [ lib.maintainers.cdepillabout ];
      }) {};
 
   "password-types" = callPackage
@@ -208412,6 +210628,7 @@ self: {
        description = "A simple command line pasting utility";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pasty";
        broken = true;
      }) {};
 
@@ -208443,6 +210660,7 @@ self: {
        description = "Terminal-based presentations using Pandoc";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "patat";
        broken = true;
      }) {};
 
@@ -208507,6 +210725,7 @@ self: {
        description = "Compose a big image from overlapping parts";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "patch-image-llvm";
      }) {};
 
   "patches-vector" = callPackage
@@ -208678,7 +210897,7 @@ self: {
        testHaskellDepends = [ base hspec HUnit QuickCheck text ];
        description = "Components of paths";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ psibi ];
+       maintainers = [ lib.maintainers.psibi ];
      }) {};
 
   "path-text-utf8" = callPackage
@@ -208776,7 +210995,7 @@ self: {
        ];
        description = "Library for representing and manipulating type-safe file paths";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "pathtype" = callPackage
@@ -208852,6 +211071,7 @@ self: {
        description = "A webpage scraper for Patreon which dumps a list of patrons to a text file";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "patronscraper";
        broken = true;
      }) {};
 
@@ -208932,7 +211152,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion mwc-random vector ];
        description = "Greatest convex majorants and least concave minorants";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "paymill" = callPackage
@@ -208970,6 +211190,7 @@ self: {
        description = "Client for a limited part of PayPal's Adaptive Payments API";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -209023,6 +211244,7 @@ self: {
        description = "pastebin command line application";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pb";
        broken = true;
      }) {};
 
@@ -209044,6 +211266,7 @@ self: {
        description = "Utility CLI for working with protobuf files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pbhelp";
        broken = true;
      }) {};
 
@@ -209145,6 +211368,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pcapng-exe";
      }) {};
 
   "pcd-loader" = callPackage
@@ -209170,6 +211394,7 @@ self: {
        description = "PCD file loader";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pcd2bin";
        broken = true;
      }) {};
 
@@ -209416,6 +211641,7 @@ self: {
        description = "Tool to generate PDF from haskintex templates and YAML input";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdf-slave";
      }) {};
 
   "pdf-slave-server" = callPackage
@@ -209450,6 +211676,7 @@ self: {
        description = "Web service for pdf-slave tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdf-slave-server";
        broken = true;
      }) {pdf-slave-server-api = null;};
 
@@ -209556,6 +211783,7 @@ self: {
        description = "Simple pdf viewer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdf-toolbox-viewer";
        broken = true;
      }) {};
 
@@ -209607,6 +211835,7 @@ self: {
        description = "Name a PDF file using information from the pdfinfo command";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdfname";
        broken = true;
      }) {};
 
@@ -209624,6 +211853,7 @@ self: {
        description = "split two-column PDFs, so there is one column per page";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdfsplit";
        broken = true;
      }) {};
 
@@ -209647,6 +211877,7 @@ self: {
        description = "Extracts text from PDF using poppler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pdftotext.hs";
        broken = true;
      }) {poppler-cpp = null;};
 
@@ -209800,6 +212031,7 @@ self: {
        description = "a lazy non-deterministic concatenative programming language";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "peg";
        broken = true;
      }) {};
 
@@ -210021,6 +212253,7 @@ self: {
        description = "Create beautiful diagrams just by typing mathematical notation in plain text";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "penrose";
        broken = true;
      }) {};
 
@@ -210109,6 +212342,7 @@ self: {
        benchmarkToolDepends = [ cpphs ];
        description = "Find duplicate images";
        license = lib.licenses.bsd3;
+       mainProgram = "phash";
      }) {};
 
   "perdure" = callPackage
@@ -210138,6 +212372,7 @@ self: {
        description = "Robust persistence for acyclic immutable data";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "perdure";
      }) {};
 
   "peregrin" = callPackage
@@ -210216,6 +212451,7 @@ self: {
        description = "Low-level run time measurement";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "perf-explore";
      }) {};
 
   "perf-analysis" = callPackage
@@ -210239,6 +212475,7 @@ self: {
        description = "analysis example using perf";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "perf-examples";
      }) {};
 
   "perfect-hash-generator" = callPackage
@@ -210295,6 +212532,7 @@ self: {
        description = "Library for performing vector shuffles";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -210360,6 +212598,7 @@ self: {
        testHaskellDepends = [ base hspec HUnit text time ];
        description = "Parse and format date periods, collapse and expand their text representations";
        license = lib.licenses.bsd3;
+       mainProgram = "period";
      }) {};
 
   "periodic" = callPackage
@@ -210376,6 +212615,7 @@ self: {
        description = "A reliable at-least-once periodic job scheduler backed by redis";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -210481,6 +212721,7 @@ self: {
        description = "Periodic task system haskell server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "periodicd";
      }) {};
 
   "perm" = callPackage
@@ -210587,9 +212828,7 @@ self: {
        ];
        description = "Serialization library with state and leb128 encoding";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
      }) {};
 
   "persist2er" = callPackage
@@ -210606,6 +212845,7 @@ self: {
        description = "Transforms persist's quasi-quoted syntax into ER format";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "persist2er";
        broken = true;
      }) {};
 
@@ -210686,7 +212926,7 @@ self: {
        ];
        description = "Type-safe, multi-backend data serialization";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ psibi ];
+       maintainers = [ lib.maintainers.psibi ];
      }) {};
 
   "persistent_2_14_0_2" = callPackage
@@ -210723,7 +212963,7 @@ self: {
        description = "Type-safe, multi-backend data serialization";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ psibi ];
+       maintainers = [ lib.maintainers.psibi ];
      }) {};
 
   "persistent-audit" = callPackage
@@ -210754,6 +212994,7 @@ self: {
        description = "Parses a Persist Model file and produces Audit Models";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "persistent-audit";
      }) {};
 
   "persistent-cereal" = callPackage
@@ -210816,6 +213057,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Persistent module discover utilities";
        license = lib.licenses.bsd3;
+       mainProgram = "persistent-discover";
      }) {};
 
   "persistent-documentation" = callPackage
@@ -211071,6 +213313,7 @@ self: {
        description = "A pure haskell backend for the persistent library using MySQL database server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "persistent-mysql-haskell-example";
      }) {};
 
   "persistent-odbc" = callPackage
@@ -211360,7 +213603,7 @@ self: {
        ];
        description = "Backend for the persistent library using sqlite3";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ psibi ];
+       maintainers = [ lib.maintainers.psibi ];
      }) {inherit (pkgs) sqlite;};
 
   "persistent-template" = callPackage
@@ -211373,7 +213616,7 @@ self: {
        doHaddock = false;
        description = "Type-safe, non-relational, multi-backend persistence";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ psibi ];
+       maintainers = [ lib.maintainers.psibi ];
      }) {};
 
   "persistent-template-classy" = callPackage
@@ -211558,6 +213801,7 @@ self: {
        description = "Persona (BrowserID) Identity Provider";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "persona";
      }) {};
 
   "pesca" = callPackage
@@ -211573,6 +213817,7 @@ self: {
        description = "Proof Editor for Sequent Calculus";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pesca";
        broken = true;
      }) {};
 
@@ -211700,6 +213945,7 @@ self: {
        description = "REST service and library for creating/consuming temporary PostgreSQL databases";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pg-harness";
        broken = true;
      }) {};
 
@@ -211732,6 +213978,7 @@ self: {
        description = "REST service for creating temporary PostgreSQL databases";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pg-harness";
        broken = true;
      }) {};
 
@@ -211759,6 +214006,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pg-recorder";
        broken = true;
      }) {};
 
@@ -211837,6 +214085,7 @@ self: {
        description = "browse directory listing webpages and download files from them";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pgdl";
        broken = true;
      }) {};
 
@@ -212055,6 +214304,7 @@ self: {
        description = "Deprecated - ghci debug viewer with simple editor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "phoityne";
        broken = true;
      }) {};
 
@@ -212078,6 +214328,7 @@ self: {
        ];
        description = "Haskell Debug Adapter for Visual Studio Code";
        license = lib.licenses.bsd3;
+       mainProgram = "phoityne-vscode";
      }) {};
 
   "phone-metadata" = callPackage
@@ -212306,6 +214557,7 @@ self: {
        description = "A library for working with generalized phonetic languages usage";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pldPL";
      }) {};
 
   "phonetic-languages-plus" = callPackage
@@ -212329,6 +214581,7 @@ self: {
        description = "Some common shared between different packages functions";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "distributionTextG";
      }) {};
 
   "phonetic-languages-properties" = callPackage
@@ -212681,6 +214934,7 @@ self: {
        executableHaskellDepends = [ base mmsyn2-array mmsyn5 ];
        description = "Prepares Ukrainian text to be used as a phonetic language text";
        license = lib.licenses.mit;
+       mainProgram = "unconcatUkr";
      }) {};
 
   "phonetic-languages-vector" = callPackage
@@ -212738,6 +214992,7 @@ self: {
        ];
        description = "Rename photo image files based on EXIF shoot date";
        license = lib.licenses.isc;
+       mainProgram = "photoname";
      }) {};
 
   "phraskell" = callPackage
@@ -212752,6 +215007,7 @@ self: {
        description = "A fractal viewer";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "phraskell";
        broken = true;
      }) {};
 
@@ -212786,6 +215042,7 @@ self: {
        description = "Utility for clustering phylogenetic trees in Newick format based on Robinson-Foulds distance";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "phybin";
        broken = true;
      }) {};
 
@@ -212819,6 +215076,7 @@ self: {
        description = "Applied pi-calculus interpreter";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "phi";
        broken = true;
      }) {};
 
@@ -212844,6 +215102,7 @@ self: {
        description = "Demo implementation of typechecker for dependently-typed language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pi-forall";
        broken = true;
      }) {};
 
@@ -212914,6 +215173,7 @@ self: {
        description = "Set up port forwarding with the Private Internet Access VPN service";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pia-forward";
      }) {};
 
   "pianola" = callPackage
@@ -212952,6 +215212,7 @@ self: {
        description = "simple image manipulation functions";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "picedit";
        broken = true;
      }) {};
 
@@ -213050,6 +215311,7 @@ self: {
        description = "Converts a svg image to tikz code";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pictikz";
        broken = true;
      }) {};
 
@@ -213064,6 +215326,7 @@ self: {
        executableHaskellDepends = [ base mtl ];
        description = "a simple pid controller";
        license = "unknown";
+       mainProgram = "pid";
      }) {};
 
   "pid1" = callPackage
@@ -213078,6 +215341,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Do signal handling and orphan reaping for Unix PID1 init processes";
        license = lib.licenses.mit;
+       mainProgram = "pid1";
      }) {};
 
   "pidfile" = callPackage
@@ -213110,6 +215374,7 @@ self: {
        description = "Yet another Haskell build system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pier";
      }) {};
 
   "pier-core" = callPackage
@@ -213145,6 +215410,7 @@ self: {
        description = "A Piet interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "piet";
        broken = true;
      }) {};
 
@@ -213163,6 +215429,7 @@ self: {
        description = "dice game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pig";
        broken = true;
      }) {};
 
@@ -213178,6 +215445,7 @@ self: {
        executableHaskellDepends = [ base mtl parsec text ];
        description = "Yet another text-to-html converter";
        license = lib.licenses.bsd3;
+       mainProgram = "piki";
      }) {};
 
   "pinboard" = callPackage
@@ -213223,7 +215491,8 @@ self: {
        ];
        description = "Back up the notes you've saved to Pinboard";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ bdesham ];
+       mainProgram = "pnbackup";
+       maintainers = [ lib.maintainers.bdesham ];
      }) {};
 
   "pinch" = callPackage
@@ -213270,6 +215539,7 @@ self: {
        description = "A code generator for the pinch Thrift library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pinch-gen";
        broken = true;
      }) {};
 
@@ -213356,6 +215626,7 @@ self: {
        ];
        description = "Attoparsec parsers of ping utility";
        license = lib.licenses.asl20;
+       mainProgram = "ping-parser-attoparsec-exe";
      }) {};
 
   "ping-wrapper" = callPackage
@@ -213379,6 +215650,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Haskell Ping wrapper";
        license = lib.licenses.asl20;
+       mainProgram = "ping-wrapper";
      }) {};
 
   "pinned-warnings" = callPackage
@@ -213458,6 +215730,7 @@ self: {
        ];
        description = "Open your editor, pipe the output to the system clipboard";
        license = lib.licenses.bsd2;
+       mainProgram = "pipeclip";
      }) {};
 
   "piped" = callPackage
@@ -213515,7 +215788,7 @@ self: {
        ];
        description = "Compositional pipelines";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-aeson" = callPackage
@@ -213594,6 +215867,7 @@ self: {
        description = "Streaming parsing in the pipes-core framework with Attoparsec";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "MimeParser";
      }) {};
 
   "pipes-bgzf" = callPackage
@@ -213684,7 +215958,7 @@ self: {
        ];
        description = "ByteString support for pipes";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-bzip" = callPackage
@@ -213855,7 +216129,7 @@ self: {
        testHaskellDepends = [ async base pipes stm ];
        description = "Concurrency for the pipes ecosystem";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-conduit" = callPackage
@@ -213918,7 +216192,7 @@ self: {
        ];
        description = "Fast, streaming csv parser";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-errors" = callPackage
@@ -213978,7 +216252,7 @@ self: {
        ];
        description = "Extra utilities for pipes";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-fastx" = callPackage
@@ -214063,7 +216337,7 @@ self: {
        testHaskellDepends = [ base doctest lens-family-core ];
        description = "Group streams into substreams";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-http" = callPackage
@@ -214081,7 +216355,7 @@ self: {
        ];
        description = "HTTP client with pipes interface";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-illumina" = callPackage
@@ -214207,6 +216481,7 @@ self: {
        ];
        description = "LZMA compressors and decompressors for the Pipes package";
        license = lib.licenses.bsd3;
+       mainProgram = "pipes-lzma-unxz";
      }) {};
 
   "pipes-misc" = callPackage
@@ -214338,6 +216613,7 @@ self: {
        description = "Examples using pipes-p2p";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "address-exchanger";
      }) {};
 
   "pipes-parse" = callPackage
@@ -214349,7 +216625,7 @@ self: {
        libraryHaskellDepends = [ base pipes transformers ];
        description = "Parsing infrastructure for the pipes ecosystem";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-postgresql-simple" = callPackage
@@ -214390,6 +216666,7 @@ self: {
        description = "Alternate Prelude for the pipes ecosystem";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pipes-protolude-exe";
      }) {};
 
   "pipes-pulse-simple" = callPackage
@@ -214430,6 +216707,7 @@ self: {
        description = "A few pipes to control the timing of yields";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "PipesRealTimeExample";
        broken = true;
      }) {};
 
@@ -214471,7 +216749,7 @@ self: {
        ];
        description = "Safety for the pipes ecosystem";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "pipes-shell" = callPackage
@@ -214602,6 +216880,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "WebSockets in the Pipes framework";
        license = lib.licenses.bsd3;
+       mainProgram = "pipes-websockets-example";
      }) {};
 
   "pipes-zeromq4" = callPackage
@@ -214663,6 +216942,7 @@ self: {
        description = "A dependently typed core language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pisigma";
      }) {};
 
   "pit" = callPackage
@@ -214686,6 +216966,7 @@ self: {
        description = "Account management tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pit";
        broken = true;
      }) {};
 
@@ -214732,6 +217013,7 @@ self: {
        description = "A library and a CLI tool for accessing Pivotal Tracker API";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tracker";
        broken = true;
      }) {};
 
@@ -214751,6 +217033,7 @@ self: {
        description = "A program for turning pixel art into 3D prints";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pixel-printer-exe";
        broken = true;
      }) {};
 
@@ -214799,6 +217082,7 @@ self: {
        description = "A library and application for generating pixelated avatars";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pixelated-avatar-generator";
        broken = true;
      }) {};
 
@@ -214853,9 +217137,8 @@ self: {
        ];
        description = "Haskell game engine like fantasy console";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "piyo-exe";
      }) {};
 
   "pkcs1" = callPackage
@@ -214918,6 +217201,7 @@ self: {
        description = "Package dependency graph for installed packages";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pkggraph";
        broken = true;
      }) {};
 
@@ -214941,6 +217225,7 @@ self: {
        description = "RPM package tree diff tool";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pkgtreediff";
      }) {};
 
   "pktree" = callPackage
@@ -214966,6 +217251,7 @@ self: {
        executableSystemDepends = [ libXinerama ];
        description = "A utility for X11 that moves the mouse cursor using the keyboard";
        license = lib.licenses.gpl3Only;
+       mainProgram = "place-cursor-at";
      }) {inherit (pkgs.xorg) libXinerama;};
 
   "placeholders" = callPackage
@@ -215008,6 +217294,7 @@ self: {
        ];
        description = "Plaid.com api integration library";
        license = lib.licenses.bsd3;
+       mainProgram = "plaid";
      }) {};
 
   "plailude" = callPackage
@@ -215231,6 +217518,7 @@ self: {
        description = "General Framework for compiler development";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pp";
        broken = true;
      }) {};
 
@@ -215256,6 +217544,7 @@ self: {
        description = "Library and executable for working with playlist files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "playlist";
        broken = true;
      }) {};
 
@@ -215370,6 +217659,7 @@ self: {
        description = "plot data from stdin through socketed";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "plocketed";
      }) {};
 
   "plot" = callPackage
@@ -215448,6 +217738,7 @@ self: {
        description = "A plotting tool with Mathematica like Manipulation abilities";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "plot-lab";
        broken = true;
      }) {};
 
@@ -215507,6 +217798,7 @@ self: {
        description = "Basic plotting of tabular data for the command line";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ploterific";
        broken = true;
      }) {};
 
@@ -215555,6 +217847,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "A useful cli tool to draw figures";
        license = lib.licenses.bsd3;
+       mainProgram = "ploton";
      }) {};
 
   "plots" = callPackage
@@ -215717,6 +218010,7 @@ self: {
        executableHaskellDepends = [ base bytestring linear vector ];
        description = "PLY file loader";
        license = lib.licenses.bsd3;
+       mainProgram = "ply2bin";
      }) {};
 
   "plzwrk" = callPackage
@@ -215848,6 +218142,7 @@ self: {
        description = "Multi-backend (zookeeper and sqlite) DNS Server using persistent-library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pocket-dns";
      }) {};
 
   "podenv" = callPackage
@@ -215872,6 +218167,7 @@ self: {
        description = "A container wrapper";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "podenv";
        broken = true;
      }) {};
 
@@ -215958,6 +218254,7 @@ self: {
        ];
        description = "Tool for refactoring expressions into pointfree form";
        license = "unknown";
+       mainProgram = "pointfree";
      }) {};
 
   "pointfree-fancy" = callPackage
@@ -215981,6 +218278,7 @@ self: {
        description = "Tool for refactoring expressions into pointfree form";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pointfree";
        broken = true;
      }) {};
 
@@ -216001,6 +218299,7 @@ self: {
        description = "Pointful refactoring tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pointful";
        broken = true;
      }) {};
 
@@ -216090,6 +218389,7 @@ self: {
        description = "Discord verification bot";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "poke-exe";
      }) {};
 
   "pokemon-go-protobuf-types" = callPackage
@@ -216131,6 +218431,7 @@ self: {
        description = "Texas holdem hand evaluation and simulation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "poker-exe";
        broken = true;
      }) {};
 
@@ -216271,6 +218572,7 @@ self: {
        description = "Haskell PVP version adviser";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "policeman";
        broken = true;
      }) {};
 
@@ -217082,6 +219384,7 @@ self: {
        description = "Readline effect for polysemy";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "echo-repl";
        broken = true;
      }) {};
 
@@ -217322,6 +219625,7 @@ self: {
        description = "Taming Selective Strictness";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "polyseq.cgi";
      }) {};
 
   "polysoup" = callPackage
@@ -217420,6 +219724,7 @@ self: {
        description = "pomodoro timer";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pomodoro";
      }) {};
 
   "pomohoro" = callPackage
@@ -217444,6 +219749,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pomohoro-exe";
        broken = true;
      }) {};
 
@@ -217496,6 +219802,7 @@ self: {
        description = "Extended Personal Media Network (XPMN) media server";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pontarius-mediaserver-test";
      }) {};
 
   "pontarius-xmpp" = callPackage
@@ -217590,6 +219897,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Can I have a pony?";
        license = lib.licenses.bsd3;
+       mainProgram = "can-i-have-a-pony";
      }) {};
 
   "pool" = callPackage
@@ -217827,6 +220135,7 @@ self: {
        description = "A location accessor for porcupine to connect to AWS S3 sources/sinks";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exampleS3";
      }) {};
 
   "porpoise" = callPackage
@@ -217845,6 +220154,7 @@ self: {
        executableHaskellDepends = [ base warp ];
        description = "A minimalist HTTP server framework written on top of wai";
        license = lib.licenses.mit;
+       mainProgram = "porpoise-example";
      }) {};
 
   "port-utils" = callPackage
@@ -217930,6 +220240,7 @@ self: {
        description = "FreeBSD ports index search and analysis tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "porte";
        broken = true;
      }) {};
 
@@ -218220,9 +220531,7 @@ self: {
        ];
        description = "posix bindings";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {inherit (pkgs) systemd;};
@@ -218363,6 +220672,7 @@ self: {
        description = "Sleep tracker for X11, using XScreenSaver extension and manual input";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "posplyu";
        broken = true;
      }) {};
 
@@ -218492,6 +220802,7 @@ self: {
        description = "Middleware to map LISTEN/NOTIFY messages to Websockets";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "postgres-websockets";
        broken = true;
      }) {};
 
@@ -218696,6 +221007,7 @@ self: {
        testHaskellDepends = [ base bytestring hspec postgresql-simple ];
        description = "PostgreSQL Schema Migrations";
        license = lib.licenses.bsd3;
+       mainProgram = "migrate";
      }) {};
 
   "postgresql-named" = callPackage
@@ -218740,6 +221052,7 @@ self: {
        executableHaskellDepends = [ base filepath ];
        description = "An ORM (Object Relational Mapping) and migrations DSL for PostgreSQL";
        license = "GPL";
+       mainProgram = "pg_migrate";
      }) {};
 
   "postgresql-placeholder-converter" = callPackage
@@ -218857,6 +221170,7 @@ self: {
        testHaskellDepends = [ base binary bytestring cereal hspec ];
        description = "PostgreSQL logical streaming replication library";
        license = lib.licenses.bsd3;
+       mainProgram = "replicant-example";
      }) {};
 
   "postgresql-resilient" = callPackage
@@ -218923,7 +221237,7 @@ self: {
        benchmarkHaskellDepends = [ base vector ];
        description = "Mid-Level PostgreSQL client library";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "postgresql-simple-bind" = callPackage
@@ -218986,6 +221300,7 @@ self: {
        testHaskellDepends = [ base bytestring hspec postgresql-simple ];
        description = "PostgreSQL Schema Migrations";
        license = lib.licenses.bsd3;
+       mainProgram = "migrate";
      }) {};
 
   "postgresql-simple-named" = callPackage
@@ -219328,6 +221643,7 @@ self: {
        description = "REST API for any Postgres database";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "postgrest";
      }) {};
 
   "postgrest-ws" = callPackage
@@ -219364,6 +221680,7 @@ self: {
        description = "PostgREST extension to map LISTEN/NOTIFY messages to Websockets";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "postgrest-ws";
        broken = true;
      }) {};
 
@@ -219443,6 +221760,7 @@ self: {
        description = "Postmaster ESMTP Server";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "postmaster";
        broken = true;
      }) {};
 
@@ -219458,6 +221776,7 @@ self: {
        description = "Command line Dreamcast VMU filesystem toolset";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "potato-tool";
        broken = true;
      }) {};
 
@@ -219841,6 +222160,7 @@ self: {
        description = "Practice Room";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "practice-room";
      }) {};
 
   "praglude" = callPackage
@@ -219941,6 +222261,7 @@ self: {
        description = "Diff Cabal packages";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "precis";
        broken = true;
      }) {};
 
@@ -220136,6 +222457,7 @@ self: {
        executableHaskellDepends = [ base bytestring ];
        description = "Prefetch stdin even before stdout is ready";
        license = lib.licenses.bsd3;
+       mainProgram = "prefetch";
      }) {};
 
   "prefix-expression" = callPackage
@@ -220580,6 +222902,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Typeclass for human-readable display";
        license = lib.licenses.bsd3;
+       mainProgram = "pretty-display-example";
      }) {};
 
   "pretty-error" = callPackage
@@ -220618,6 +222941,7 @@ self: {
        description = "Functionality for beautifying GHCi";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pp-ghci";
        broken = true;
      }) {};
 
@@ -220708,6 +223032,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Tools for working with derived `Show` instances and generic inspection of values";
        license = lib.licenses.mit;
+       mainProgram = "ppsh";
      }) {};
 
   "pretty-show-ansi-wl" = callPackage
@@ -220748,7 +223073,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion text ];
        description = "pretty printer for data types with a 'Show' instance";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       maintainers = [ lib.maintainers.cdepillabout ];
      }) {};
 
   "pretty-simple_4_1_1_0" = callPackage
@@ -220776,7 +223101,8 @@ self: {
        description = "pretty printer for data types with a 'Show' instance";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       mainProgram = "pretty-simple";
+       maintainers = [ lib.maintainers.cdepillabout ];
      }) {};
 
   "pretty-sop" = callPackage
@@ -220808,6 +223134,7 @@ self: {
        executableHaskellDepends = [ base text ];
        description = "Styling and coloring terminal output with ANSI escape sequences";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "pretty-tree" = callPackage
@@ -221541,6 +223868,7 @@ self: {
        description = "ImageBoard on Happstack and HSP";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "primula-board";
      }) {};
 
   "primula-bot" = callPackage
@@ -221560,6 +223888,7 @@ self: {
        description = "Jabber-bot for primula-board ImageBoard";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "primula-bot";
      }) {};
 
   "primus" = callPackage
@@ -221613,6 +223942,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Print all ANSI console colors";
        license = lib.licenses.bsd3;
+       mainProgram = "print-console-colors";
      }) {};
 
   "print-debugger" = callPackage
@@ -221713,6 +224043,7 @@ self: {
        executableHaskellDepends = [ base xosd ];
        description = "Simple tool to display some text on an on-screen display";
        license = lib.licenses.bsd3;
+       mainProgram = "printxosd";
      }) {};
 
   "priority-queue" = callPackage
@@ -221744,6 +224075,7 @@ self: {
        description = "Cooperative task prioritization";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "_PrioritySync_Internal_Tests";
      }) {};
 
   "private-hackage-uploader" = callPackage
@@ -221762,6 +224094,7 @@ self: {
        executableHaskellDepends = [ base directory shelly text ];
        description = "Upload a package to the public or private hackage, building its docs";
        license = lib.licenses.mit;
+       mainProgram = "private-hackage-uploader";
      }) {};
 
   "privileged-concurrency" = callPackage
@@ -222226,6 +224559,7 @@ self: {
        ];
        description = "An IO library for testing interactive command line programs";
        license = lib.licenses.mit;
+       mainProgram = "example-netcat-test";
      }) {};
 
   "producer" = callPackage
@@ -222303,6 +224637,7 @@ self: {
        description = "Generate flamegraphs from ghc RTS .prof files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "prof-flamegraph";
        broken = true;
      }) {};
 
@@ -222320,6 +224655,7 @@ self: {
        description = "Convert GHC profiles into GraphViz's dot format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "prof2dot";
      }) {};
 
   "prof2pretty" = callPackage
@@ -222359,6 +224695,7 @@ self: {
        description = "Restructure GHC profile reports";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "profiterole";
      }) {};
 
   "profiteur" = callPackage
@@ -222380,6 +224717,7 @@ self: {
        description = "Treemap visualiser for GHC prof files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "profiteur";
      }) {};
 
   "profunctor-arrows" = callPackage
@@ -222454,6 +224792,7 @@ self: {
        description = "A compact optics library compatible with the typeclasses in profunctors";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "doctest";
        broken = true;
      }) {coapplicative = null;};
 
@@ -222576,6 +224915,7 @@ self: {
        description = "Multilabel classification model which learns sequentially (online)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "progressive";
        broken = true;
      }) {};
 
@@ -222788,6 +225128,7 @@ self: {
        description = "A command line tool to visualize query resolution in Prolog";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsprolog-graph";
      }) {};
 
   "prolog-graph-lib" = callPackage
@@ -222922,6 +225263,7 @@ self: {
        description = "Instrument applications with metrics and publish/push to Prometheus";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
      }) {};
 
   "prometheus-metrics-ghc" = callPackage
@@ -222974,6 +225316,7 @@ self: {
        ];
        description = "Instrument a wai application with various metrics";
        license = lib.licenses.bsd3;
+       mainProgram = "prometheus-wai-middleware-example";
      }) {};
 
   "promise" = callPackage
@@ -223320,6 +225663,7 @@ self: {
        description = "neovim project manager";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "proteome";
      }) {};
 
   "proto-lens" = callPackage
@@ -223466,6 +225810,7 @@ self: {
        ];
        description = "Protocol buffer compiler for the proto-lens library";
        license = lib.licenses.bsd3;
+       mainProgram = "proto-lens-protoc";
      }) {inherit (pkgs) protobuf;};
 
   "proto-lens-runtime" = callPackage
@@ -223609,6 +225954,7 @@ self: {
        description = "Protocol Buffers via C++";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "protobuf-native-test";
      }) {};
 
   "protobuf-simple" = callPackage
@@ -223634,6 +225980,7 @@ self: {
        ];
        description = "Simple Protocol Buffers library (proto2)";
        license = lib.licenses.mit;
+       mainProgram = "protobuf-simple-protoc";
      }) {};
 
   "protocol" = callPackage
@@ -223854,6 +226201,7 @@ self: {
        description = "The server for ProveEverywhere";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "prove-everywhere-server";
        broken = true;
      }) {};
 
@@ -223955,6 +226303,7 @@ self: {
        ];
        description = "Prune unused Haskell dependencies";
        license = lib.licenses.mit;
+       mainProgram = "prune-juice";
      }) {};
 
   "psc-ide" = callPackage
@@ -224137,6 +226486,7 @@ self: {
        executableHaskellDepends = [ base text ];
        description = "A Haskell Implementation of the Porter Stemmer";
        license = lib.licenses.bsd3;
+       mainProgram = "pstemmer-test-exe";
      }) {};
 
   "ptera" = callPackage
@@ -224458,6 +226808,7 @@ self: {
        description = "A CLI assistant";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ptk";
      }) {};
 
   "pugixml" = callPackage
@@ -224500,6 +226851,7 @@ self: {
        description = "DrIFT with pugs-specific rules";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pugs-DrIFT";
        broken = true;
      }) {};
 
@@ -224570,7 +226922,7 @@ self: {
        librarySystemDepends = [ libpulseaudio ];
        description = "binding to Simple API of pulseaudio";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {inherit (pkgs) libpulseaudio;};
 
   "pulseaudio" = callPackage
@@ -224639,6 +226991,7 @@ self: {
        description = "A program that displays the puppet resources associated to a node given .pp files.";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "puppetresources";
      }) {};
 
   "pure-cdb" = callPackage
@@ -224716,6 +227069,7 @@ self: {
        description = "Tests for the pure-priority-queue package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pure-priority-queue-tests";
      }) {};
 
   "pure-shuffle" = callPackage
@@ -224762,6 +227116,7 @@ self: {
        description = "A Haskell-only implementation of zlib / DEFLATE";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "deflate";
        broken = true;
      }) {};
 
@@ -224833,7 +227188,8 @@ self: {
        description = "Nix backend for PureScript. Transpile PureScript code to Nix.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       mainProgram = "purenix";
+       maintainers = [ lib.maintainers.cdepillabout ];
        broken = true;
      }) {};
 
@@ -224857,6 +227213,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Simple Routing functions for Wai Applications";
        license = lib.licenses.asl20;
+       mainProgram = "simple-routing-core-exe";
      }) {};
 
   "purescript" = callPackage
@@ -224925,6 +227282,7 @@ self: {
        doCheck = false;
        description = "PureScript Programming Language Compiler";
        license = lib.licenses.bsd3;
+       mainProgram = "purs";
      }) {};
 
   "purescript-ast" = callPackage
@@ -224979,6 +227337,7 @@ self: {
        ];
        description = "A fast alternative to Purescript's `psc-bundle` to be used during development";
        license = lib.licenses.mit;
+       mainProgram = "psc-bundle-fast";
      }) {};
 
   "purescript-cst" = callPackage
@@ -225051,6 +227410,7 @@ self: {
        description = "TypeScript Declaration File (.d.ts) generator for PureScript";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "purs-tsd-gen";
      }) {};
 
   "pursuit-client" = callPackage
@@ -225068,6 +227428,7 @@ self: {
        description = "A cli client for pursuit";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pursuit-search";
      }) {};
 
   "purview" = callPackage
@@ -225161,6 +227522,7 @@ self: {
        description = "Send push notifications to mobile iOS devices";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sendapn";
      }) {};
 
   "push-notify-ccs" = callPackage
@@ -225344,6 +227706,7 @@ self: {
        description = "Tool to synchronize directories with rsync, zfs or git-annex";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pushme";
      }) {};
 
   "pushover" = callPackage
@@ -225434,6 +227797,7 @@ self: {
        description = "Creating graphics for pencil puzzles, command line tools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "drawpuzzle";
      }) {};
 
   "pvar" = callPackage
@@ -225495,6 +227859,7 @@ self: {
        testHaskellDepends = [ base cryptonite tasty tasty-quickcheck ];
        description = "Public Verifiable Secret Sharing";
        license = lib.licenses.mit;
+       mainProgram = "pvss-exe";
      }) {};
 
   "pwstore-cli" = callPackage
@@ -225516,6 +227881,7 @@ self: {
        ];
        description = "Command line interface for the pwstore library";
        license = lib.licenses.gpl3Only;
+       mainProgram = "pwstore";
      }) {};
 
   "pwstore-fast" = callPackage
@@ -225560,6 +227926,7 @@ self: {
        executableHaskellDepends = [ base containers mtl parsec ];
        description = "Parsimonious XML Shorthand Language--to-XML compiler";
        license = "GPL";
+       mainProgram = "pxslcc";
      }) {};
 
   "pyffi" = callPackage
@@ -225620,6 +227987,7 @@ self: {
        description = "Serialization/deserialization using Python Pickle format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pickle";
        broken = true;
      }) {};
 
@@ -225672,6 +228040,7 @@ self: {
        testHaskellDepends = [ base hmatrix linear tasty tasty-hunit ];
        description = "A library for implementing Quantum Algorithms";
        license = lib.licenses.bsd3;
+       mainProgram = "qchas-exe";
      }) {};
 
   "qd" = callPackage
@@ -225742,6 +228111,7 @@ self: {
        description = "Command line tool qhs, SQL queries on CSV and TSV files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qhs";
      }) {};
 
   "qhull-simple" = callPackage
@@ -225847,6 +228217,7 @@ self: {
        description = "Decrypt files encrypted by QNAP's Hybrid Backup Sync";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qnap-decrypt";
        broken = true;
      }) {};
 
@@ -225878,6 +228249,7 @@ self: {
        ];
        description = "Pure Haskell QR encoder library and command line tool";
        license = lib.licenses.bsd3;
+       mainProgram = "cqr";
      }) {};
 
   "qr-imager" = callPackage
@@ -225918,6 +228290,7 @@ self: {
        description = "Library to generate QR codes from bytestrings and objects and scale image files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qrpipe";
      }) {};
 
   "qrcode" = callPackage
@@ -226029,6 +228402,7 @@ self: {
        description = "Example programs for Qtah Qt bindings";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qtah-examples";
      }) {};
 
   "qtah-generator" = callPackage
@@ -226049,6 +228423,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Generator for Qtah Qt bindings";
        license = lib.licenses.lgpl3Only;
+       mainProgram = "qtah-generator";
      }) {};
 
   "qtah-qt5" = callPackage
@@ -226155,6 +228530,7 @@ self: {
        description = "Quant finance library in pure Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -226194,6 +228570,7 @@ self: {
        ];
        description = "Unit conversion and manipulation library";
        license = lib.licenses.bsd3;
+       mainProgram = "quantities";
      }) {};
 
   "quantum-arrow" = callPackage
@@ -226230,6 +228607,7 @@ self: {
        description = "Retrieve, store and manage real quantum random data";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qrand";
      }) {};
 
   "quarantimer" = callPackage
@@ -226252,6 +228630,7 @@ self: {
        description = "Coronavirus quarantine timer web app for your things";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quarantimer";
        broken = true;
      }) {};
 
@@ -226272,6 +228651,7 @@ self: {
        description = "Quite Useless DB";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qudb";
        broken = true;
      }) {};
 
@@ -226296,6 +228676,7 @@ self: {
        description = "Quenya verb conjugator";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quenya-verb-server";
        broken = true;
      }) {};
 
@@ -226467,6 +228848,7 @@ self: {
        description = "queue sheet utility";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "queue-sheet";
      }) {};
 
   "queuelike" = callPackage
@@ -226559,6 +228941,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "quick & easy benchmarking of command-line programs";
        license = "GPL";
+       mainProgram = "quickbench";
      }) {};
 
   "quickbooks" = callPackage
@@ -226886,6 +229269,7 @@ self: {
        executableHaskellDepends = [ base directory process QuickCheck ];
        description = "Automated test tool for QuickCheck";
        license = lib.licenses.bsd3;
+       mainProgram = "quickCheck";
      }) {};
 
   "quickcheck-simple" = callPackage
@@ -227103,6 +229487,7 @@ self: {
        description = "Generate Main module with QuickCheck tests";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quickpull";
        broken = true;
      }) {};
 
@@ -227182,6 +229567,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "An interface for describing and executing terminal applications";
        license = lib.licenses.gpl3Only;
+       mainProgram = "qt-demo";
      }) {};
 
   "quicktest" = callPackage
@@ -227198,6 +229584,7 @@ self: {
        description = "A reflective batch tester for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quicktest";
      }) {};
 
   "quickwebapp" = callPackage
@@ -227648,6 +230035,7 @@ self: {
        description = "A Quoridor implementation in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quoridor-exec";
        broken = true;
      }) {};
 
@@ -227696,6 +230084,7 @@ self: {
        description = "Command line binary for working with the Qux language";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "qux";
      }) {};
 
   "r-glpk-phonetic-languages-ukrainian-durations" = callPackage
@@ -227719,6 +230108,7 @@ self: {
        description = "Can be used to calculate the durations of the approximations of the Ukrainian phonemes";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pldUkr";
      }) {};
 
   "r3x-haskell-sdk" = callPackage
@@ -227745,6 +230135,7 @@ self: {
          http-types mtl regex-pcre text transformers wai warp
        ];
        license = lib.licenses.bsd3;
+       mainProgram = "r3x-haskell-sdk-exe";
      }) {};
 
   "raaz" = callPackage
@@ -227777,6 +230168,7 @@ self: {
        doHaddock = false;
        description = "Fast and type safe cryptography";
        license = "(Apache-2.0 OR BSD-3-Clause)";
+       mainProgram = "raaz";
      }) {};
 
   "rabocsv2qif" = callPackage
@@ -227795,6 +230187,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A library and program to create QIF files from Rabobank CSV exports";
        license = "GPL";
+       mainProgram = "rabocsv2qif";
      }) {};
 
   "rad" = callPackage
@@ -227886,6 +230279,7 @@ self: {
        description = "Command-line tool for emitting numbers in various bases";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "radix";
        broken = true;
      }) {};
 
@@ -228118,6 +230512,7 @@ self: {
        description = "distributed-process node";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "raketka";
      }) {};
 
   "rakhana" = callPackage
@@ -228314,6 +230709,7 @@ self: {
        description = "Program for picking a random file";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "randfile";
        broken = true;
      }) {};
 
@@ -228606,6 +231002,7 @@ self: {
        testHaskellDepends = [ base containers mtl QuickCheck ];
        description = "Generate random strings with specific qualities";
        license = lib.licenses.bsd3;
+       mainProgram = "readme-example";
      }) {};
 
   "random-tree" = callPackage
@@ -228642,6 +231039,7 @@ self: {
        testHaskellDepends = [ base directory HUnit random ];
        description = "\"Uniform RNG => Non-Uniform RNGs\"";
        license = lib.licenses.mit;
+       mainProgram = "Gen";
      }) {};
 
   "randomgen" = callPackage
@@ -228660,6 +231058,7 @@ self: {
        executableSystemDepends = [ openssl ];
        description = "A fast, SMP parallel random data generator";
        license = lib.licenses.bsd3;
+       mainProgram = "randomgen";
      }) {inherit (pkgs) openssl;};
 
   "randproc" = callPackage
@@ -228684,6 +231083,7 @@ self: {
        executableHaskellDepends = [ base random X11 ];
        description = "Set the background of your root window to a random colour";
        license = lib.licenses.publicDomain;
+       mainProgram = "randsolid";
      }) {};
 
   "range" = callPackage
@@ -228797,6 +231197,7 @@ self: {
        description = "Find the rank product of a data set";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rank-product";
        broken = true;
      }) {};
 
@@ -228916,6 +231317,7 @@ self: {
        description = "Example user config for Rasa";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rasa";
      }) {};
 
   "rasa-ext-bufs" = callPackage
@@ -229097,6 +231499,7 @@ self: {
        description = "A command-line client for Reddit";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rascal";
      }) {};
 
   "rasterific-svg" = callPackage
@@ -229124,6 +231527,7 @@ self: {
        ];
        description = "SVG renderer based on Rasterific";
        license = lib.licenses.bsd3;
+       mainProgram = "svgrender";
      }) {};
 
   "rate-limit" = callPackage
@@ -229314,6 +231718,7 @@ self: {
        description = "Parse and generate Rocket League replays";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rattletrap";
        broken = true;
      }) {};
 
@@ -229336,6 +231741,7 @@ self: {
        description = "Parse and generate Rocket League replays";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rattletrap";
        broken = true;
      }) {};
 
@@ -229574,6 +231980,7 @@ self: {
        description = "Reservoir Computing, fast RNNs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ntc";
      }) {};
 
   "rclient" = callPackage
@@ -229664,6 +232071,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion deepseq text ];
        description = "A library for RDF processing in Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "rdf4h";
      }) {};
 
   "rdioh" = callPackage
@@ -229791,6 +232199,7 @@ self: {
        description = "react-tutorial web server";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "server";
        broken = true;
      }) {};
 
@@ -229807,6 +232216,7 @@ self: {
        description = "pluggable pure logic serializable reactor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reaction-logic-test";
        broken = true;
      }) {};
 
@@ -229860,9 +232270,7 @@ self: {
        ];
        description = "Programmatically edit MIDI events via ALSA and reactive-banana";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -230119,6 +232527,7 @@ self: {
        description = "Reactive programming via imperative threads";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-sdl";
        broken = true;
      }) {};
 
@@ -230137,7 +232546,10 @@ self: {
        ];
        description = "An alternate implementation of push-pull FRP";
        license = "GPL";
-       platforms = lib.platforms.none;
+       badPlatforms = [
+         "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-linux"
+         "aarch64-darwin" "armv7l-linux"
+       ];
      }) {};
 
   "reactor" = callPackage
@@ -230191,6 +232603,7 @@ self: {
        ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "read-ctags";
        broken = true;
      }) {};
 
@@ -230252,6 +232665,7 @@ self: {
        description = "Extracts text of main article from HTML document";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readability";
        broken = true;
      }) {};
 
@@ -230329,6 +232743,7 @@ self: {
        description = "Readline effect for in-other-words";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "echo-repl";
      }) {};
 
   "readline-statevar" = callPackage
@@ -230364,6 +232779,7 @@ self: {
        description = "Literate programming support";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme-lhs-example";
        broken = true;
      }) {};
 
@@ -230379,6 +232795,7 @@ self: {
        description = "Read and pretty print Python bytecode (.pyc) files.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readpyc";
      }) {};
 
   "readshp" = callPackage
@@ -230676,6 +233093,7 @@ self: {
        testHaskellDepends = [ base extra filepath record-hasfield ];
        description = "Preprocessor to allow record.field syntax";
        license = lib.licenses.bsd3;
+       mainProgram = "record-dot-preprocessor";
      }) {};
 
   "record-encode" = callPackage
@@ -230774,6 +233192,7 @@ self: {
        description = "Compiler preprocessor introducing a syntactic extension for anonymous records";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "record-preprocessor";
      }) {};
 
   "record-syntax" = callPackage
@@ -230966,6 +233385,7 @@ self: {
        ];
        description = "Count lines in files and display them hierarchically";
        license = lib.licenses.bsd3;
+       mainProgram = "recursive-line-count";
      }) {};
 
   "recursive-zipper" = callPackage
@@ -231068,6 +233488,7 @@ self: {
        ];
        description = "hide secret text on the terminal";
        license = lib.licenses.mit;
+       mainProgram = "redact";
      }) {};
 
   "reddit" = callPackage
@@ -231264,6 +233685,7 @@ self: {
        ];
        description = "software build system, make replacement, implementation of djb's redo";
        license = lib.licenses.publicDomain;
+       mainProgram = "redo";
      }) {};
 
   "reduce-equations" = callPackage
@@ -231290,6 +233712,7 @@ self: {
        description = "Simplify a set of equations by removing redundancies";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reduce-equations";
      }) {};
 
   "reducers" = callPackage
@@ -231513,6 +233936,7 @@ self: {
        description = "A command-line tool for pasting to https://www.refheap.com";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "refh";
      }) {};
 
   "refined" = callPackage
@@ -231716,6 +234140,7 @@ self: {
        description = "Reflex interface to `wai`";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "reflex-basic-host" = callPackage
@@ -231757,8 +234182,10 @@ self: {
        ];
        description = "Functional Reactive Web Apps with Reflex";
        license = lib.licenses.bsd3;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
-       maintainers = with lib.maintainers; [ maralorn ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "reflex-dom-ace" = callPackage
@@ -231873,8 +234300,11 @@ self: {
        executableHaskellDepends = [ base reflex-dom text ];
        description = "A reflex-dom widget to draw on a canvas with a fragment shader program";
        license = lib.licenses.mit;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "demo";
        broken = true;
      }) {};
 
@@ -232084,6 +234514,7 @@ self: {
        description = "Interact with a GADT API in your reflex-dom application";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
        broken = true;
      }) {};
 
@@ -232113,6 +234544,7 @@ self: {
        description = "A GHCi widget library for use in reflex applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reflex-ghci";
      }) {};
 
   "reflex-gi-gtk" = callPackage
@@ -232141,6 +234573,7 @@ self: {
        description = "Helper functions to use reflex with gi-gtk";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reflex-gi-gtk-example";
        broken = true;
      }) {};
 
@@ -232256,7 +234689,9 @@ self: {
        ];
        description = "Helper widgets for reflex-localize";
        license = lib.licenses.mit;
-       platforms = [ "armv7l-linux" "i686-linux" "x86_64-linux" ];
+       badPlatforms = [
+         "x86_64-darwin" "aarch64-linux" "aarch64-darwin"
+       ];
        hydraPlatforms = lib.platforms.none;
      }) {};
 
@@ -232318,6 +234753,7 @@ self: {
        description = "Reflex FRP interface for running system processes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
      }) {};
 
   "reflex-sdl2" = callPackage
@@ -232338,6 +234774,7 @@ self: {
        description = "SDL2 and reflex FRP";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reflex-sdl2-exe";
        broken = true;
      }) {};
 
@@ -232404,6 +234841,7 @@ self: {
        description = "Reflex FRP host and widgets for VTY applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -232863,6 +235301,7 @@ self: {
        description = "From a regex, generate all possible strings it can match";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "genex";
      }) {};
 
   "regex-parsec" = callPackage
@@ -232992,6 +235431,7 @@ self: {
        description = "Unit tests for the plaform's Posix regex library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "regex-posix-unittest";
        broken = true;
      }) {};
 
@@ -233009,7 +235449,7 @@ self: {
        description = "Bindings to Rust's regex library";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
        broken = true;
      }) {inherit (pkgs) rure;};
 
@@ -233115,6 +235555,7 @@ self: {
        description = "Unit tests for the regex-tdfa";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "regex-tdfa-unittest";
        broken = true;
      }) {};
 
@@ -233238,6 +235679,7 @@ self: {
        description = "A POSIX, extended regex-engine";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "grecce";
      }) {};
 
   "regexdot" = callPackage
@@ -233621,6 +236063,7 @@ self: {
        description = "to make notes and reduce impact on idle time on writing other programms";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reheat";
      }) {};
 
   "rehoo" = callPackage
@@ -233639,6 +236082,7 @@ self: {
        description = "Rebuild default.hoo from many .hoo files in the current directory";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rehoo";
        broken = true;
      }) {};
 
@@ -233658,6 +236102,7 @@ self: {
        description = "Process lists easily";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rei";
        broken = true;
      }) {};
 
@@ -233688,6 +236133,7 @@ self: {
        description = "Serialize data";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reify";
        broken = true;
      }) {};
 
@@ -233730,7 +236176,7 @@ self: {
        ];
        description = "Hey! Hey! Can u rel8?";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "relacion" = callPackage
@@ -233972,7 +236418,8 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Automation of Haskell package release process";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "releaser";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "relevant-time" = callPackage
@@ -234046,6 +236493,7 @@ self: {
        description = "A web based Haskell IDE";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reload-exe";
      }) {};
 
   "reloto" = callPackage
@@ -234149,6 +236597,7 @@ self: {
        description = "A DSL for marking student work";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "remark";
        broken = true;
      }) {};
 
@@ -234172,6 +236621,7 @@ self: {
        description = "A DSL for marking student work";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "remarks";
        broken = true;
      }) {};
 
@@ -234232,6 +236682,7 @@ self: {
        description = "Interface to ghci debugger";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "remote-debugger";
        broken = true;
      }) {};
 
@@ -234707,6 +237158,7 @@ self: {
        description = "Provides high-level access to webcams";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "repl" = callPackage
@@ -234773,7 +237225,7 @@ self: {
        testHaskellDepends = [ base bytestring Cabal megaparsec text ];
        description = "Find, replace, and split string patterns with Megaparsec parsers (instead of regex)";
        license = lib.licenses.bsd2;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "replica" = callPackage
@@ -234824,6 +237276,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "replicant";
      }) {};
 
   "repline" = callPackage
@@ -234869,6 +237322,7 @@ self: {
        description = "Blogging module using blaze html for markup";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rbb";
      }) {};
 
   "repr" = callPackage
@@ -235011,7 +237465,7 @@ self: {
        doCheck = false;
        description = "HTTP client library";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "req_3_12_0" = callPackage
@@ -235044,7 +237498,7 @@ self: {
        description = "HTTP client library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "req-conduit" = callPackage
@@ -235092,6 +237546,7 @@ self: {
        testHaskellDepends = [ base hspec ];
        description = "Provides OAuth2 authentication for use with Req";
        license = lib.licenses.mit;
+       mainProgram = "req-oauth2-app";
      }) {};
 
   "req-url-extra" = callPackage
@@ -235108,6 +237563,7 @@ self: {
        description = "Provides URI/URL helper functions for use with Req";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sample";
        broken = true;
      }) {};
 
@@ -235315,6 +237771,7 @@ self: {
        ];
        description = "Reserve reloads web applications";
        license = lib.licenses.mit;
+       mainProgram = "reserve";
      }) {};
 
   "reservoir" = callPackage
@@ -235353,6 +237810,7 @@ self: {
        executableHaskellDepends = [ base comfort-array lapack ];
        description = "Compute total resistance of a cube of resistors";
        license = lib.licenses.bsd3;
+       mainProgram = "resistor-cube";
      }) {};
 
   "resolv_0_1_1_2" = callPackage
@@ -235430,6 +237888,7 @@ self: {
        description = "Remove trivial conflict markers in a git repository";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "resolve-trivial-conflicts";
        broken = true;
      }) {};
 
@@ -235465,6 +237924,7 @@ self: {
        description = "Embed data files via C and FFI";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "resource-embed";
        broken = true;
      }) {};
 
@@ -235615,6 +238075,7 @@ self: {
        description = "process and route HTTP requests and generate responses on top of WAI";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -235689,6 +238150,7 @@ self: {
        description = "Example project for rest";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rest-example-gen";
      }) {};
 
   "rest-gen" = callPackage
@@ -235918,6 +238380,7 @@ self: {
        description = "Convert between camel case and separated words style";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "restyle";
        broken = true;
      }) {};
 
@@ -236175,6 +238638,7 @@ self: {
        description = "Retry failed commands";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "retryer";
        broken = true;
      }) {};
 
@@ -236203,6 +238667,7 @@ self: {
        executableHaskellDepends = [ base old-time ];
        description = "A French revolutionary decimal time (metric) clock";
        license = "GPL";
+       mainProgram = "revdectime";
      }) {};
 
   "reverse-apply" = callPackage
@@ -236267,6 +238732,7 @@ self: {
        description = "Text-only reversi (aka othelo) game";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "reversi";
        broken = true;
      }) {};
 
@@ -236284,6 +238750,7 @@ self: {
        description = "open file and rewrite it with new contents";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rewrite";
      }) {};
 
   "rewrite-inspector" = callPackage
@@ -236353,6 +238820,7 @@ self: {
        description = "Github resume generator";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rezoom";
      }) {};
 
   "rfc" = callPackage
@@ -236608,6 +239076,7 @@ self: {
        description = "Bugzilla query tool";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rhbzquery";
        broken = true;
      }) {};
 
@@ -236626,7 +239095,7 @@ self: {
        ];
        description = "Functional Reactive Programming with type-level clocks";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "rhine-gloss" = callPackage
@@ -236641,7 +239110,8 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Gloss backend for Rhine";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       mainProgram = "rhine-gloss-gears";
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "rhythm-game-tutorial" = callPackage
@@ -236728,6 +239198,7 @@ self: {
        description = "Lenses for riak-protobuf";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "generate";
        broken = true;
      }) {};
 
@@ -236988,6 +239459,7 @@ self: {
        description = "A Riemann client for Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "riemann-client";
        broken = true;
      }) {};
 
@@ -237119,6 +239591,7 @@ self: {
        executableHaskellDepends = [ base optparse-simple resourcet rio ];
        description = "Generic App type for rio";
        license = lib.licenses.bsd3;
+       mainProgram = "rio-app-example";
      }) {};
 
   "rio-orphans" = callPackage
@@ -237190,6 +239663,7 @@ self: {
        description = "A library for process pools coupled with asynchronous message queues";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rio-process-pool-memleak-test";
      }) {};
 
   "riot" = callPackage
@@ -237210,6 +239684,7 @@ self: {
        description = "Riot is an Information Organisation Tool";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "riot";
      }) {inherit (pkgs) ncurses;};
 
   "ripple" = callPackage
@@ -237283,6 +239758,7 @@ self: {
        executableToolDepends = [ alex happy ];
        description = "Reduced instruction set i386 simulator";
        license = lib.licenses.bsd3;
+       mainProgram = "risc386";
      }) {};
 
   "riscv-isa" = callPackage
@@ -237348,6 +239824,7 @@ self: {
        description = "A project management tool for Haskell applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rivet";
      }) {};
 
   "rivet-adaptor-postgresql" = callPackage
@@ -237372,6 +239849,7 @@ self: {
        executableHaskellDepends = [ base directory filepath ];
        description = "Database migration library; automatic importer";
        license = lib.licenses.bsd3;
+       mainProgram = "rivet-autoimporter";
      }) {};
 
   "rivet-core" = callPackage
@@ -237436,6 +239914,7 @@ self: {
        description = "Collection of Reinforcement Learning algorithms";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -237518,6 +239997,7 @@ self: {
        description = "Ring-LWE/LWR challenges using Lol";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rlwe-challenges";
      }) {};
 
   "rmonad" = callPackage
@@ -237603,6 +240083,7 @@ self: {
        description = "Simple projects generator";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rob";
      }) {};
 
   "robin" = callPackage
@@ -237623,6 +240104,7 @@ self: {
        description = "A build daemon for Haskell development";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "robin";
        broken = true;
      }) {};
 
@@ -237714,6 +240196,7 @@ self: {
        description = "Gloss interactive demo for roc-cluster package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "roc-cluster-demo";
      }) {};
 
   "roc-id" = callPackage
@@ -237837,6 +240320,7 @@ self: {
        ];
        description = "Sci-fi roguelike game. Client application.";
        license = "unknown";
+       mainProgram = "roguestar";
      }) {};
 
   "roguestar-engine" = callPackage
@@ -237858,6 +240342,7 @@ self: {
        description = "Sci-fi roguelike game. Backend.";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "roguestar-engine";
      }) {};
 
   "roguestar-gl" = callPackage
@@ -237890,6 +240375,7 @@ self: {
        description = "Sci-fi roguelike game. GLUT front-end.";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "roguestar-glut";
      }) {};
 
   "roku-api" = callPackage
@@ -237953,6 +240439,7 @@ self: {
        description = "Simple CLI tool to perform commons tasks such as tracking deploys";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rollbar";
      }) {};
 
   "rollbar-client" = callPackage
@@ -238070,6 +240557,7 @@ self: {
        description = "Playing with applicatives and dice!";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "roller";
        broken = true;
      }) {};
 
@@ -238265,6 +240753,7 @@ self: {
        description = "Query the namecoin blockchain";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rosa";
      }) {};
 
   "rose" = callPackage
@@ -238386,6 +240875,7 @@ self: {
        description = "Haskell support for the ROS robotics framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "roshask";
      }) {};
 
   "rosmsg" = callPackage
@@ -238443,6 +240933,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "ROS package system information";
        license = lib.licenses.bsd3;
+       mainProgram = "rospkg";
      }) {};
 
   "rosso" = callPackage
@@ -238651,6 +241142,7 @@ self: {
        description = "Utility to generate routes for use with yesod-routes";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "routeGenerator";
      }) {};
 
   "route-planning" = callPackage
@@ -238798,6 +241290,7 @@ self: {
        ];
        description = "Random projection trees";
        license = lib.licenses.bsd3;
+       mainProgram = "rp-tree";
      }) {};
 
   "rpc" = callPackage
@@ -238834,6 +241327,7 @@ self: {
        description = "a remote procedure call framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rpc-test";
        broken = true;
      }) {};
 
@@ -238855,6 +241349,7 @@ self: {
        description = "Receiver Policy Framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rpf";
      }) {};
 
   "rpm" = callPackage
@@ -238906,6 +241401,7 @@ self: {
        description = "Sort RPM packages in dependency order";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rpmbuild-order";
        broken = true;
      }) {};
 
@@ -238931,6 +241427,7 @@ self: {
        description = "Sort RPM packages in dependency order";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rpmbuild-order";
        broken = true;
      }) {};
 
@@ -239114,6 +241611,7 @@ self: {
        description = "watches an RSS/Atom feed and writes it to an IRC channel";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rss2irc";
        broken = true;
      }) {};
 
@@ -239181,9 +241679,7 @@ self: {
        libraryToolDepends = [ c2hs ];
        description = "Bindings to librtlsdr";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) rtl-sdr;};
 
   "rtnetlink" = callPackage
@@ -239284,9 +241780,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Binding to the C++ audio stretching library Rubber Band";
        license = lib.licenses.gpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) rubberband;};
 
   "ruby-marshal" = callPackage
@@ -239381,6 +241875,7 @@ self: {
        description = "Ruler tool for UHC";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ruler";
      }) {};
 
   "ruler-core" = callPackage
@@ -239399,6 +241894,7 @@ self: {
        ];
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ruler-core";
      }) {};
 
   "run-haskell-module" = callPackage
@@ -239463,6 +241959,7 @@ self: {
        ];
        description = "runghc replacement for fast repeated runs";
        license = lib.licenses.gpl3Only;
+       mainProgram = "runghc";
      }) {};
 
   "runhs" = callPackage
@@ -239483,6 +241980,7 @@ self: {
        description = "Stack wrapper for single-file Haskell programs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "runhs";
        broken = true;
      }) {};
 
@@ -239502,6 +242000,7 @@ self: {
        description = "Run multiple commands, interleaving output and errors";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "runmany";
        broken = true;
      }) {};
 
@@ -239591,6 +242090,7 @@ self: {
        description = "Packet Generation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "rws";
        broken = true;
      }) {};
 
@@ -239611,6 +242111,7 @@ self: {
        description = "Pipe interface for Rizin";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -239654,6 +242155,7 @@ self: {
        description = "simple general-purpose s-expressions";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-s-expressions";
      }) {};
 
   "s3-signer" = callPackage
@@ -240412,6 +242914,7 @@ self: {
        description = "Fast JSON parsing powered by Chad Austin's sajson library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sajson-bench";
        broken = true;
      }) {};
 
@@ -240435,6 +242938,7 @@ self: {
        description = "Compression command-line tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sak";
      }) {};
 
   "sakuraio-platform" = callPackage
@@ -240804,6 +243308,7 @@ self: {
        description = "Conduit interface to SAM/BAM format files through samtools";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "samtools-conduit-copy";
      }) {};
 
   "samtools-enumerator" = callPackage
@@ -240888,6 +243393,7 @@ self: {
        description = "Manages Cabal sandboxes to avoid rebuilding packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sandman";
        broken = true;
      }) {};
 
@@ -240982,6 +243488,7 @@ self: {
        ];
        description = "Sandwich integration with Slack";
        license = lib.licenses.bsd3;
+       mainProgram = "sandwich-slack-exe";
      }) {};
 
   "sandwich-webdriver" = callPackage
@@ -241026,6 +243533,7 @@ self: {
        description = "Sandwich integration with Selenium WebDriver";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sandwich-webdriver-exe";
      }) {};
 
   "sarasvati" = callPackage
@@ -241118,6 +243626,7 @@ self: {
        description = "A minimal SAT solver";
        license = "LGPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sat-micro";
      }) {};
 
   "satchmo" = callPackage
@@ -241381,6 +243890,7 @@ self: {
        ];
        description = "SBP to UDP";
        license = lib.licenses.bsd3;
+       mainProgram = "sbp2udp";
      }) {};
 
   "sbv_7_13" = callPackage
@@ -241579,6 +244089,7 @@ self: {
        description = "An interface to the Starcraft II bot API";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sc2hs-demo";
      }) {};
 
   "sc3-rdu" = callPackage
@@ -241649,6 +244160,7 @@ self: {
        description = "Scale an image to a new geometry";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scaleimage";
        broken = true;
      }) {};
 
@@ -241695,6 +244207,7 @@ self: {
        description = "Test webhooks locally";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scalp-webhooks";
      }) {};
 
   "scalpel" = callPackage
@@ -241764,6 +244277,7 @@ self: {
        executableHaskellDepends = [ base parsec ];
        description = "lexical style suggestions for source code";
        license = lib.licenses.bsd3;
+       mainProgram = "scan";
      }) {};
 
   "scan-metadata" = callPackage
@@ -241859,9 +244373,8 @@ self: {
        ];
        description = "Generates unique passwords for various websites from a single password";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
+       mainProgram = "scat";
      }) {};
 
   "scc" = callPackage
@@ -241895,6 +244408,7 @@ self: {
        description = "Streaming component combinators";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shsh";
        broken = true;
      }) {};
 
@@ -241991,6 +244505,7 @@ self: {
        description = "Find the ideal lesson layout";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "schedule-planner";
        broken = true;
      }) {};
 
@@ -242036,6 +244551,7 @@ self: {
        description = "An interview scheduler using constraint satisfaction and Google Sheets";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scheduler";
      }) {};
 
   "schedyield" = callPackage
@@ -242167,6 +244683,7 @@ self: {
        description = "Converts ScholarlyMarkdown documents to HTML5/LaTeX/Docx format";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scholdoc";
      }) {};
 
   "scholdoc-citeproc" = callPackage
@@ -242201,6 +244718,7 @@ self: {
        description = "Scholdoc fork of pandoc-citeproc";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scholdoc-citeproc";
      }) {};
 
   "scholdoc-texmath" = callPackage
@@ -242300,6 +244818,7 @@ self: {
        description = "Haskell query for SciDB via shim";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hquery";
        broken = true;
      }) {};
 
@@ -242422,6 +244941,7 @@ self: {
        description = "Haskell IDE library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scion-server";
      }) {};
 
   "scion-browser" = callPackage
@@ -242457,6 +244977,7 @@ self: {
        description = "Command-line interface for browsing and searching packages documentation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scion-browser";
      }) {};
 
   "scons2dot" = callPackage
@@ -242471,6 +244992,7 @@ self: {
        description = "Generates graphviz file of scons dependency information";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scons2dot";
        broken = true;
      }) {};
 
@@ -242514,6 +245036,7 @@ self: {
        description = "An interactive renderer for plotting time-series data";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scope-cairo";
      }) {};
 
   "scottish" = callPackage
@@ -242675,6 +245198,7 @@ self: {
        description = "Response format helper for the Scotty web framework";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scotty-format-example";
        broken = true;
      }) {};
 
@@ -242847,6 +245371,7 @@ self: {
        executableHaskellDepends = [ base scotty text transformers ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "web";
        broken = true;
      }) {};
 
@@ -242890,6 +245415,7 @@ self: {
        description = "Scrabble play generation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scrabble-bot";
      }) {};
 
   "scrapbook" = callPackage
@@ -242914,6 +245440,7 @@ self: {
        description = "collect posts of site that is wrote in config yaml using feed or scraping";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scrapbook";
      }) {};
 
   "scrapbook-core" = callPackage
@@ -242985,6 +245512,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Take screenshot and copy it to the system clipboard";
        license = lib.licenses.bsd3;
+       mainProgram = "screenshot-to-clipboard";
      }) {};
 
   "script-monad" = callPackage
@@ -243012,6 +245540,7 @@ self: {
        description = "Stack of error, reader, writer, state, and prompt monad transformers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "script-monad-exe";
        broken = true;
      }) {};
 
@@ -243036,6 +245565,7 @@ self: {
        description = "Scrobbling server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scrobble-server";
        broken = true;
      }) {};
 
@@ -243058,6 +245588,7 @@ self: {
        description = "scroll(6), a roguelike game";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scroll";
      }) {};
 
   "scroll-list" = callPackage
@@ -243090,9 +245621,7 @@ self: {
        ];
        description = "Stronger password hashing via sequential memory-hard functions";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
      }) {};
 
   "scrz" = callPackage
@@ -243117,6 +245646,7 @@ self: {
        description = "Process management and supervision daemon";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scrz";
        broken = true;
      }) {};
 
@@ -243151,6 +245681,7 @@ self: {
        description = "Fast CSV lexing on ByteString";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scythe";
        broken = true;
      }) {};
 
@@ -243174,6 +245705,7 @@ self: {
        description = "Automatic generation of Isabelle/HOL correctness proofs for security protocols";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "scyther-proof";
        broken = true;
      }) {};
 
@@ -243225,6 +245757,7 @@ self: {
        executableHaskellDepends = [ base pretty-simple sdl2 text ];
        description = "small testing tool for sdl2 and accelerated drivers";
        license = lib.licenses.mit;
+       mainProgram = "sdl-try-drivers";
      }) {};
 
   "sdl2" = callPackage
@@ -243360,6 +245893,7 @@ self: {
        executablePkgconfigDepends = [ SDL2 SDL2_gfx ];
        description = "Haskell bindings to SDL2_gfx";
        license = lib.licenses.mit;
+       mainProgram = "sdl2-gfx-example";
      }) {inherit (pkgs) SDL2; inherit (pkgs) SDL2_gfx;};
 
   "sdl2-image" = callPackage
@@ -243382,6 +245916,7 @@ self: {
        executablePkgconfigDepends = [ SDL2 SDL2_image ];
        description = "Haskell bindings to SDL2_image";
        license = lib.licenses.mit;
+       mainProgram = "sdl2-image-example";
      }) {inherit (pkgs) SDL2; inherit (pkgs) SDL2_image;};
 
   "sdl2-mixer" = callPackage
@@ -243405,9 +245940,7 @@ self: {
        executablePkgconfigDepends = [ SDL2_mixer ];
        description = "Haskell bindings to SDL2_mixer";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) SDL2_mixer;};
 
   "sdl2-sprite" = callPackage
@@ -243428,6 +245961,7 @@ self: {
        ];
        description = "Sprite previewer/animator";
        license = lib.licenses.bsd3;
+       mainProgram = "sdl2-sprite";
      }) {};
 
   "sdl2-ttf" = callPackage
@@ -243447,9 +245981,7 @@ self: {
        libraryPkgconfigDepends = [ SDL2 SDL2_ttf ];
        description = "Bindings to SDL2_ttf";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) SDL2; inherit (pkgs) SDL2_ttf;};
 
   "sdnv" = callPackage
@@ -243638,7 +246170,6 @@ self: {
        ];
        description = "A software defined radio library";
        license = lib.licenses.bsd3;
-       platforms = [ "x86_64-darwin" "x86_64-linux" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {};
@@ -243783,6 +246314,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "A Haskell implementation of the SECD abstract machine";
        license = lib.licenses.bsd3;
+       mainProgram = "secdi";
      }) {};
 
   "secdh" = callPackage
@@ -243799,6 +246331,7 @@ self: {
        description = "SECDH Machine Simulator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "secdh";
        broken = true;
      }) {};
 
@@ -243935,6 +246468,7 @@ self: {
        description = "Secret Santa game assigner using QR-Codes";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "secret-santa";
        broken = true;
      }) {};
 
@@ -243970,6 +246504,7 @@ self: {
        description = "Example of writing \"secure\" file removal in Haskell rather than C";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "secrm";
      }) {};
 
   "secure-memory" = callPackage
@@ -243997,6 +246532,7 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "Securely allocated and deallocated memory";
        license = lib.licenses.mpl20;
+       mainProgram = "checkpw";
      }) {};
 
   "secure-sockets" = callPackage
@@ -244252,6 +246788,7 @@ self: {
        description = "A Haskell library to make self-extracting executables";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "self-bundle";
      }) {};
 
   "selfrestart" = callPackage
@@ -244341,6 +246878,7 @@ self: {
        description = "Evaluate code snippets in Literate Haskell";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "semdoc";
        broken = true;
      }) {};
 
@@ -244736,11 +247274,8 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Automatically run Hspec tests on file modifications";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-darwin" "aarch64-linux" "armv7l-linux" "i686-linux"
-         "x86_64-linux"
-       ];
-       maintainers = with lib.maintainers; [ libjared ];
+       badPlatforms = [ "x86_64-darwin" ];
+       maintainers = [ lib.maintainers.libjared ];
      }) {};
 
   "sensenet" = callPackage
@@ -244759,6 +247294,7 @@ self: {
        description = "Distributed sensor network for the raspberry pi";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sensenet";
      }) {};
 
   "sensu-run" = callPackage
@@ -244781,6 +247317,7 @@ self: {
        description = "A tool to send command execution results to Sensu";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sensu-run";
        broken = true;
      }) {};
 
@@ -244870,6 +247407,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Check for common SEO mistakes on CI";
        license = lib.licenses.mit;
+       mainProgram = "seocheck";
      }) {};
 
   "seonbi" = callPackage
@@ -245344,6 +247882,7 @@ self: {
        description = "Simple project template from stack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
      }) {};
 
   "serv" = callPackage
@@ -245432,6 +247971,7 @@ self: {
        ];
        description = "Servant support for JuicyPixels";
        license = lib.licenses.bsd3;
+       mainProgram = "image-conversion";
      }) {};
 
   "servant-aeson-specs" = callPackage
@@ -245594,6 +248134,7 @@ self: {
        description = "Authentication via HMAC";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -245939,6 +248480,7 @@ self: {
        description = "Command line interface for Servant API clients";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "greet-cli";
      }) {};
 
   "servant-client" = callPackage
@@ -246173,6 +248715,7 @@ self: {
        ];
        description = "generate API docs for your servant webservice";
        license = lib.licenses.bsd3;
+       mainProgram = "greet-docs";
      }) {};
 
   "servant-docs-simple" = callPackage
@@ -246217,6 +248760,7 @@ self: {
        description = "Combinators for rendering EDE templates in servant web applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-ede-example";
      }) {};
 
   "servant-ekg" = callPackage
@@ -246480,6 +249024,7 @@ self: {
        description = "Bindings to GitHub API using servant";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -246575,6 +249120,7 @@ self: {
        description = "A library for using servant with htmx";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-htmx-exe";
        broken = true;
      }) {};
 
@@ -246873,6 +249419,7 @@ self: {
        description = "Derive a mock server for free from your servant API types";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mock-app";
        broken = true;
      }) {};
 
@@ -247509,6 +250056,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Automatically generate Servant API modules";
        license = lib.licenses.mit;
+       mainProgram = "servant-serf";
      }) {};
 
   "servant-server" = callPackage
@@ -247548,6 +250096,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A family of combinators for defining webservices APIs and serving them";
        license = lib.licenses.bsd3;
+       mainProgram = "greet";
      }) {};
 
   "servant-server-namedargs" = callPackage
@@ -247628,6 +250177,7 @@ self: {
        description = "A family of combinators for defining webservices APIs and serving them";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snap-greet";
      }) {};
 
   "servant-stache" = callPackage
@@ -247651,6 +250201,7 @@ self: {
        description = "Content-Types for rendering Mustache in servant";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -247791,6 +250342,7 @@ self: {
        description = "Servant Stream support for streamly";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-streamly-example";
        broken = true;
      }) {};
 
@@ -247818,6 +250370,7 @@ self: {
        executableHaskellDepends = [ base purescript-bridge ];
        description = "When REST is not enough ...";
        license = lib.licenses.bsd3;
+       mainProgram = "subscriber-psGenerator";
      }) {};
 
   "servant-swagger" = callPackage
@@ -248014,6 +250567,7 @@ self: {
        description = "TypeScript client generation for Servant";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-typescript-exe";
      }) {};
 
   "servant-util" = callPackage
@@ -248063,6 +250617,7 @@ self: {
        description = "Servant servers utilities";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-util-examples";
      }) {};
 
   "servant-util-beam-pg" = callPackage
@@ -248094,6 +250649,7 @@ self: {
        description = "Implementation of servant-util primitives for beam-postgres";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "servant-util-beam-pg-examples";
      }) {};
 
   "servant-validate" = callPackage
@@ -248154,6 +250710,7 @@ self: {
        description = "Servant support for delivering WebAssembly";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "exe";
        broken = true;
      }) {};
 
@@ -248314,7 +250871,7 @@ self: {
        description = "Auto-generate a server for your datatype";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
        broken = true;
      }) {};
 
@@ -248545,6 +251102,7 @@ self: {
        ];
        description = "Warp web server with template rendering";
        license = lib.licenses.mit;
+       mainProgram = "servius";
      }) {};
 
   "ses-html" = callPackage
@@ -248617,6 +251175,7 @@ self: {
        description = "Session types library";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-visualizer";
        broken = true;
      }) {};
 
@@ -248746,6 +251305,7 @@ self: {
        executableToolDepends = [ alex happy ];
        description = "Treating files as sets to perform rapid set manipulation";
        license = lib.licenses.bsd3;
+       mainProgram = "setdown";
      }) {};
 
   "setenv" = callPackage
@@ -248776,6 +251336,7 @@ self: {
        description = "A console interface to the game of Set";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "set-game";
        broken = true;
      }) {};
 
@@ -248831,6 +251392,7 @@ self: {
        ];
        description = "Perform set operations on files";
        license = lib.licenses.mit;
+       mainProgram = "setop";
      }) {};
 
   "setops" = callPackage
@@ -248927,6 +251489,7 @@ self: {
        description = "S-Expression parsing/printing made fun and easy";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sexp";
        broken = true;
      }) {};
 
@@ -248974,6 +251537,7 @@ self: {
        executableHaskellDepends = [ base pretty-show ];
        description = "Produce a s-expression representation of Show values";
        license = lib.licenses.bsd3;
+       mainProgram = "sexp-show";
      }) {};
 
   "sexpr" = callPackage
@@ -249006,6 +251570,7 @@ self: {
        testHaskellDepends = [ base data-default hspec megaparsec ];
        description = "Simple s-expression parser";
        license = lib.licenses.mit;
+       mainProgram = "sexpr-parser-z3-demo";
      }) {};
 
   "sexpresso" = callPackage
@@ -249092,6 +251657,7 @@ self: {
        description = "A command line tool to convert TrueType/OpenType fonts to WOFF format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sfnt2woff";
        broken = true;
      }) {inherit (pkgs) zlib;};
 
@@ -249150,6 +251716,7 @@ self: {
        description = "Sgrep - grep Fasta files for sequences matching a regular expression";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sgrep";
      }) {};
 
   "sh2md" = callPackage
@@ -249177,6 +251744,7 @@ self: {
        description = "Record your shell session and print in the markdown format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sh2md";
        broken = true;
      }) {};
 
@@ -249193,6 +251761,7 @@ self: {
        description = "SHA hashes for io-streams";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sha-streams";
        broken = true;
      }) {};
 
@@ -249249,6 +251818,7 @@ self: {
        description = "An automated way to run doctests in files that are changing";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shadower";
        broken = true;
      }) {};
 
@@ -249349,6 +251919,7 @@ self: {
        ];
        description = "Build system library, like Make, but more accurate dependencies";
        license = lib.licenses.bsd3;
+       mainProgram = "shake";
      }) {};
 
   "shake-ats" = callPackage
@@ -249385,7 +251956,7 @@ self: {
        ];
        description = "Build rules for historical benchmarking";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "shake-bindist" = callPackage
@@ -249447,6 +252018,7 @@ self: {
        description = "Utility for building Shake build systems using Cabal sandboxes";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shake-cabal-build";
        broken = true;
      }) {};
 
@@ -249644,6 +252216,7 @@ self: {
        description = "Shake build system on-disk caching";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ex.shake-persist";
        broken = true;
      }) {};
 
@@ -249753,6 +252326,7 @@ self: {
        description = "simple and interactive command-line build tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shaker";
      }) {};
 
   "shakers" = callPackage
@@ -249792,7 +252366,7 @@ self: {
        ];
        description = "A toolkit for making compile-time interpolated templates";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ psibi ];
+       maintainers = [ lib.maintainers.psibi ];
      }) {};
 
   "shakespeare-babel" = callPackage
@@ -249905,6 +252479,7 @@ self: {
        ];
        description = "Shannon-fano compression algorithm in Haskell";
        license = lib.licenses.mit;
+       mainProgram = "shannon-fano";
      }) {};
 
   "shapefile" = callPackage
@@ -249968,6 +252543,7 @@ self: {
        description = "physics engine and other tools for 2D shapes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shapes-bench";
        broken = true;
      }) {};
 
@@ -249989,6 +252565,7 @@ self: {
        description = "demos for the 'shapes' package";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shapes-demo";
      }) {};
 
   "shapes-math" = callPackage
@@ -250012,6 +252589,7 @@ self: {
        ];
        description = "faster vector/matrix math using unboxed numbers and Template Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "math-bench";
      }) {};
 
   "sharc-timbre" = callPackage
@@ -250097,6 +252675,7 @@ self: {
        description = "A Haskell preprocessor adding miscellaneous features";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "she";
        broken = true;
      }) {};
 
@@ -250146,6 +252725,7 @@ self: {
        description = "Test webhooks locally";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shelduck";
      }) {};
 
   "shell-conduit" = callPackage
@@ -250291,6 +252871,7 @@ self: {
        testHaskellDepends = [ base doctest Glob ];
        description = "Out of the shell solution for scripting in Haskell";
        license = lib.licenses.mpl20;
+       mainProgram = "readme";
      }) {};
 
   "shellmet_0_0_4_1" = callPackage
@@ -250309,6 +252890,7 @@ self: {
        description = "Out of the shell solution for scripting in Haskell";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "readme";
      }) {};
 
   "shellout" = callPackage
@@ -250323,6 +252905,7 @@ self: {
        executableHaskellDepends = [ async base stm text typed-process ];
        description = "A threaded manager for Haskell that can run and stream external process output/err/exits";
        license = lib.licenses.bsd3;
+       mainProgram = "example";
      }) {};
 
   "shelltestrunner" = callPackage
@@ -250343,6 +252926,7 @@ self: {
        ];
        description = "Easy, repeatable testing of CLI programs/commands";
        license = "GPL";
+       mainProgram = "shelltest";
      }) {};
 
   "shellwords" = callPackage
@@ -250416,6 +253000,7 @@ self: {
        ];
        description = "A Haskell implementation of the Shen programming language";
        license = lib.licenses.bsd3;
+       mainProgram = "shen";
      }) {};
 
   "shh" = callPackage
@@ -250444,7 +253029,7 @@ self: {
        testToolDepends = [ markdown-unlit ];
        description = "Simple shell scripting from Haskell";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "shh-extras" = callPackage
@@ -250459,7 +253044,7 @@ self: {
        testHaskellDepends = [ base tasty ];
        description = "Utility functions for using shh";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "shift" = callPackage
@@ -250478,6 +253063,7 @@ self: {
        ];
        description = "A tool to quickly switch between directories";
        license = lib.licenses.mit;
+       mainProgram = "teleport-hask";
      }) {};
 
   "shikensu" = callPackage
@@ -250519,6 +253105,7 @@ self: {
        description = "The Reflective Lambda Machine";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shimmer";
        broken = true;
      }) {};
 
@@ -250847,6 +253434,7 @@ self: {
        description = "A simple gtk based Russian Roulette game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "showdown";
      }) {};
 
   "shower" = callPackage
@@ -250872,6 +253460,7 @@ self: {
        ];
        description = "Clean up the formatting of 'show' output";
        license = lib.licenses.bsd3;
+       mainProgram = "shower";
      }) {};
 
   "shpider" = callPackage
@@ -250902,6 +253491,7 @@ self: {
        executableHaskellDepends = [ base mtl ];
        description = "A Haskell pattern splitter with emacs attachments";
        license = lib.licenses.publicDomain;
+       mainProgram = "shplit";
      }) {};
 
   "shqq" = callPackage
@@ -250939,6 +253529,7 @@ self: {
        description = "Shuffle tool for UHC";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shuffle";
      }) {};
 
   "shunya-library" = callPackage
@@ -251056,6 +253647,7 @@ self: {
        description = "Simple, visual, functional language for learning about recursion";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sifflet";
        broken = true;
      }) {};
 
@@ -251118,6 +253710,7 @@ self: {
        description = "Thom polynomials of second order Thom-Boardman singularities";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sigma-ij";
      }) {};
 
   "sign" = callPackage
@@ -251190,6 +253783,7 @@ self: {
        description = "Deterministic serialisation and signatures with proto-lens support";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "signable-haskell-protoc";
        broken = true;
      }) {};
 
@@ -251205,6 +253799,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Multiplatform signal support for Haskell";
        license = lib.licenses.mit;
+       mainProgram = "test";
      }) {};
 
   "signals" = callPackage
@@ -251277,6 +253872,7 @@ self: {
        description = "A Haskell clone of OpenBSD signify";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "signify-hs";
      }) {};
 
   "silently" = callPackage
@@ -251377,6 +253973,7 @@ self: {
        description = "stochastic simulation engine";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "simgi";
      }) {};
 
   "simple" = callPackage
@@ -251412,6 +254009,7 @@ self: {
        description = "A minimalist web framework for the WAI server interface";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "smpl";
      }) {};
 
   "simple-actors" = callPackage
@@ -251444,7 +254042,7 @@ self: {
        ];
        description = "A simple library for affine and vector spaces";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ turion ];
+       maintainers = [ lib.maintainers.turion ];
      }) {};
 
   "simple-amount" = callPackage
@@ -251693,6 +254291,7 @@ self: {
        description = "Evaluate a Text to an Integer: \"1 + 1\" -> 2";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Eval";
        broken = true;
      }) {};
 
@@ -251739,6 +254338,7 @@ self: {
        description = "Simple parallel genetic algorithm implementation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ga-sin-example";
        broken = true;
      }) {};
 
@@ -251760,6 +254360,7 @@ self: {
        ];
        description = "Simple parallel genetic algorithm implementation";
        license = lib.licenses.bsd3;
+       mainProgram = "ga-sin-example";
      }) {};
 
   "simple-get-opt" = callPackage
@@ -252009,6 +254610,7 @@ self: {
        description = "Simplified Pascal language to SSVM compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spc";
      }) {};
 
   "simple-pipe" = callPackage
@@ -252195,6 +254797,7 @@ self: {
        description = "Simple stacked virtual machine: assembler, disassembler, bytecode interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ssvm";
        broken = true;
      }) {};
 
@@ -252406,6 +255009,7 @@ self: {
        executableHaskellDepends = [ base ];
        testHaskellDepends = [ base ];
        license = lib.licenses.bsd3;
+       mainProgram = "simplelru-exe";
      }) {};
 
   "simplemesh" = callPackage
@@ -252517,6 +255121,7 @@ self: {
        ];
        description = "A simple markup language that translates to LaTeX";
        license = lib.licenses.gpl3Only;
+       mainProgram = "simplex";
      }) {};
 
   "simplex-basic" = callPackage
@@ -252638,6 +255243,7 @@ self: {
        description = "Simulate sequencing with different models for priming and errors";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "simseq";
      }) {};
 
   "simtreelo" = callPackage
@@ -252687,6 +255293,7 @@ self: {
        executablePkgconfigDepends = [ libXft xext ];
        description = "A programming language for simple GUIs";
        license = lib.licenses.bsd3;
+       mainProgram = "sindre";
      }) {inherit (pkgs.xorg) libXft; xext = null;};
 
   "single-tuple" = callPackage
@@ -253106,6 +255713,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Sixel library to show images in a terminal emulator";
        license = lib.licenses.bsd3;
+       mainProgram = "sixel-exe";
      }) {};
 
   "sixfiguregroup" = callPackage
@@ -253265,6 +255873,7 @@ self: {
        description = "Recursively show space (size and i-nodes) used in subdirectories";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sizes";
        broken = true;
      }) {};
 
@@ -253288,6 +255897,7 @@ self: {
        description = "Simple JavaScript Profiler";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sjsp";
        broken = true;
      }) {};
 
@@ -253346,6 +255956,7 @@ self: {
        description = "a tool to access the OSX keychain";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "skeleton";
      }) {};
 
   "skeletons" = callPackage
@@ -253365,6 +255976,7 @@ self: {
        description = "Manage project skeletons";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "skeletons";
      }) {};
 
   "skell" = callPackage
@@ -253401,6 +256013,7 @@ self: {
        description = "A MyAnimeList.net client.";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mal";
        broken = true;
      }) {};
 
@@ -253519,6 +256132,7 @@ self: {
        ];
        description = "syntax highlighting library";
        license = lib.licenses.gpl2Only;
+       mainProgram = "skylighting";
      }) {};
 
   "skylighting-core" = callPackage
@@ -253632,6 +256246,7 @@ self: {
        description = "Export Skype chat logs to text files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "skypelogexport";
        broken = true;
      }) {ghc-binary = null;};
 
@@ -253696,6 +256311,7 @@ self: {
        description = "Slack notifier for Haskell project";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -253722,6 +256338,7 @@ self: {
          text transformers wreq
        ];
        license = lib.licenses.mit;
+       mainProgram = "slack-progressbar-exe";
      }) {};
 
   "slack-verify" = callPackage
@@ -253798,6 +256415,7 @@ self: {
        description = "A note taking CLI tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "slate";
      }) {};
 
   "slave-thread" = callPackage
@@ -253834,6 +256452,7 @@ self: {
        executableHaskellDepends = [ base time ];
        description = "zZzzZz";
        license = lib.licenses.gpl2Only;
+       mainProgram = "sleep";
      }) {};
 
   "slice-cpp-gen" = callPackage
@@ -253852,6 +256471,7 @@ self: {
        ];
        description = "Generate C++ skeletons from slice files";
        license = lib.licenses.bsd3;
+       mainProgram = "slice-cpp-gen";
      }) {};
 
   "sliceofpy" = callPackage
@@ -253877,6 +256497,7 @@ self: {
        description = "Python-ish slicing traversals for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "gen-sliceofpy-examples";
        broken = true;
      }) {};
 
@@ -253915,6 +256536,7 @@ self: {
        description = "ws convert markdown to reveal-js";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "slidemews";
      }) {};
 
   "slim" = callPackage
@@ -253991,6 +256613,7 @@ self: {
        description = "A command line interface to Sloane's OEIS";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sloane";
        broken = true;
      }) {};
 
@@ -254010,6 +256633,7 @@ self: {
        ];
        description = "Visualize mathematical function's slope fields";
        license = lib.licenses.gpl3Only;
+       mainProgram = "slope-field";
      }) {};
 
   "slot-lambda" = callPackage
@@ -254091,6 +256715,7 @@ self: {
        testHaskellDepends = [ base hspec text text-icu ];
        description = "Clean URI slugs for Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "slugger";
      }) {};
 
   "slugify" = callPackage
@@ -254128,7 +256753,8 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Handle molecular sequences";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       mainProgram = "slynx";
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "small-bytearray-builder" = callPackage
@@ -254275,6 +256901,7 @@ self: {
        description = "A Haskell port of the smallpt path tracer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "smallpt-hs";
        broken = true;
      }) {};
 
@@ -254339,6 +256966,7 @@ self: {
        description = "A command line tool for working with sets and maps";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "smap";
        broken = true;
      }) {};
 
@@ -254376,6 +257004,7 @@ self: {
        description = "A smarter QuickCheck";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sc-qc";
        broken = true;
      }) {};
 
@@ -254632,6 +257261,7 @@ self: {
        description = "Command line tool for <https://smith.st/ Smith>.";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "smith";
      }) {};
 
   "smith-client" = callPackage
@@ -254883,6 +257513,7 @@ self: {
        description = "Listen for SMTP traffic and send it to an MTA script";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "smtp2mta";
      }) {};
 
   "smtps-gmail" = callPackage
@@ -254926,6 +257557,7 @@ self: {
        description = "GHC Source Plugin that helps to manage imports";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "play-smuggler";
        broken = true;
      }) {};
 
@@ -254982,6 +257614,7 @@ self: {
        description = "A basic console snake game";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snake";
        broken = true;
      }) {};
 
@@ -255031,7 +257664,7 @@ self: {
        ];
        description = "Top-level package for the Snap Web Framework";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "snap-accept" = callPackage
@@ -255081,6 +257714,7 @@ self: {
        description = "Command-line tool to manage Snap AuthManager database";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snap-auth-cli";
      }) {};
 
   "snap-blaze" = callPackage
@@ -255407,6 +258041,7 @@ self: {
        ];
        description = "Scaffolding CLI for the Snap Framework";
        license = lib.licenses.bsd3;
+       mainProgram = "snap";
      }) {};
 
   "snap-testing" = callPackage
@@ -255756,6 +258391,7 @@ self: {
        ];
        description = "snaplet-i18n";
        license = lib.licenses.bsd3;
+       mainProgram = "demo";
      }) {};
 
   "snaplet-influxdb" = callPackage
@@ -256419,6 +259055,7 @@ self: {
        executableHaskellDepends = [ base parsec ];
        description = "Extracts labeled snippets of code to files";
        license = lib.licenses.bsd3;
+       mainProgram = "snippet-extractor";
      }) {};
 
   "snm" = callPackage
@@ -256441,6 +259078,7 @@ self: {
        description = "The Simple Nice-Looking Manual Generator";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snm";
      }) {};
 
   "snmp" = callPackage
@@ -256483,6 +259121,7 @@ self: {
        description = "Strategic board game of medium complexity";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snorkels";
        broken = true;
      }) {};
 
@@ -256586,6 +259225,7 @@ self: {
        description = "snowflake http server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snowflake-server";
      }) {};
 
   "snowglobe" = callPackage
@@ -256603,6 +259243,7 @@ self: {
        ];
        description = "randomized fractal snowflakes demo";
        license = lib.licenses.gpl3Only;
+       mainProgram = "snowglobe";
      }) {};
 
   "snowtify" = callPackage
@@ -256620,6 +259261,7 @@ self: {
        description = "snowtify send your result of `stack build` (`stack test`) to notify-daemon :dog2:";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "snowtify";
        broken = true;
      }) {};
 
@@ -256712,6 +259354,7 @@ self: {
        description = "Tunnel a socket over a single datastream (stdin/stdout)";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sock2stream";
      }) {};
 
   "sockaddr" = callPackage
@@ -256741,7 +259384,7 @@ self: {
        ];
        description = "An extensible socket library";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "socket-activation" = callPackage
@@ -256844,6 +259487,7 @@ self: {
        description = "simpe tool to serve piped data over http and websocket";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "socketed";
        broken = true;
      }) {};
 
@@ -257028,6 +259672,7 @@ self: {
        ];
        description = "Generate CSV Exports of your Solana Staking Rewards";
        license = lib.licenses.bsd3;
+       mainProgram = "solana-staking-csvs";
      }) {};
 
   "solar" = callPackage
@@ -257123,6 +259768,7 @@ self: {
        testHaskellDepends = [ base containers QuickCheck ];
        description = "Solving simple games";
        license = lib.licenses.mit;
+       mainProgram = "solve";
      }) {};
 
   "som" = callPackage
@@ -257200,6 +259846,7 @@ self: {
        description = "Sonic Visualiser";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "svdump";
        broken = true;
      }) {};
 
@@ -257322,6 +259969,7 @@ self: {
        description = "Sort lines per file size";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sorty";
        broken = true;
      }) {};
 
@@ -257395,6 +260043,7 @@ self: {
        ];
        description = "Approximate a song from other pieces of sound";
        license = lib.licenses.bsd3;
+       mainProgram = "sound-collage";
      }) {};
 
   "sounddelay" = callPackage
@@ -257409,6 +260058,7 @@ self: {
        description = "Audio delay line";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "delay";
      }) {};
 
   "soundgen" = callPackage
@@ -257423,6 +260073,7 @@ self: {
        description = "sound generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "soundgen";
      }) {};
 
   "source-code-server" = callPackage
@@ -257447,6 +260098,7 @@ self: {
        description = "The server backend for the source code iPhone app";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "source-code-server";
      }) {};
 
   "source-constraints" = callPackage
@@ -257565,6 +260217,7 @@ self: {
        description = "DCPU-16 architecture utilities for Notch's 0x10c game";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "soyuz";
        broken = true;
      }) {};
 
@@ -257626,7 +260279,8 @@ self: {
        ];
        description = "Gopher server library and daemon";
        license = lib.licenses.gpl3Only;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       mainProgram = "spacecookie";
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "spacefill" = callPackage
@@ -257713,6 +260367,7 @@ self: {
        description = "A simple programming and debugging environment";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spade";
      }) {};
 
   "spake2" = callPackage
@@ -257740,6 +260395,7 @@ self: {
        description = "Implementation of the SPAKE2 Password-Authenticated Key Exchange algorithm";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "haskell-spake2-interop-entrypoint";
        broken = true;
      }) {};
 
@@ -257759,6 +260415,7 @@ self: {
        description = "A breakout clone written in netwire and gloss";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spanout";
        broken = true;
      }) {};
 
@@ -257788,6 +260445,7 @@ self: {
        description = "Distributed Apache Spark applications in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sparkle";
      }) {};
 
   "sparql-protocol" = callPackage
@@ -258025,6 +260683,7 @@ self: {
        description = "A unix-style (read from stdin, write to stdout) global hotkey daemon";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spartacon";
        broken = true;
      }) {};
 
@@ -258344,6 +261003,7 @@ self: {
        description = "Speechmatics api client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "speechmatics";
      }) {};
 
   "speedy-slice" = callPackage
@@ -258442,6 +261102,7 @@ self: {
        description = "Sphinx CLI and demo of Haskell Sphinx library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sphinx-cli";
      }) {};
 
   "sphinxesc" = callPackage
@@ -258461,6 +261122,7 @@ self: {
        description = "Transform queries for sphinx input";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sphinxesc";
        broken = true;
      }) {};
 
@@ -258500,6 +261162,7 @@ self: {
        description = "Experimental web browser";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spike";
      }) {inherit (pkgs) libsoup;};
 
   "spine" = callPackage
@@ -258620,6 +261283,7 @@ self: {
        ];
        description = "A parallel implementation of the Sorokina/Zeilfelder spline scheme";
        license = lib.licenses.agpl3Only;
+       mainProgram = "spline3";
      }) {};
 
   "splines" = callPackage
@@ -258711,6 +261375,7 @@ self: {
        ];
        description = "Split a big audio file into pieces at positions of silence";
        license = lib.licenses.bsd3;
+       mainProgram = "split-record";
      }) {};
 
   "split-tchan" = callPackage
@@ -258795,6 +261460,7 @@ self: {
        description = "Use numerical ranges to split out certain lines from a file";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "splitter";
        broken = true;
      }) {};
 
@@ -258815,6 +261481,7 @@ self: {
        ];
        description = "A tool for visualizing the lifecycle of many concurrent multi-staged processes";
        license = lib.licenses.bsd3;
+       mainProgram = "splot";
      }) {};
 
   "spooky" = callPackage
@@ -258870,6 +261537,7 @@ self: {
        description = "Spoon's utilities. Simple testing and nice looking error reporting.";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -258960,6 +261628,7 @@ self: {
        description = "JSON API to HTML website wrapper";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sprinkles";
      }) {};
 
   "spritz" = callPackage
@@ -258998,6 +261667,7 @@ self: {
        description = "HTTP proxy for authenticating users via OAuth2";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sproxy";
        broken = true;
      }) {};
 
@@ -259025,6 +261695,7 @@ self: {
        description = "Web interface to sproxy database";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sproxy-web";
        broken = true;
      }) {};
 
@@ -259051,6 +261722,7 @@ self: {
        ];
        description = "Secure HTTP proxy for authenticating users via OAuth2";
        license = lib.licenses.mit;
+       mainProgram = "sproxy2";
      }) {};
 
   "spsa" = callPackage
@@ -259098,6 +261770,7 @@ self: {
        description = "A compact file system watcher for Mac OS X, Linux and Windows";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "spy";
        broken = true;
      }) {};
 
@@ -259355,6 +262028,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sqsd-local";
      }) {};
 
   "squares" = callPackage
@@ -259410,7 +262084,8 @@ self: {
        ];
        description = "Squeal PostgreSQL Library";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ erictapen ];
+       mainProgram = "example";
+       maintainers = [ lib.maintainers.erictapen ];
      }) {};
 
   "squeal-postgresql-ltree" = callPackage
@@ -259478,6 +262153,7 @@ self: {
        ];
        description = "A file-packing application";
        license = "GPL";
+       mainProgram = "squeeze";
      }) {};
 
   "sr-extra" = callPackage
@@ -259525,6 +262201,7 @@ self: {
        description = "Build and install Debian packages completely from source";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "srcinst";
        broken = true;
      }) {};
 
@@ -259630,6 +262307,7 @@ self: {
        description = "text UI for scanning with SANE";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sscan";
        broken = true;
      }) {};
 
@@ -259756,6 +262434,7 @@ self: {
        description = "Check sshd configuration for adherence to best practices";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sshd-lint";
      }) {};
 
   "sshtun" = callPackage
@@ -259775,6 +262454,7 @@ self: {
        ];
        description = "Wrapper daemon to manage an ssh tunnel";
        license = lib.licenses.bsd3;
+       mainProgram = "sshtun";
      }) {};
 
   "sssp" = callPackage
@@ -259804,6 +262484,7 @@ self: {
        description = "HTTP proxy for S3";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sssp";
      }) {};
 
   "sstable" = callPackage
@@ -259823,6 +262504,7 @@ self: {
        description = "SSTables in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sstable";
      }) {};
 
   "ssv" = callPackage
@@ -259837,6 +262519,7 @@ self: {
        executableHaskellDepends = [ base containers ];
        description = "Comma-separated-value (CSV) read, show and write routines";
        license = lib.licenses.mit;
+       mainProgram = "csvclean";
      }) {};
 
   "st2" = callPackage
@@ -259933,6 +262616,7 @@ self: {
        description = "Trees whose branches are resistant to change";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "demo";
      }) {};
 
   "stache" = callPackage
@@ -259965,6 +262649,7 @@ self: {
        ];
        description = "Mustache templates for Haskell";
        license = lib.licenses.bsd3;
+       mainProgram = "stache";
      }) {};
 
   "stack" = callPackage
@@ -260061,7 +262746,8 @@ self: {
        '';
        description = "The Haskell Tool Stack";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       mainProgram = "stack";
+       maintainers = [ lib.maintainers.cdepillabout ];
      }) {};
 
   "stack-all" = callPackage
@@ -260082,6 +262768,7 @@ self: {
        ];
        description = "CLI tool for building across Stackage major versions";
        license = lib.licenses.bsd3;
+       mainProgram = "stack-all";
      }) {};
 
   "stack-bump" = callPackage
@@ -260106,6 +262793,7 @@ self: {
        description = "Dead simple version bumping for hpack packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stack-bump";
        broken = true;
      }) {};
 
@@ -260124,6 +262812,7 @@ self: {
        ];
        description = "Clean away old stack build artifacts";
        license = lib.licenses.bsd3;
+       mainProgram = "stack-clean-old";
      }) {};
 
   "stack-fix" = callPackage
@@ -260138,6 +262827,7 @@ self: {
        description = "Console program used to fix Stack build errors automatically";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stack-fix";
        broken = true;
      }) {};
 
@@ -260166,6 +262856,7 @@ self: {
        description = "Initial project template from stack";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "shc";
        broken = true;
      }) {};
 
@@ -260226,6 +262917,7 @@ self: {
        description = "A program for extending Stack to add distributed capabilities";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stack-network";
      }) {};
 
   "stack-prism" = callPackage
@@ -260266,6 +262958,7 @@ self: {
        description = "An equivalent to cabal run for stack";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stack-run";
        broken = true;
      }) {};
 
@@ -260316,6 +263009,7 @@ self: {
        ];
        description = "Create etags for Haskell projects based on Stack snapshots";
        license = lib.licenses.mit;
+       mainProgram = "stack-tag";
      }) {};
 
   "stack-templatizer" = callPackage
@@ -260329,6 +263023,7 @@ self: {
        executableHaskellDepends = [ base bytestring directory filepath ];
        description = "Generate a stack template from a folder";
        license = lib.licenses.bsd3;
+       mainProgram = "stack-templatizer";
      }) {};
 
   "stack-type" = callPackage
@@ -260403,6 +263098,7 @@ self: {
        description = "Convert stack projects to cabal.project + cabal.project.freeze";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stack2cabal";
        broken = true;
      }) {};
 
@@ -260431,6 +263127,7 @@ self: {
        description = "Convert stack.yaml files into Nix build instructions.";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stack2nix";
        broken = true;
      }) {};
 
@@ -260476,6 +263173,7 @@ self: {
        description = "Calculate and print (in different formats) Stackage build plans";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage-build-plan";
      }) {};
 
   "stackage-cabal" = callPackage
@@ -260586,6 +263284,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Secure download of packages for cabal-install";
        license = lib.licenses.mit;
+       mainProgram = "stackage-install";
      }) {};
 
   "stackage-metadata" = callPackage
@@ -260614,6 +263313,7 @@ self: {
        description = "DEPRECATED Grab current metadata for all packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "all-cabal-metadata-tool";
        broken = true;
      }) {};
 
@@ -260639,6 +263339,7 @@ self: {
        description = "Tool for querying Stackage";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage";
      }) {};
 
   "stackage-sandbox" = callPackage
@@ -260660,6 +263361,7 @@ self: {
        description = "Work with shared stackage sandboxes";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage-sandbox";
      }) {};
 
   "stackage-setup" = callPackage
@@ -260684,6 +263386,7 @@ self: {
        description = "An executable for downloading a Haskell setup";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage-setup";
      }) {};
 
   "stackage-to-hackage" = callPackage
@@ -260710,6 +263413,7 @@ self: {
        description = "Convert stack.yaml to cabal.project + cabal.project.freeze";
        license = lib.licenses.gpl3Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage-to-hackage";
        broken = true;
      }) {};
 
@@ -260746,6 +263450,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Update your package index incrementally (requires git)";
        license = lib.licenses.mit;
+       mainProgram = "stackage-update";
      }) {};
 
   "stackage-upload" = callPackage
@@ -260769,6 +263474,7 @@ self: {
        description = "A more secure version of cabal upload which uses HTTPS";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage-upload";
      }) {};
 
   "stackage2nix" = callPackage
@@ -260800,6 +263506,7 @@ self: {
        description = "Convert Stack files into Nix build instructions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stackage2nix";
      }) {};
 
   "stackcollapse-ghc" = callPackage
@@ -260825,6 +263532,7 @@ self: {
        ];
        description = "Program to fold GHC prof files into flamegraph input";
        license = lib.licenses.gpl3Only;
+       mainProgram = "stackcollapse-ghc";
      }) {};
 
   "stacked-dag" = callPackage
@@ -260844,6 +263552,7 @@ self: {
        testHaskellDepends = [ base containers doctest graphviz text ];
        description = "Ascii DAG(Directed acyclic graph) for visualization of dataflow";
        license = lib.licenses.bsd3;
+       mainProgram = "stacked-dag";
      }) {};
 
   "staf" = callPackage
@@ -260894,6 +263603,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Static site generator";
        license = lib.licenses.bsd3;
+       mainProgram = "stagen";
      }) {};
 
   "stan" = callPackage
@@ -260926,6 +263636,7 @@ self: {
        description = "Haskell STatic ANalyser";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stan";
      }) {};
 
   "standalone-derive-topdown" = callPackage
@@ -260957,6 +263668,7 @@ self: {
        description = "Generate standalone haddock documentation for a set of packages";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "standalone-haddock";
        broken = true;
      }) {};
 
@@ -261026,6 +263738,7 @@ self: {
        description = "Space simulation game";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "starrover2";
      }) {};
 
   "starter" = callPackage
@@ -261156,6 +263869,7 @@ self: {
        executableHaskellDepends = [ base polyparse ];
        description = "Compiles Rhapsody statecharts to C";
        license = lib.licenses.bsd3;
+       mainProgram = "statechart";
      }) {};
 
   "stateful-mtl" = callPackage
@@ -261489,6 +264203,7 @@ self: {
        description = "command line statistics";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stats";
        broken = true;
      }) {};
 
@@ -261631,6 +264346,7 @@ self: {
        description = "What version is the package X in stackage lts-Y.ZZ?";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "staversion";
        broken = true;
      }) {};
 
@@ -261702,6 +264418,7 @@ self: {
        description = "A library for implicit, monadic dataflow parallelism";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ohua-stream-bench";
        broken = true;
      }) {};
 
@@ -261792,6 +264509,7 @@ self: {
        description = "List and launch steam games from the cli";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "steambrowser";
        broken = true;
      }) {};
 
@@ -261826,6 +264544,7 @@ self: {
        description = "A file watcher and development tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sos";
        broken = true;
      }) {};
 
@@ -261948,6 +264667,7 @@ self: {
        description = "Educational implementation of the STG (Spineless Tagless G-machine)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stgi-exe";
        broken = true;
      }) {};
 
@@ -262088,7 +264808,7 @@ self: {
        ];
        description = "Containers for STM";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "stm-delay" = callPackage
@@ -262707,6 +265427,7 @@ self: {
        description = "Simple Theorem Prover";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "mu-test";
        broken = true;
      }) {};
 
@@ -262773,6 +265494,7 @@ self: {
        description = "Client for Stratum protocol";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stratum-tool";
      }) {};
 
   "stratux" = callPackage
@@ -262812,6 +265534,7 @@ self: {
        description = "A demonstration of the stratux library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stratux-demo";
      }) {};
 
   "stratux-http" = callPackage
@@ -263467,7 +266190,7 @@ self: {
        ];
        description = "Streaming Wai utilities";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ jb55 ];
+       maintainers = [ lib.maintainers.jb55 ];
      }) {};
 
   "streaming-with" = callPackage
@@ -263505,7 +266228,7 @@ self: {
        ];
        description = "Dataflow programming and declarative concurrency";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "streamly_0_8_2" = callPackage
@@ -263527,7 +266250,7 @@ self: {
        description = "Dataflow programming and declarative concurrency";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "streamly-archive" = callPackage
@@ -264136,6 +266859,7 @@ self: {
        ];
        description = "Find a local optimum of strictness annotations";
        license = lib.licenses.bsd3;
+       mainProgram = "strictify";
      }) {};
 
   "strictly" = callPackage
@@ -264382,6 +267106,7 @@ self: {
        ];
        description = "A library for generating random string from a regular experession";
        license = lib.licenses.bsd3;
+       mainProgram = "hstrrand";
      }) {};
 
   "string-similarity" = callPackage
@@ -264540,6 +267265,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
+       mainProgram = "new-template-exe";
      }) {};
 
   "strip-ansi-escape" = callPackage
@@ -264869,6 +267595,7 @@ self: {
        description = "Interface library for strongSwan SQL backend";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "strongswan-sql";
      }) {};
 
   "strongweak" = callPackage
@@ -264996,6 +267723,7 @@ self: {
        executableHaskellDepends = [ base data-default mtl split ];
        description = "Application library for building interactive console CLIs";
        license = lib.licenses.bsd3;
+       mainProgram = "some-cli";
      }) {};
 
   "structured-haskell-mode" = callPackage
@@ -265016,7 +267744,8 @@ self: {
        ];
        description = "Structured editing Emacs mode for Haskell";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "structured-haskell-mode";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "structured-mongoDB" = callPackage
@@ -265132,6 +267861,7 @@ self: {
        description = "A revival of the classic game Stunts (LambdaCube tech demo)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stunts";
      }) {};
 
   "stutter" = callPackage
@@ -265160,6 +267890,7 @@ self: {
        description = "(Stutter Text|String)-Utterer";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stutter";
      }) {};
 
   "stylish-cabal" = callPackage
@@ -265187,6 +267918,7 @@ self: {
        description = "Format Cabal files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "stylish-cabal";
        broken = true;
      }) {};
 
@@ -265220,6 +267952,7 @@ self: {
        ];
        description = "Haskell code prettifier";
        license = lib.licenses.bsd3;
+       mainProgram = "stylish-haskell";
      }) {};
 
   "stylist" = callPackage
@@ -265273,6 +268006,7 @@ self: {
        ];
        description = "A generator of nix files";
        license = "GPL";
+       mainProgram = "styx";
      }) {};
 
   "suavemente" = callPackage
@@ -265416,6 +268150,7 @@ self: {
        description = "Toolchain of subleq computer";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "subleq";
        broken = true;
      }) {};
 
@@ -265451,6 +268186,7 @@ self: {
        ];
        description = "Extract a part from CommonMark/Markdown docs";
        license = lib.licenses.gpl3Only;
+       mainProgram = "submark";
      }) {};
 
   "subnet" = callPackage
@@ -265481,6 +268217,7 @@ self: {
        description = "Subsample data";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "subsample";
        broken = true;
      }) {};
 
@@ -265525,6 +268262,7 @@ self: {
        executableHaskellDepends = [ base split ];
        description = "Modify SRT subtitle files";
        license = lib.licenses.bsd3;
+       mainProgram = "subtitles";
      }) {};
 
   "subwordgraph" = callPackage
@@ -265598,6 +268336,7 @@ self: {
        description = "Simple and moderately efficient suffix array implementation";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "suffix-array-exe";
        broken = true;
      }) {};
 
@@ -265766,6 +268505,7 @@ self: {
        description = "Tool for scaffolding fully configured batteries-included production-level Haskell projects";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "summon";
        broken = true;
      }) {};
 
@@ -265787,6 +268527,7 @@ self: {
        description = "Tool for scaffolding fully configured batteries-included production-level Haskell projects using TUI";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "summon-tui";
      }) {};
 
   "sump" = callPackage
@@ -265927,6 +268668,7 @@ self: {
        description = "Configure your dotfile deployment with a DSL";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "super-user-spark";
        broken = true;
      }) {};
 
@@ -266119,6 +268861,7 @@ self: {
        description = "A Supercompiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "supero";
        broken = true;
      }) {};
 
@@ -266336,6 +269079,7 @@ self: {
        description = "SystemVerilog to Verilog conversion";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sv2v";
        broken = true;
      }) {};
 
@@ -266435,6 +269179,7 @@ self: {
        description = "Code generation tool for Quartz code from a SVG";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "svg2q";
      }) {};
 
   "svgcairo" = callPackage
@@ -266451,7 +269196,7 @@ self: {
        libraryPkgconfigDepends = [ librsvg ];
        description = "Binding to the libsvg-cairo library";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ dalpd ];
+       maintainers = [ lib.maintainers.dalpd ];
      }) {inherit (pkgs) librsvg;};
 
   "svgone" = callPackage
@@ -266476,6 +269221,7 @@ self: {
        description = "Optimise SVGs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "svgone";
      }) {};
 
   "svgsym" = callPackage
@@ -266495,6 +269241,7 @@ self: {
        ];
        description = "A tool to prune unused symbols from icon SVG files";
        license = lib.licenses.gpl3Plus;
+       mainProgram = "svgsym";
      }) {};
 
   "svgutils" = callPackage
@@ -266510,6 +269257,7 @@ self: {
        description = "Helper functions for dealing with SVG files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "SVGtile";
        broken = true;
      }) {};
 
@@ -266652,6 +269400,7 @@ self: {
        description = "Testing of Swagger APIs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "swagger-test";
        broken = true;
      }) {};
 
@@ -266723,6 +269472,7 @@ self: {
        description = "Clojure without alphanumerics";
        license = lib.licenses.lgpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "swearjure";
        broken = true;
      }) {};
 
@@ -266802,6 +269552,7 @@ self: {
        ];
        description = "A semantic web toolkit";
        license = lib.licenses.lgpl21Only;
+       mainProgram = "Swish";
      }) {};
 
   "swiss-ephemeris" = callPackage
@@ -266885,6 +269636,7 @@ self: {
        description = "A simple web server for serving directories";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sws";
        broken = true;
      }) {};
 
@@ -267041,6 +269793,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Automatic test suite discovery for sydtest";
        license = "unknown";
+       mainProgram = "sydtest-discover";
      }) {};
 
   "sydtest-hedgehog" = callPackage
@@ -267386,6 +270139,7 @@ self: {
        description = "Synthesis Format Conversion Tool / Library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "syfco";
        broken = true;
      }) {};
 
@@ -267413,6 +270167,7 @@ self: {
        description = "Lambda calculus visualization";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sylvia";
      }) {};
 
   "sym" = callPackage
@@ -267865,6 +270620,7 @@ self: {
        description = "SymEngine symbolic mathematics engine for Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "symengine-hs-exe";
        broken = true;
      }) {inherit (pkgs) gmp; inherit (pkgs) gmpxx; 
          inherit (pkgs) symengine;};
@@ -267911,6 +270667,7 @@ self: {
        ];
        description = "Minimal implementation(s) of the classic electronic memory game";
        license = lib.licenses.gpl3Only;
+       mainProgram = "symon-ansi";
      }) {};
 
   "sync" = callPackage
@@ -267962,6 +270719,7 @@ self: {
        description = "Fast incremental file transfer using Merkle-Hash-Trees";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sync-mht";
        broken = true;
      }) {};
 
@@ -268026,6 +270784,7 @@ self: {
        description = "Similar code analysis";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "synt";
        broken = true;
      }) {Synt = null;};
 
@@ -268114,6 +270873,7 @@ self: {
        description = "Example application using syntax, a library for abstract syntax descriptions";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "syntax-example";
      }) {};
 
   "syntax-example-json" = callPackage
@@ -268133,6 +270893,7 @@ self: {
        description = "Example JSON parser/pretty-printer";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "syntax-example-json";
      }) {};
 
   "syntax-pretty" = callPackage
@@ -268263,9 +271024,7 @@ self: {
        ];
        description = "Control synthesizer effects via ALSA/MIDI";
        license = lib.licenses.gpl3Only;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "synthesizer-core" = callPackage
@@ -268631,6 +271390,7 @@ self: {
        description = "Lifted versions of System functions";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "main";
        broken = true;
      }) {};
 
@@ -268727,6 +271487,7 @@ self: {
        description = "Runs system tests of applications";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "system-test";
        broken = true;
      }) {};
 
@@ -268795,7 +271556,7 @@ self: {
        testHaskellDepends = [ base network unix ];
        description = "Systemd facilities (Socket activation, Notify)";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "systemd-socket-activation" = callPackage
@@ -268830,6 +271591,7 @@ self: {
        description = "An application that regularly logs system stats for later analysis";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "systemstats";
      }) {};
 
   "syz" = callPackage
@@ -268954,6 +271716,7 @@ self: {
        description = "Simple tool to generate tables from DSV input";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "table";
        broken = true;
      }) {};
 
@@ -268979,6 +271742,7 @@ self: {
        ];
        description = "Format tabular data as grid or table";
        license = lib.licenses.bsd3;
+       mainProgram = "table-layout-test-styles";
      }) {};
 
   "table-tennis" = callPackage
@@ -269010,6 +271774,7 @@ self: {
        description = "An interactive theorem prover based on semantic tableaux";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tableaux.cgi";
        broken = true;
      }) {};
 
@@ -269075,6 +271840,7 @@ self: {
        ];
        description = "Pretty-printing of CSV files";
        license = "unknown";
+       mainProgram = "tablize";
      }) {};
 
   "tabloid" = callPackage
@@ -269094,6 +271860,7 @@ self: {
        description = "View the output of shell commands in a table";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tabloid";
        broken = true;
      }) {};
 
@@ -269110,6 +271877,7 @@ self: {
        description = "Indents source files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tabs";
        broken = true;
      }) {};
 
@@ -269166,11 +271934,10 @@ self: {
        executablePkgconfigDepends = [ gtk3 ];
        description = "A desktop bar similar to xmobar, but with more GUI";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ rvl ];
+       mainProgram = "taffybar";
+       maintainers = [ lib.maintainers.rvl ];
        broken = true;
      }) {inherit (pkgs) gtk3;};
 
@@ -269384,6 +272151,7 @@ self: {
        ];
        description = "Efficient and simple HTML/XML parsing library";
        license = lib.licenses.bsd3;
+       mainProgram = "taggy";
      }) {};
 
   "taggy-lens" = callPackage
@@ -269584,6 +272352,7 @@ self: {
        ];
        description = "Black magic tagsoup";
        license = lib.licenses.bsd3;
+       mainProgram = "tagstew";
      }) {};
 
   "tagstream-conduit" = callPackage
@@ -269711,6 +272480,7 @@ self: {
        description = "Tailwind wrapped in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tailwind-run";
        broken = true;
      }) {};
 
@@ -269752,6 +272522,7 @@ self: {
        description = "AI(s) for playing Tak on playtak.com";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "takky";
      }) {};
 
   "takahashi" = callPackage
@@ -269823,6 +272594,7 @@ self: {
        description = "Line oriented fast enough text search";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "talash";
        broken = true;
      }) {};
 
@@ -269854,6 +272626,7 @@ self: {
        description = "The Tamarin prover for security protocol analysis";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tamarin-prover";
      }) {};
 
   "tamarin-prover-term" = callPackage
@@ -270114,6 +272887,7 @@ self: {
        description = "Generate test-suites from refinement types";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "target";
      }) {inherit (pkgs) z3;};
 
   "tart" = callPackage
@@ -270136,6 +272910,7 @@ self: {
        ];
        description = "Terminal Art";
        license = lib.licenses.bsd3;
+       mainProgram = "tart";
      }) {};
 
   "task" = callPackage
@@ -270156,6 +272931,7 @@ self: {
        description = "A command line tool for keeping track of tasks you worked on";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "task";
      }) {};
 
   "task-distribution" = callPackage
@@ -270222,6 +272998,7 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "A command-line kanban board/task manager";
        license = lib.licenses.bsd3;
+       mainProgram = "taskell";
      }) {};
 
   "taskpool" = callPackage
@@ -270261,7 +273038,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Types and aeson instances for taskwarrior tasks";
        license = lib.licenses.agpl3Plus;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "tasty" = callPackage
@@ -270317,6 +273094,7 @@ self: {
        description = "Auto discovery for Tasty with support for ingredients and test tree generation";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tasty-auto";
        broken = true;
      }) {};
 
@@ -270413,6 +273191,7 @@ self: {
        ];
        description = "Test discovery for the tasty framework";
        license = lib.licenses.mit;
+       mainProgram = "tasty-discover";
      }) {};
 
   "tasty-expected-failure" = callPackage
@@ -270429,7 +273208,7 @@ self: {
        ];
        description = "Mark tasty tests as failure expected";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ nomeata ];
+       maintainers = [ lib.maintainers.nomeata ];
      }) {};
 
   "tasty-fail-fast" = callPackage
@@ -270894,6 +273673,7 @@ self: {
        description = "Golden testing provider for tasty with muti-line diff output";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tasty-mgolden-example";
        broken = true;
      }) {};
 
@@ -270954,6 +273734,7 @@ self: {
        testHaskellDepends = [ base QuickCheck tasty ];
        description = "Pre-built tasty trees for checking lawful class properties using QuickCheck";
        license = lib.licenses.bsd3;
+       mainProgram = "tasty-quickcheck-laws-demo";
      }) {};
 
   "tasty-rerun" = callPackage
@@ -271182,6 +273963,7 @@ self: {
        description = "Meta tic-tac-toe ncurses game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tateti-tateti";
      }) {};
 
   "tau" = callPackage
@@ -271259,6 +274041,7 @@ self: {
        description = "TokyoCabinet CLI interface";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tchcli";
      }) {};
 
   "tce-conf" = callPackage
@@ -271494,6 +274277,7 @@ self: {
        description = "Codegen for TDLib";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tdlib-gen";
      }) {};
 
   "tdlib-types" = callPackage
@@ -271554,6 +274338,7 @@ self: {
        description = "Pure Haskell TDS protocol implementation. Mainly for beam-mssql and beam-sybase";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -271645,6 +274430,7 @@ self: {
        description = "Procedures and Sequences";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "technique";
        broken = true;
      }) {};
 
@@ -271762,6 +274548,7 @@ self: {
        description = "Telegram Bot microframework for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hello-bot";
      }) {};
 
   "telegram-bot-simple" = callPackage
@@ -271906,6 +274693,7 @@ self: {
        description = "A tool to quickly switch between directories";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "teleport-exe";
        broken = true;
      }) {};
 
@@ -271962,6 +274750,7 @@ self: {
        description = "IRC tellbot";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tellbot";
        broken = true;
      }) {};
 
@@ -271984,6 +274773,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "A dead-simple shell interpolation templating utility";
        license = lib.licenses.bsd3;
+       mainProgram = "tempered";
      }) {};
 
   "tempi" = callPackage
@@ -272142,6 +274932,7 @@ self: {
        description = "Make template from website";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "templateify";
        broken = true;
      }) {};
 
@@ -272359,6 +275150,7 @@ self: {
        description = "Interpreter for the FRP language Tempus";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tempus";
        broken = true;
      }) {};
 
@@ -272375,6 +275167,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Programmers' time tracker";
        license = lib.licenses.agpl3Only;
+       mainProgram = "tempus";
      }) {};
 
   "ten" = callPackage
@@ -272473,6 +275266,7 @@ self: {
        description = "Create valid deep neural network architectures";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tensor-safe";
        broken = true;
      }) {};
 
@@ -272588,6 +275382,7 @@ self: {
        description = "TensorFlow demo application for learning MNIST model";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Main";
        broken = true;
      }) {tensorflow-mnist-input-data = null;};
 
@@ -272778,6 +275573,7 @@ self: {
        description = "Bindings to the Termbox library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -272793,6 +275589,7 @@ self: {
        executableHaskellDepends = [ base cli ];
        description = "Composable terminal colors";
        license = lib.licenses.gpl3Only;
+       mainProgram = "termcolor";
      }) {};
 
   "terminal" = callPackage
@@ -272848,6 +275645,7 @@ self: {
        testHaskellDepends = [ base QuickCheck time ];
        description = "Simple terminal-based time tracker";
        license = lib.licenses.bsd3;
+       mainProgram = "punch";
      }) {};
 
   "terminal-size" = callPackage
@@ -272954,10 +275752,9 @@ self: {
        ];
        description = "Terminal emulator configurable in Haskell";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
-       maintainers = with lib.maintainers; [ cdepillabout ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "termonad";
+       maintainers = [ lib.maintainers.cdepillabout ];
      }) {inherit (pkgs) gtk3; inherit (pkgs) pcre2; 
          vte_291 = pkgs.vte;};
 
@@ -272978,6 +275775,7 @@ self: {
        description = "Plot time series in your terminal using commands stdout";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "termplot";
        broken = true;
      }) {};
 
@@ -273018,6 +275816,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "HTTP backend to store terraform state using pass and git";
        license = "AGPL";
+       mainProgram = "terraform-http-backend-pass";
      }) {};
 
   "terrahs" = callPackage
@@ -273052,6 +275851,7 @@ self: {
        description = "A semantic parser for lojban";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tersmu";
        broken = true;
      }) {};
 
@@ -273389,6 +276189,7 @@ self: {
        ];
        description = "Testing framework";
        license = lib.licenses.bsd3;
+       mainProgram = "test-karya-generate";
      }) {};
 
   "test-lib" = callPackage
@@ -273410,6 +276211,7 @@ self: {
        executableHaskellDepends = [ base simple-get-opt ];
        description = "A library to make a quick test-runner script";
        license = lib.licenses.isc;
+       mainProgram = "test-runner";
      }) {};
 
   "test-monad-laws" = callPackage
@@ -273504,6 +276306,7 @@ self: {
        description = "Lightweight development enviroments using test-sandbox";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test-sandbox-compose";
      }) {};
 
   "test-sandbox-hunit" = callPackage
@@ -273597,6 +276400,7 @@ self: {
        description = "Small test package";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "testPkg";
        broken = true;
      }) {};
 
@@ -273725,6 +276529,7 @@ self: {
        description = "Display a monitor test pattern";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "testpattern";
        broken = true;
      }) {};
 
@@ -273756,6 +276561,7 @@ self: {
        executableHaskellDepends = [ base GLUT random ];
        description = "A 2-D clone of Tetris";
        license = lib.licenses.bsd3;
+       mainProgram = "tetris";
      }) {};
 
   "tex-join-bib" = callPackage
@@ -273776,6 +276582,7 @@ self: {
        ];
        description = "Compile separate tex files with the same bibliography";
        license = lib.licenses.gpl3Only;
+       mainProgram = "tex-join-bib";
      }) {};
 
   "tex2txt" = callPackage
@@ -273791,6 +276598,7 @@ self: {
        description = "LaTeX to plain-text conversion";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tex2txt";
        broken = true;
      }) {};
 
@@ -273813,6 +276621,7 @@ self: {
        description = "View your latex output while editing";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "texbuilder";
        broken = true;
      }) {};
 
@@ -274380,6 +277189,7 @@ self: {
        ];
        description = "Parser and Printer for LDAP text data stream";
        license = lib.licenses.bsd3;
+       mainProgram = "parseTest";
      }) {};
 
   "text-lens" = callPackage
@@ -274665,6 +277475,7 @@ self: {
        testHaskellDepends = [ base hedgehog neat-interpolation text ];
        description = "Simple text replacements from a list of search/replace pairs";
        license = lib.licenses.asl20;
+       mainProgram = "text-replace";
      }) {};
 
   "text-rope" = callPackage
@@ -275044,6 +277855,7 @@ self: {
        description = "A simple Haskell program to provide tags for Haskell code completion in TextMate";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "textmatetags";
      }) {};
 
   "textocat-api" = callPackage
@@ -275151,6 +277963,7 @@ self: {
        description = "A library for building tftp servers";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tftp_upload";
        broken = true;
      }) {};
 
@@ -275844,6 +278657,7 @@ self: {
        description = "Give your dependencies stars on GitHub!";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "thank-you-stars";
        broken = true;
      }) {};
 
@@ -275886,6 +278700,7 @@ self: {
        description = "Haskell API bindings for http://themoviedb.org";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tmdb";
        broken = true;
      }) {};
 
@@ -275908,6 +278723,7 @@ self: {
        ];
        description = "Project templating tool";
        license = lib.licenses.bsd3;
+       mainProgram = "themplate";
      }) {};
 
   "thentos-cookie-session" = callPackage
@@ -275962,6 +278778,7 @@ self: {
        description = "A simple client for the TheoremQuest theorem proving game";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tq";
      }) {};
 
   "these" = callPackage
@@ -276047,6 +278864,7 @@ self: {
        description = "Typing Haskell In Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "thih";
        broken = true;
      }) {};
 
@@ -276209,6 +279027,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "Runs other programs in the manner of a thread pool";
        license = "GPL";
+       mainProgram = "threadpool";
      }) {};
 
   "threaded" = callPackage
@@ -276305,6 +279124,7 @@ self: {
        ];
        description = "Simple, IO-based library for Erlang-style thread supervision";
        license = lib.licenses.mit;
+       mainProgram = "threads-supervisor-example";
      }) {};
 
   "threadscope" = callPackage
@@ -276326,6 +279146,7 @@ self: {
        ];
        description = "A graphical tool for profiling parallel Haskell programs";
        license = lib.licenses.bsd3;
+       mainProgram = "threadscope";
      }) {};
 
   "threefish" = callPackage
@@ -276403,6 +279224,7 @@ self: {
        description = "Write simple nested context menus for threepenny-gui";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "threepenny-gui-contextmenu-exe";
        broken = true;
      }) {};
 
@@ -276419,6 +279241,7 @@ self: {
        description = "Flexbox layouts for Threepenny-gui";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "threepenny-flexbox-exe";
        broken = true;
      }) {};
 
@@ -276666,6 +279489,7 @@ self: {
        description = "A desktop bar based on WebKit";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tianbar";
        broken = true;
      }) {inherit (pkgs) gtk3; inherit (pkgs) webkitgtk;};
 
@@ -276700,6 +279524,7 @@ self: {
        description = "Useful if reading \"Why FP matters\" by John Hughes";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tic-tac-toe";
      }) {};
 
   "ticker" = callPackage
@@ -276736,6 +279561,7 @@ self: {
        testHaskellDepends = [ base QuickCheck text ];
        description = "A basic implementation of a personal ticket management system";
        license = lib.licenses.mit;
+       mainProgram = "ticket-manager";
      }) {};
 
   "tickle" = callPackage
@@ -276797,6 +279623,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion weigh ];
        description = "Pattern language for improvised music";
        license = lib.licenses.gpl3Only;
+       mainProgram = "tidal";
      }) {};
 
   "tidal_1_8_0" = callPackage
@@ -276825,6 +279652,7 @@ self: {
        description = "Pattern language for improvised music";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tidal";
      }) {};
 
   "tidal-midi" = callPackage
@@ -276879,6 +279707,7 @@ self: {
        description = "Visual rendering for Tidal patterns and osc messages";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tidal-vis";
        broken = true;
      }) {};
 
@@ -276923,6 +279752,7 @@ self: {
        description = "Tiger Compiler of Universiteit Utrecht";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tiger";
        broken = true;
      }) {};
 
@@ -276992,6 +279822,7 @@ self: {
        ];
        description = "A program for generating LaTeX code of string diagrams";
        license = lib.licenses.mit;
+       mainProgram = "tikzsd";
      }) {};
 
   "tile" = callPackage
@@ -277035,6 +279866,7 @@ self: {
        description = "The Timber Compiler";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "timberc";
      }) {};
 
   "time_1_12_2" = callPackage
@@ -277358,6 +280190,7 @@ self: {
        description = "Time series analysis";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "time-series";
        broken = true;
      }) {};
 
@@ -277462,6 +280295,7 @@ self: {
        executableHaskellDepends = [ base haskeline uu-parsinglib ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "timecalc";
        broken = true;
      }) {};
 
@@ -277476,6 +280310,7 @@ self: {
        executableHaskellDepends = [ base process time ];
        description = "time each line of terminal output";
        license = lib.licenses.gpl2Only;
+       mainProgram = "timeconsole";
      }) {};
 
   "timeit" = callPackage
@@ -277527,6 +280362,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Initial project template from stack";
        license = lib.licenses.bsd3;
+       mainProgram = "Tutorial1";
      }) {};
 
   "timelike" = callPackage
@@ -277670,6 +280506,7 @@ self: {
        ];
        description = "A tool for visualizing time series from log files";
        license = lib.licenses.bsd3;
+       mainProgram = "tplot";
      }) {};
 
   "timeprint" = callPackage
@@ -277838,6 +280675,7 @@ self: {
        ];
        description = "Run a command and timestamp its stdout/stderr lines";
        license = lib.licenses.bsd3;
+       mainProgram = "Timestamp";
      }) {};
 
   "timestamper" = callPackage
@@ -277851,6 +280689,7 @@ self: {
        executableHaskellDepends = [ base old-locale time ];
        description = "Read standard input and prepend each line with a timestamp";
        license = lib.licenses.mit;
+       mainProgram = "timestamper";
      }) {};
 
   "timeutils" = callPackage
@@ -277867,6 +280706,7 @@ self: {
        description = "Time utilities";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "timeutils";
        broken = true;
      }) {};
 
@@ -278002,6 +280842,7 @@ self: {
        description = "A softer alternative to Haddock";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tintin";
        broken = true;
      }) {};
 
@@ -278057,6 +280898,7 @@ self: {
        description = "A fast DOM parser for a subset of XML";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "validate";
        broken = true;
      }) {};
 
@@ -278126,6 +280968,7 @@ self: {
        description = "Convert from Haskell to Tip";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tip-ghc";
      }) {};
 
   "tip-lib" = callPackage
@@ -278150,6 +280993,7 @@ self: {
        description = "tons of inductive problems - support library and tools";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tip";
      }) {};
 
   "tiphys" = callPackage
@@ -278197,6 +281041,7 @@ self: {
        description = "Testing Infrastructure for Temporal AbstractioNs - GUI to debug temporal programs";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "titan";
      }) {};
 
   "titan-debug-yampa" = callPackage
@@ -278244,7 +281089,8 @@ self: {
        testHaskellDepends = [ base tasty tasty-hunit tasty-quickcheck ];
        description = "Convert English Words to Title Case";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "titlecase";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "tkhs" = callPackage
@@ -278264,6 +281110,7 @@ self: {
        description = "Simple Presentation Utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tkhs";
        broken = true;
      }) {};
 
@@ -278292,6 +281139,7 @@ self: {
        description = "A web-based visualizer for GHC Profiling Reports";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tkyprof";
        broken = true;
      }) {};
 
@@ -278328,6 +281176,7 @@ self: {
        testHaskellDepends = [ base tasty tasty-golden ];
        description = "Haskell tldr client";
        license = lib.licenses.bsd3;
+       mainProgram = "tldr";
      }) {};
 
   "tlex" = callPackage
@@ -278575,7 +281424,8 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Handle phylogenetic trees";
        license = lib.licenses.gpl3Plus;
-       maintainers = with lib.maintainers; [ dschrempf ];
+       mainProgram = "tlynx";
+       maintainers = [ lib.maintainers.dschrempf ];
      }) {};
 
   "tmapchan" = callPackage
@@ -278780,6 +281630,7 @@ self: {
        ];
        description = "simple executable for templating";
        license = lib.licenses.gpl3Only;
+       mainProgram = "tmpl";
      }) {};
 
   "tn" = callPackage
@@ -278803,6 +281654,7 @@ self: {
        description = "A simple daily journal program";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tn";
      }) {};
 
   "tnet" = callPackage
@@ -278895,6 +281747,7 @@ self: {
        description = "Twitter bot generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "toboggan";
      }) {};
 
   "todo" = callPackage
@@ -278934,6 +281787,7 @@ self: {
        description = "Easy-to-use TODOs manager";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "todos";
      }) {};
 
   "tofromxml" = callPackage
@@ -278971,6 +281825,7 @@ self: {
        ];
        description = "Manage the toilet queue at the IMO";
        license = "GPL";
+       mainProgram = "toilet";
      }) {};
 
   "token-bucket" = callPackage
@@ -279009,6 +281864,7 @@ self: {
        description = "Fast rate limiting using the token bucket algorithm (BSD)";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "token-limiter-extended-tests";
        broken = true;
      }) {};
 
@@ -279053,6 +281909,7 @@ self: {
        ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "token-search";
        broken = true;
      }) {};
 
@@ -279187,9 +282044,7 @@ self: {
        librarySystemDepends = [ tokyocabinet tokyotyrant ];
        description = "FFI bindings to libtokyotyrant";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
        hydraPlatforms = lib.platforms.none;
        broken = true;
      }) {inherit (pkgs) tokyocabinet; inherit (pkgs) tokyotyrant;};
@@ -279304,6 +282159,7 @@ self: {
        description = "Command-line tool to check syntax of TOML files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tomlcheck";
      }) {};
 
   "tonalude" = callPackage
@@ -279493,6 +282349,7 @@ self: {
        description = "Cluster single cells and analyze cell clade relationships";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "too-many-cells";
      }) {};
 
   "toodles" = callPackage
@@ -279529,6 +282386,7 @@ self: {
        description = "Manage the TODO entries in your code";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "toodles";
        broken = true;
      }) {};
 
@@ -279603,6 +282461,7 @@ self: {
        testHaskellDepends = [ base hspec profunctors text ];
        description = "Template-to-Haskell preprocessor, and templating language";
        license = lib.licenses.gpl3Only;
+       mainProgram = "tophat";
      }) {};
 
   "topkata" = callPackage
@@ -279622,6 +282481,7 @@ self: {
        description = "OpenGL Arcade Game";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "topkata";
      }) {};
 
   "topograph" = callPackage
@@ -279700,7 +282560,7 @@ self: {
        libraryHaskellDepends = [ base void ];
        description = "Exhaustive pattern matching using lenses, traversals, and prisms";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "total-alternative" = callPackage
@@ -279755,6 +282615,7 @@ self: {
        description = "Library (and cli) to execute a procedure on file change";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "touched";
        broken = true;
      }) {};
 
@@ -279803,6 +282664,7 @@ self: {
        description = "A Tox protocol implementation in Haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "toxsave-convert";
      }) {};
 
   "toxcore-c" = callPackage
@@ -279829,6 +282691,7 @@ self: {
        description = "Haskell bindings to the C reference implementation of Tox";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "groupbot";
      }) {toxcore = null;};
 
   "toxiproxy-haskell" = callPackage
@@ -279943,6 +282806,7 @@ self: {
        description = "simple, parallel job scheduling";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tpar";
      }) {};
 
   "tpb" = callPackage
@@ -280161,6 +283025,7 @@ self: {
        description = "Package to list all tracked and untracked existing files via Git";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tracked-files";
        broken = true;
      }) {};
 
@@ -280196,6 +283061,7 @@ self: {
        description = "A command-line tool for live monitoring";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trackit";
        broken = true;
      }) {};
 
@@ -280265,6 +283131,7 @@ self: {
          time transformers unordered-containers
        ];
        license = lib.licenses.bsd3;
+       mainProgram = "trade-journal";
      }) {inherit (pkgs) gmp; inherit (pkgs) mpfr;};
 
   "traildb" = callPackage
@@ -280401,6 +283268,7 @@ self: {
        description = "Text transformer and interpreter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "transf";
      }) {};
 
   "transfer-db" = callPackage
@@ -280430,6 +283298,7 @@ self: {
        description = "ODBC database transfer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "transfer-db";
      }) {};
 
   "transformations" = callPackage
@@ -280451,6 +283320,7 @@ self: {
        description = "Generic representation of tree transformations";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "Benchmark";
      }) {};
 
   "transformers_0_6_0_4" = callPackage
@@ -280804,6 +283674,7 @@ self: {
        description = "Translation cli tool";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "translate";
      }) {};
 
   "trasa" = callPackage
@@ -281028,6 +283899,7 @@ self: {
        description = ".travis.yml preprocessor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "travis-meta-yaml";
        broken = true;
      }) {};
 
@@ -281043,6 +283915,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "A better travis_wait";
        license = lib.licenses.bsd3;
+       mainProgram = "travis-pogodi";
      }) {};
 
   "trawl" = callPackage
@@ -281062,6 +283935,7 @@ self: {
        description = "A tool for finding haddocks";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trawl";
        broken = true;
      }) {};
 
@@ -281078,6 +283952,7 @@ self: {
        description = "Tray Icon application to PowerOff / Reboot computer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "traypoweroff";
        broken = true;
      }) {};
 
@@ -281517,6 +284392,7 @@ self: {
        description = "A PostgreSQL Database Migrator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trek";
      }) {};
 
   "trek-db" = callPackage
@@ -281738,6 +284614,7 @@ self: {
        description = "Trigger is a cross platform file system watcher for super fast build-and-restart workflows";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trigger";
        broken = true;
      }) {};
 
@@ -281755,6 +284632,7 @@ self: {
        description = "A command-line tool for trimming whitespace";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trim";
        broken = true;
      }) {};
 
@@ -281786,6 +284664,7 @@ self: {
        description = "Search for, annotate and trim poly-A tail";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trimpolya";
      }) {};
 
   "tripLL" = callPackage
@@ -281886,6 +284765,7 @@ self: {
        description = "A Tropical Geometry package for Haskell";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tropical-geometry";
      }) {};
 
   "true-name" = callPackage
@@ -281916,6 +284796,7 @@ self: {
        description = "Audio file compressor-limiter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "truelevel";
      }) {};
 
   "trurl" = callPackage
@@ -281939,6 +284820,7 @@ self: {
        description = "Haskell template code generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "trurl";
      }) {};
 
   "trust-chain" = callPackage
@@ -282089,6 +284971,7 @@ self: {
        description = "Real time TSP tour visualization";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tsp-viz";
        broken = true;
      }) {};
 
@@ -282141,6 +285024,7 @@ self: {
        description = "Interacts with tesseract to ease reading of RAW Japanese manga";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tsuntsun";
        broken = true;
      }) {};
 
@@ -282156,6 +285040,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Convert tsv to csv";
        license = lib.licenses.bsd3;
+       mainProgram = "tsv2csv";
      }) {};
 
   "tsvsql" = callPackage
@@ -282175,6 +285060,7 @@ self: {
        description = "Template tsv into SQL";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tsvsql";
        broken = true;
      }) {};
 
@@ -282205,6 +285091,7 @@ self: {
        description = "An API binding Web.Spock to Database.Beam";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tsweb";
      }) {};
 
   "ttask" = callPackage
@@ -282228,6 +285115,7 @@ self: {
        description = "This is task management tool for yourself, that inspired by scrum";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ttask";
        broken = true;
      }) {};
 
@@ -282302,7 +285190,7 @@ self: {
        ];
        description = "Things Tracker Network JSON Types";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "ttn-client" = callPackage
@@ -282324,7 +285212,8 @@ self: {
        description = "TheThingsNetwork client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ sorki ];
+       mainProgram = "ttnc";
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "ttrie" = callPackage
@@ -282378,6 +285267,7 @@ self: {
        description = "Working with files for the Tiptoi® pen";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tttool";
        broken = true;
      }) {};
 
@@ -282439,6 +285329,7 @@ self: {
        description = "Homogeneous tuples";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tuplepp";
      }) {};
 
   "tuple" = callPackage
@@ -282629,6 +285520,7 @@ self: {
        description = "Plays music generated by Turing machines with 5 states and 2 symbols";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "turing-music";
        broken = true;
      }) {};
 
@@ -282663,6 +285555,7 @@ self: {
        testHaskellDepends = [ base HUnit ];
        description = "Haskell port of Deniz Yuret's Turkish deasciifier";
        license = lib.licenses.mit;
+       mainProgram = "turkish-deasciifier";
      }) {};
 
   "turn-loop" = callPackage
@@ -282687,6 +285580,7 @@ self: {
        executableHaskellDepends = [ base containers MonadRandom random ];
        description = "shifts scheduling tool";
        license = lib.licenses.bsd3;
+       mainProgram = "settimana";
      }) {};
 
   "turtle" = callPackage
@@ -282710,7 +285604,7 @@ self: {
        benchmarkHaskellDepends = [ base tasty-bench text ];
        description = "Shell programming, Haskell-style";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "turtle_1_6_0" = callPackage
@@ -282737,7 +285631,7 @@ self: {
        description = "Shell programming, Haskell-style";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "turtle-options" = callPackage
@@ -282755,6 +285649,7 @@ self: {
        description = "Collection of command line options and parsers for these options";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -282769,6 +285664,7 @@ self: {
        executableHaskellDepends = [ base bytestring ];
        description = "Trailing Whitespace";
        license = lib.licenses.bsd3;
+       mainProgram = "tw";
      }) {};
 
   "twain" = callPackage
@@ -282820,6 +285716,7 @@ self: {
        ];
        description = "An equational theorem prover";
        license = lib.licenses.bsd3;
+       mainProgram = "twee";
      }) {};
 
   "twee-lib" = callPackage
@@ -282864,6 +285761,7 @@ self: {
        description = "Command-line tool for twitter";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tweet";
      }) {};
 
   "twentefp" = callPackage
@@ -283005,6 +285903,7 @@ self: {
        description = "Rubik's cube solver";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "twentyseven";
      }) {};
 
   "twfy-api-client" = callPackage
@@ -283031,6 +285930,7 @@ self: {
        description = "They Work For You API Client Library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "twfy-api-client";
        broken = true;
      }) {};
 
@@ -283063,6 +285963,7 @@ self: {
        description = "CLI twitter client";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "twhs";
      }) {};
 
   "twidge" = callPackage
@@ -283084,6 +285985,7 @@ self: {
        description = "Unix Command-Line Twitter and Identica Client";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "twidge";
      }) {};
 
   "twilight-stm" = callPackage
@@ -283256,6 +286158,7 @@ self: {
        description = "A Haskell-based CLI Twitter client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "twitter";
        broken = true;
      }) {};
 
@@ -283435,6 +286338,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Filter to convert plain text files to RTF";
        license = "GPL";
+       mainProgram = "txt2rtf";
      }) {};
 
   "txtblk" = callPackage
@@ -284436,7 +287340,7 @@ self: {
        executableHaskellDepends = [ base diagrams-lib text ];
        description = "Typed and composable spreadsheets";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ Gabriel439 ];
+       maintainers = [ lib.maintainers.Gabriel439 ];
      }) {};
 
   "typed-streams" = callPackage
@@ -284515,6 +287419,7 @@ self: {
        description = "Language-independent type-safe communication";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "twirec";
        broken = true;
      }) {};
 
@@ -284700,6 +287605,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "Small script for inferring types";
        license = lib.licenses.bsd3;
+       mainProgram = "typeof";
      }) {};
 
   "typeparams" = callPackage
@@ -284809,6 +287715,7 @@ self: {
        description = "A documentation generator for TypeScript Definition files";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "typescript-docs";
      }) {};
 
   "typical" = callPackage
@@ -284847,6 +287754,7 @@ self: {
        description = "Just let me draw nice text already";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "typograffiti-exe";
        broken = true;
      }) {};
 
@@ -284999,7 +287907,7 @@ self: {
        preConfigure = "export TZDIR=${pkgs.tzdata}/share/zoneinfo";
        description = "Efficient time zone handling";
        license = lib.licenses.asl20;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "tzdata" = callPackage
@@ -285058,6 +287966,7 @@ self: {
        description = "A simplistic dependently-typed language with parametricity";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "uAgda";
        broken = true;
      }) {};
 
@@ -285106,6 +288015,7 @@ self: {
        ];
        description = "Userspace Advanced Configuration and Power Interface event daemon";
        license = lib.licenses.bsd3;
+       mainProgram = "uacpid";
      }) {};
 
   "uber" = callPackage
@@ -285295,9 +288205,7 @@ self: {
        libraryPkgconfigDepends = [ systemd ];
        description = "libudev bindings";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) systemd;};
 
   "udp-conduit" = callPackage
@@ -285417,6 +288325,7 @@ self: {
        description = "hex dumper for UTF-8 text";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "uhexdump";
        broken = true;
      }) {};
 
@@ -285443,6 +288352,7 @@ self: {
        description = "Minimal HTTP client library optimized for benchmarking";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "uhttpc-bench";
        broken = true;
      }) {};
 
@@ -285458,6 +288368,7 @@ self: {
        description = "A framework for friendly commandline programs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ui-cmd-hello";
        broken = true;
      }) {};
 
@@ -285554,6 +288465,7 @@ self: {
        description = "Implementation of ULID - Universally Unique Lexicographically Sortable Identifier";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ulid-exe";
        broken = true;
      }) {};
 
@@ -285572,6 +288484,7 @@ self: {
        ];
        description = "Universal un-archiver utility";
        license = lib.licenses.bsd3;
+       mainProgram = "una";
      }) {};
 
   "unagi-bloomfilter" = callPackage
@@ -285807,6 +288720,7 @@ self: {
        description = "A library for reference cells backed by unboxed-vectors";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -285851,6 +288765,7 @@ self: {
        description = "Secure and resilient remote file storage utility";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "unbreak";
        broken = true;
      }) {};
 
@@ -285866,6 +288781,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Customize uncaught exception handling";
        license = lib.licenses.mpl20;
+       mainProgram = "uncaught-exception-demo";
      }) {};
 
   "uncertain" = callPackage
@@ -286340,6 +289256,7 @@ self: {
        testHaskellDepends = [ base text ];
        description = "Make writing in unicode easy";
        license = lib.licenses.bsd3;
+       mainProgram = "unicoder";
      }) {};
 
   "unidecode" = callPackage
@@ -286648,6 +289565,7 @@ self: {
        ];
        description = "uniq-deep";
        license = lib.licenses.mit;
+       mainProgram = "uniq-deep";
      }) {};
 
   "unique" = callPackage
@@ -286996,6 +289914,7 @@ self: {
          semigroups split text
        ];
        license = lib.licenses.bsd3;
+       mainProgram = "unity-testresult-parser";
      }) {};
 
   "unitym" = callPackage
@@ -287474,6 +290393,7 @@ self: {
        executableHaskellDepends = [ base unix ];
        description = "Unlambda interpreter";
        license = "GPL";
+       mainProgram = "unlambda";
      }) {};
 
   "unlift" = callPackage
@@ -287587,6 +290507,7 @@ self: {
        description = "Fast and robust message queues for concurrent processes";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "unliftio-messagebox-memleak-test";
        broken = true;
      }) {};
 
@@ -287658,6 +290579,7 @@ self: {
        executableHaskellDepends = [ base directory text ];
        description = "Tool to convert literate code between styles or to code";
        license = lib.licenses.bsd3;
+       mainProgram = "unlit";
      }) {};
 
   "unm-hip" = callPackage
@@ -287688,6 +290610,7 @@ self: {
        executableHaskellDepends = [ base storable-endian utility-ht ];
        description = "Extract useful information from Amiga MED files";
        license = lib.licenses.gpl3Only;
+       mainProgram = "unmed2";
      }) {};
 
   "unordered-containers" = callPackage
@@ -287823,6 +290746,7 @@ self: {
        doHaddock = false;
        description = "Unpacked containers via backpack";
        license = lib.licenses.bsd2;
+       mainProgram = "unpacked-set-example";
      }) {};
 
   "unpacked-either" = callPackage
@@ -288026,6 +290950,7 @@ self: {
        description = "Solve Boggle-like word games";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "unscramble";
      }) {};
 
   "unsequential" = callPackage
@@ -288059,6 +290984,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "Utility construction of the graph depending unusable packages";
        license = lib.licenses.bsd3;
+       mainProgram = "unusablepkg";
      }) {};
 
   "unused" = callPackage
@@ -288088,6 +291014,7 @@ self: {
        description = "A command line tool to identify unused code";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "unused";
        broken = true;
      }) {};
 
@@ -288138,6 +291065,7 @@ self: {
        description = "Command-line tool to generate paths for moving upward in a file system";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "up";
      }) {};
 
   "up-grade" = callPackage
@@ -288151,6 +291079,7 @@ self: {
        executableHaskellDepends = [ base ports-tools process ];
        description = "Software management tool";
        license = "unknown";
+       mainProgram = "up";
      }) {};
 
   "update-monad" = callPackage
@@ -288191,7 +291120,10 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "A program to update fetchgit values in Nix expressions";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ expipiplus1 sorki ];
+       mainProgram = "update-nix-fetchgit";
+       maintainers = [
+         lib.maintainers.expipiplus1 lib.maintainers.sorki
+       ];
      }) {};
 
   "update-repos" = callPackage
@@ -288214,6 +291146,7 @@ self: {
        testHaskellDepends = [ base hspec QuickCheck ];
        description = "Update all your git repositories with just one command";
        license = lib.licenses.asl20;
+       mainProgram = "update-repos";
      }) {};
 
   "uploadcare" = callPackage
@@ -288329,6 +291262,7 @@ self: {
        description = "Minimalistic CLI RSS reader";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ureader";
      }) {};
 
   "urembed" = callPackage
@@ -288350,6 +291284,7 @@ self: {
        description = "Ur/Web static content generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "urembed";
      }) {};
 
   "uri" = callPackage
@@ -288529,6 +291464,7 @@ self: {
        description = "URI template library for Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "main";
        broken = true;
      }) {};
 
@@ -288663,6 +291599,7 @@ self: {
        description = "Parallel link checker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "urlcheck";
        broken = true;
      }) {};
 
@@ -288678,6 +291615,7 @@ self: {
        description = "Decode percent-encoded strings";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "urldecode";
        broken = true;
      }) {};
 
@@ -288777,6 +291715,7 @@ self: {
        description = "XML parser-printer supporting Ur/Web syntax extensions";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "urxml";
        broken = true;
      }) {};
 
@@ -288905,6 +291844,7 @@ self: {
        description = "A collection of user agents";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "random-user-agent";
        broken = true;
      }) {};
 
@@ -289027,7 +291967,7 @@ self: {
        description = "A pragmatic time and date library";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
        broken = true;
      }) {};
 
@@ -289103,6 +292043,7 @@ self: {
        description = "Variants of Prelude and System.IO with UTF8 text I/O operations";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "utf8-test";
        broken = true;
      }) {};
 
@@ -289391,6 +292332,7 @@ self: {
        executableHaskellDepends = [ base uuagc-cabal ];
        description = "Attribute Grammar System of Universiteit Utrecht";
        license = lib.licenses.bsd3;
+       mainProgram = "uuagc";
      }) {};
 
   "uuagc-bootstrap" = callPackage
@@ -289414,6 +292356,7 @@ self: {
        description = "Attribute Grammar System of Universiteit Utrecht";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "uuagc-bootstrap";
        broken = true;
      }) {};
 
@@ -289458,6 +292401,7 @@ self: {
        executableHaskellDepends = [ base process ];
        description = "A debugger for the UUAG system";
        license = "unknown";
+       mainProgram = "uuagd";
      }) {};
 
   "uuid" = callPackage
@@ -289625,7 +292569,7 @@ self: {
        testHaskellDepends = [ base Cabal HUnit text ];
        description = "Tweak .cabal files";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ berberman ];
+       maintainers = [ lib.maintainers.berberman ];
      }) {};
 
   "uvector" = callPackage
@@ -289730,6 +292674,7 @@ self: {
        description = "the cabal companion";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vabal";
      }) {};
 
   "vabal-lib" = callPackage
@@ -289811,6 +292756,7 @@ self: {
        description = "Visualize live Haskell data structures using vacuum, graphviz and OpenGL";
        license = lib.licenses.publicDomain;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vacuum-opengl-server";
      }) {};
 
   "vacuum-ubigraph" = callPackage
@@ -290274,6 +293220,7 @@ self: {
        description = "Analyze and visualize expression trees";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vampire";
        broken = true;
      }) {};
 
@@ -290460,6 +293407,7 @@ self: {
        ];
        description = "FRP through value streams and monadic splines";
        license = lib.licenses.mit;
+       mainProgram = "varying-example";
      }) {};
 
   "vault" = callPackage
@@ -290619,6 +293567,7 @@ self: {
        description = "Recursively check that a directory is under version control";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vcatt";
        broken = true;
      }) {};
 
@@ -290674,6 +293623,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Library for handling files ignored by VCS systems";
        license = lib.licenses.bsd3;
+       mainProgram = "ignore";
      }) {};
 
   "vcs-revision" = callPackage
@@ -290744,6 +293694,7 @@ self: {
        description = "Wrapper for source code management systems";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vcswrapper";
        broken = true;
      }) {};
 
@@ -291274,7 +294225,7 @@ self: {
        ];
        description = "Size tagged vectors";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {};
 
   "vector-space" = callPackage
@@ -291450,6 +294401,7 @@ self: {
        ];
        description = "Easily view Vega or Vega-Lite visualizations";
        license = lib.licenses.bsd3;
+       mainProgram = "vegaview";
      }) {};
 
   "velma" = callPackage
@@ -291470,6 +294422,7 @@ self: {
        description = "Automatically add files to exposed-modules and other-modules";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "velma";
        broken = true;
      }) {};
 
@@ -291498,6 +294451,7 @@ self: {
        description = "ASCII platform-adventure game";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "venzone";
      }) {};
 
   "verbalexpressions" = callPackage
@@ -291544,6 +294498,7 @@ self: {
        description = "Validation framework";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tutorial";
        broken = true;
      }) {};
 
@@ -291581,10 +294536,7 @@ self: {
        ];
        description = "An intermediate language for Hoare logic style verification";
        license = lib.licenses.asl20;
-       platforms = [
-         "aarch64-darwin" "armv7l-linux" "i686-linux" "x86_64-darwin"
-         "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" ];
      }) {};
 
   "verify" = callPackage
@@ -291608,6 +294560,7 @@ self: {
        description = "A new Haskeleton package";
        license = lib.licenses.isc;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "verify";
        broken = true;
      }) {};
 
@@ -291660,6 +294613,7 @@ self: {
        description = "Random verilog generation and simulator testing";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "verismith";
        broken = true;
      }) {};
 
@@ -291857,6 +294811,7 @@ self: {
        description = "VFR waypoints, as published in the AIP (ERSA)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vfr-waypoints";
      }) {};
 
   "vgrep" = callPackage
@@ -291890,6 +294845,7 @@ self: {
        ];
        description = "A pager for grep";
        license = lib.licenses.bsd3;
+       mainProgram = "vgrep";
      }) {};
 
   "vhd" = callPackage
@@ -291966,6 +294922,7 @@ self: {
        description = "Text-based interactive GHC .prof viewer";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "viewprof";
      }) {};
 
   "views" = callPackage
@@ -292047,6 +295004,7 @@ self: {
        description = "Frontend for video metadata tagging tools";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vimeta";
      }) {};
 
   "vimus" = callPackage
@@ -292077,6 +295035,7 @@ self: {
        description = "An MPD client with vim-like key bindings";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vimus";
        broken = true;
      }) {inherit (pkgs) ncurses;};
 
@@ -292099,6 +295058,7 @@ self: {
        description = "Interpreter for microcomputer-era BASIC";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vintbas";
        broken = true;
      }) {};
 
@@ -292314,6 +295274,7 @@ self: {
        description = "Virtual Haskell Environment builder";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "virthualenv";
        broken = true;
      }) {};
 
@@ -292350,6 +295311,7 @@ self: {
        description = "An XMMS2 client";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vision";
      }) {};
 
   "visual-graphrewrite" = callPackage
@@ -292378,6 +295340,7 @@ self: {
        description = "Visualize the graph-rewrite steps of a Haskell program";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "visual-graphrewrite";
      }) {};
 
   "visual-prof" = callPackage
@@ -292397,6 +295360,7 @@ self: {
        description = "Create a visual profile of a program's source code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "visual-prof";
        broken = true;
      }) {};
 
@@ -292419,6 +295383,7 @@ self: {
        ];
        description = "Visualize CBN reduction";
        license = lib.licenses.bsd3;
+       mainProgram = "visualize-cbn";
      }) {};
 
   "vitrea" = callPackage
@@ -292516,6 +295481,7 @@ self: {
        executableHaskellDepends = [ base bytestring process unix ];
        description = "Pseudo terminal interaction with subprocesses";
        license = lib.licenses.bsd3;
+       mainProgram = "ptywrap";
      }) {};
 
   "vocabulary-kadma" = callPackage
@@ -292629,6 +295595,7 @@ self: {
        description = "Upload audio files to voicebase to get a transcription";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "voicebase";
      }) {};
 
   "void" = callPackage
@@ -292738,9 +295705,8 @@ self: {
        executableSystemDepends = [ quat vrpn ];
        description = "Bindings to VRPN";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "test-vrpn";
      }) {quat = null; inherit (pkgs) vrpn;};
 
   "vt-utils" = callPackage
@@ -292914,6 +295880,7 @@ self: {
        description = "A lib for displaying a menu and getting a selection using VTY";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vty-menu";
        broken = true;
      }) {};
 
@@ -292937,6 +295904,7 @@ self: {
        description = "An interactive terminal user interface library for Vty";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vty-ui-tests";
        broken = true;
      }) {};
 
@@ -292969,8 +295937,10 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "Bindings to the Vulkan graphics API";
        license = lib.licenses.bsd3;
-       platforms = [ "aarch64-linux" "x86_64-linux" ];
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       badPlatforms = [
+         "i686-linux" "x86_64-darwin" "aarch64-darwin" "armv7l-linux"
+       ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {vulkan = null;};
 
   "vulkan-api" = callPackage
@@ -293003,10 +295973,8 @@ self: {
        testHaskellDepends = [ base doctest ];
        description = "Utils for the vulkan package";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
-       maintainers = with lib.maintainers; [ expipiplus1 ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       maintainers = [ lib.maintainers.expipiplus1 ];
      }) {};
 
   "waargonaut" = callPackage
@@ -293153,6 +296121,7 @@ self: {
        ];
        description = "Rewrite based on Accept-Language header";
        license = lib.licenses.bsd3;
+       mainProgram = "wai-accept-language-exe";
      }) {};
 
   "wai-app-file-cgi" = callPackage
@@ -293213,6 +296182,7 @@ self: {
        ];
        description = "WAI application for static serving";
        license = lib.licenses.mit;
+       mainProgram = "warp";
      }) {};
 
   "wai-cli" = callPackage
@@ -293315,6 +296285,7 @@ self: {
        description = "A web server for the development of WAI compliant web applications";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wai-devel";
      }) {};
 
   "wai-digestive-functors" = callPackage
@@ -293436,6 +296407,7 @@ self: {
        executableHaskellDepends = [ base wai warp ];
        description = "Feature flag support for WAI applications";
        license = lib.licenses.bsd3;
+       mainProgram = "example-app";
      }) {};
 
   "wai-feature-flags_0_1_0_4" = callPackage
@@ -293456,6 +296428,7 @@ self: {
        description = "Feature flag support for WAI applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-app";
      }) {};
 
   "wai-frontend-monadcgi" = callPackage
@@ -293714,6 +296687,7 @@ self: {
        description = "Haskell Webapps on AWS Lambda";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wai-lambda";
        broken = true;
      }) {};
 
@@ -293807,6 +296781,7 @@ self: {
        description = "Buffer requets before logging them";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -293855,6 +296830,7 @@ self: {
        ];
        description = "Compiling and serving assets";
        license = lib.licenses.bsd3;
+       mainProgram = "wai-make-assets";
      }) {};
 
   "wai-middleware-auth" = callPackage
@@ -293893,6 +296869,7 @@ self: {
        description = "Authentication middleware that secures WAI application";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wai-auth";
        broken = true;
      }) {};
 
@@ -293937,6 +296914,7 @@ self: {
        description = "WAI middleware for brotli compression";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wai-middleware-brotli-server";
      }) {};
 
   "wai-middleware-cache" = callPackage
@@ -294149,6 +297127,7 @@ self: {
        description = "Middleware and utilities for using Atlassian Crowd authentication";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wai-crowd";
        broken = true;
      }) {};
 
@@ -294804,6 +297783,7 @@ self: {
        ];
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "waicookie-genkey";
        broken = true;
      }) {};
 
@@ -294928,6 +297908,7 @@ self: {
        description = "Simple Redis backed wai-session backend";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wai-session-redis-example-exe";
        broken = true;
      }) {};
 
@@ -295096,6 +298077,7 @@ self: {
        ];
        description = "Provide a bridge between WAI and the websockets package";
        license = lib.licenses.mit;
+       mainProgram = "wai-websockets-example";
      }) {};
 
   "wait-handle" = callPackage
@@ -295246,6 +298228,7 @@ self: {
        ];
        description = "A parser for the Web Archive (WARC) format";
        license = lib.licenses.bsd3;
+       mainProgram = "warc-export";
      }) {};
 
   "warp" = callPackage
@@ -295297,6 +298280,7 @@ self: {
        description = "Dynamic configurable warp HTTP server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "warpd";
        broken = true;
      }) {};
 
@@ -295351,6 +298335,7 @@ self: {
        description = "Static file server based on Warp and wai-app-static (deprecated)";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "warp";
        broken = true;
      }) {};
 
@@ -295501,6 +298486,7 @@ self: {
        description = "File change watching utility";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "watchit";
        broken = true;
      }) {};
 
@@ -295515,6 +298501,7 @@ self: {
        executableHaskellDepends = [ base directory filepath process ];
        description = "Command-line tool for converting audio files and filling in ID3 tags";
        license = lib.licenses.bsd3;
+       mainProgram = "wavconvert";
      }) {};
 
   "wave" = callPackage
@@ -295870,6 +298857,7 @@ self: {
        description = "representations of a web page";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "web-rep-example";
        broken = true;
      }) {};
 
@@ -296355,6 +299343,7 @@ self: {
        description = "Turn an optparse-applicative program into a CGI program!";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "testcloud";
        broken = true;
      }) {};
 
@@ -296562,6 +299551,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "A Haskell bindings for Webex Teams API";
        license = lib.licenses.mit;
+       mainProgram = "webex-teams-api-exe";
      }) {};
 
   "webex-teams-conduit" = callPackage
@@ -296588,6 +299578,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        description = "Conduit wrapper of Webex Teams List API";
        license = lib.licenses.mit;
+       mainProgram = "webex-teams-conduit-exe";
      }) {};
 
   "webex-teams-pipes" = callPackage
@@ -296615,6 +299606,7 @@ self: {
        description = "Pipes wrapper of Webex Teams List API";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "webex-teams-pipes-exe";
        broken = true;
      }) {};
 
@@ -296800,7 +299792,8 @@ self: {
        ];
        description = "webfont generator";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ erictapen ];
+       mainProgram = "webify";
+       maintainers = [ lib.maintainers.erictapen ];
      }) {};
 
   "webkit" = callPackage
@@ -296849,9 +299842,7 @@ self: {
        libraryPkgconfigDepends = [ webkitgtk ];
        description = "JavaScriptCore FFI from webkitgtk";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) webkitgtk;};
 
   "webkitgtk3" = callPackage
@@ -296991,6 +299982,7 @@ self: {
        description = "Show programming language printed values in a web UI";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "webshow";
        broken = true;
      }) {};
 
@@ -297006,6 +299998,7 @@ self: {
        description = "Transforms URLs to PNGs";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "websnap";
      }) {};
 
   "websockets" = callPackage
@@ -297156,6 +300149,7 @@ self: {
        executableHaskellDepends = [ base ];
        description = "a wedding announcement";
        license = lib.licenses.publicDomain;
+       mainProgram = "wedding-announcement";
      }) {};
 
   "wedged" = callPackage
@@ -297175,6 +300169,7 @@ self: {
        description = "Wedged postcard generator";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wedged";
        broken = true;
      }) {};
 
@@ -297201,7 +300196,8 @@ self: {
        description = "Detect dead code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "weeder";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "weeder_2_3_1" = callPackage
@@ -297227,7 +300223,8 @@ self: {
        description = "Detect dead code";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "weeder";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "weeder" = callPackage
@@ -297252,7 +300249,8 @@ self: {
        ];
        description = "Detect dead code";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ maralorn ];
+       mainProgram = "weeder";
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "weekdaze" = callPackage
@@ -297283,6 +300281,7 @@ self: {
        description = "A school-timetable problem-solver";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "weekdaze";
        broken = true;
      }) {};
 
@@ -297378,6 +300377,7 @@ self: {
        ];
        description = "Pretty-printing of codebases";
        license = lib.licenses.bsd3;
+       mainProgram = "wembley";
      }) {};
 
   "werewolf" = callPackage
@@ -297403,6 +300403,7 @@ self: {
        description = "A game engine for playing werewolf within an arbitrary chat client";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "werewolf";
        broken = true;
      }) {};
 
@@ -297424,6 +300425,7 @@ self: {
        description = "A chat interface for playing werewolf in Slack";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "werewolf-slack";
      }) {};
 
   "wgpu-hs" = callPackage
@@ -297508,6 +300510,7 @@ self: {
        description = "Solver-agnostic symbolic values support for issuing queries";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "quickstart";
      }) {};
 
   "wheb-mongo" = callPackage
@@ -297587,6 +300590,7 @@ self: {
        description = "A Haskell window manager";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "whim";
        broken = true;
      }) {};
 
@@ -297616,6 +300620,7 @@ self: {
        description = "Whitespace, an esoteric programming language";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wspace";
      }) {};
 
   "whois" = callPackage
@@ -297767,6 +300772,7 @@ self: {
        description = "Wikipedia EPUB E-Book construction from Firefox history";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wiki4e-mkepub-subtree";
      }) {};
 
   "wild-bind" = callPackage
@@ -297891,6 +300897,7 @@ self: {
        executableHaskellDepends = [ base process split ];
        description = "Work with multiple Haskell Platform versions on Windows";
        license = lib.licenses.bsd3;
+       mainProgram = "use-hppath";
      }) {};
 
   "windns" = callPackage
@@ -297977,6 +300984,7 @@ self: {
        description = "A compact, well-typed seralisation format for Haskell values";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "winery";
        broken = true;
      }) {};
 
@@ -298108,7 +301116,7 @@ self: {
        ];
        description = "Convert values from one type into another";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ maralorn ];
+       maintainers = [ lib.maintainers.maralorn ];
      }) {};
 
   "with-index" = callPackage
@@ -298156,6 +301164,7 @@ self: {
        testToolDepends = [ tasty-discover ];
        description = "Get your IO right on the first try";
        license = lib.licenses.mpl20;
+       mainProgram = "utf8-troubleshoot";
      }) {};
 
   "withdependencies" = callPackage
@@ -298248,6 +301257,7 @@ self: {
        description = "A network server to show bottlenecks of GHC";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "witty";
        broken = true;
      }) {};
 
@@ -298488,6 +301498,7 @@ self: {
        description = "A simple and highly performant HTTP file server";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wobsurv";
      }) {};
 
   "woe" = callPackage
@@ -298517,6 +301528,7 @@ self: {
        description = "Web Open Font Format (WOFF) unpacker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "woffex";
        broken = true;
      }) {};
 
@@ -298533,6 +301545,7 @@ self: {
        description = "Send a Wake on LAN Magic Packet";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wol";
        broken = true;
      }) {};
 
@@ -298744,6 +301757,7 @@ self: {
        benchmarkHaskellDepends = [ base criterion pandoc text ];
        description = "Get word counts and distributions";
        license = lib.licenses.bsd3;
+       mainProgram = "wrd";
      }) {};
 
   "wordcloud" = callPackage
@@ -298797,6 +301811,7 @@ self: {
        ];
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wordify-exe";
        broken = true;
      }) {};
 
@@ -298816,6 +301831,7 @@ self: {
        ];
        description = "Command-line tool to get random words";
        license = lib.licenses.asl20;
+       mainProgram = "wordlist";
      }) {};
 
   "wordn" = callPackage
@@ -298861,6 +301877,7 @@ self: {
        description = "Dictionary-based password generator";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wordpass";
        broken = true;
      }) {};
 
@@ -298907,6 +301924,7 @@ self: {
        description = "A word search solver library and executable";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wordsearch";
        broken = true;
      }) {};
 
@@ -298926,6 +301944,7 @@ self: {
        ];
        description = "Compare two files as sets of N-tuples of words";
        license = lib.licenses.bsd3;
+       mainProgram = "wordsetdiff";
      }) {};
 
   "work-time" = callPackage
@@ -298941,6 +301960,7 @@ self: {
        description = "A library for parsing a chat-based work hour reporting scheme";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "work-time";
        broken = true;
      }) {};
 
@@ -298979,6 +301999,7 @@ self: {
        description = "Utilities (e.g. Googling the clipboard contents) for the `workflow` pacakge";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-workflow-extra";
      }) {};
 
   "workflow-osx" = callPackage
@@ -298999,6 +302020,7 @@ self: {
        description = "a \"Desktop Workflow\" monad with Objective-C bindings";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example";
        broken = true;
      }) {};
 
@@ -299023,6 +302045,7 @@ self: {
        description = "manipulate `workflow-types:Workflow`'s";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-workflow-pure";
      }) {};
 
   "workflow-types" = callPackage
@@ -299042,6 +302065,7 @@ self: {
        description = "Automate keyboard\\/mouse\\/clipboard\\/application interaction";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "example-workflow-types";
      }) {};
 
   "workflow-windows" = callPackage
@@ -299057,6 +302081,7 @@ self: {
        description = "Automate keyboard/mouse/clipboard/application interaction";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "workflow-windows-example";
        broken = true;
      }) {};
 
@@ -299106,6 +302131,7 @@ self: {
        description = "Subscribe to a wiki's RSS feed and archive external links";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wp-archivebot";
        broken = true;
      }) {};
 
@@ -299215,6 +302241,7 @@ self: {
        description = "An HTTP Performance Benchmarker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wreck";
      }) {};
 
   "wrecker-ui" = callPackage
@@ -299248,6 +302275,7 @@ self: {
        description = "A web interface for Wrecker, the HTTP Performance Benchmarker";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wrecker-ui";
      }) {};
 
   "wreq" = callPackage
@@ -299586,6 +302614,7 @@ self: {
        description = "A simple CLI utility for interacting with a websocket";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "ws";
      }) {};
 
   "ws-chans" = callPackage
@@ -299647,6 +302676,7 @@ self: {
        description = "A small tool to list, add and remove webseeds from a torrent file";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wsedit";
        broken = true;
      }) {};
 
@@ -299669,6 +302699,7 @@ self: {
        ];
        description = "Terminal emulator over websockets";
        license = lib.licenses.bsd3;
+       mainProgram = "wshterm";
      }) {};
 
   "wsjtx-udp" = callPackage
@@ -299688,6 +302719,7 @@ self: {
        description = "WSJT-X UDP protocol";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wsjtx-dump-udp";
        broken = true;
      }) {};
 
@@ -299737,7 +302769,8 @@ self: {
        ];
        description = "Tunneling program over websocket protocol";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ gebner ];
+       mainProgram = "wstunnel";
+       maintainers = [ lib.maintainers.gebner ];
      }) {};
 
   "wtk" = callPackage
@@ -299783,6 +302816,7 @@ self: {
        description = "Unimportant Unix adminstration tool";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "pao";
      }) {};
 
   "wuerfelschlange" = callPackage
@@ -299922,6 +302956,7 @@ self: {
        description = "Try to avoid the asteroids with your space ship";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wxAsteroids";
      }) {};
 
   "wxFruit" = callPackage
@@ -299937,6 +302972,7 @@ self: {
        description = "An implementation of Fruit using wxHaskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "paddle";
      }) {};
 
   "wxSimpleCanvas" = callPackage
@@ -300012,6 +303048,7 @@ self: {
        description = "helper tool for building wxHaskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wxdirect";
        broken = true;
      }) {};
 
@@ -300028,6 +303065,7 @@ self: {
        description = "An example of how to implement a basic notepad with wxHaskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wxhnotepad";
      }) {};
 
   "wxturtle" = callPackage
@@ -300044,6 +303082,7 @@ self: {
        description = "turtle like LOGO with wxHaskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "testTurtle";
      }) {};
 
   "wybor" = callPackage
@@ -300084,6 +303123,7 @@ self: {
        description = "An autoresponder for Dragon Go Server";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "wyvern";
      }) {};
 
   "x-dsp" = callPackage
@@ -300202,6 +303242,7 @@ self: {
        ];
        description = "Utility for X509 certificate and chain";
        license = lib.licenses.bsd3;
+       mainProgram = "x509-util";
      }) {};
 
   "x509-validation" = callPackage
@@ -300258,9 +303299,7 @@ self: {
        ];
        description = "Haskell extended file attributes interface";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {inherit (pkgs) attr;};
 
   "xbattbar" = callPackage
@@ -300274,6 +303313,7 @@ self: {
        executableHaskellDepends = [ base old-time select X11 ];
        description = "Simple battery indicator";
        license = lib.licenses.mit;
+       mainProgram = "xbattbar";
      }) {};
 
   "xcb-types" = callPackage
@@ -300313,6 +303353,7 @@ self: {
        ];
        description = "A cffi-based python binding for X";
        license = "unknown";
+       mainProgram = "xcffibgen";
      }) {};
 
   "xchat-plugin" = callPackage
@@ -300331,6 +303372,7 @@ self: {
        description = "XChat";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "hsxchat";
        broken = true;
      }) {};
 
@@ -300375,6 +303417,7 @@ self: {
        description = "A wget-like utility for retrieving files from XDCC bots on IRC";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xdcc";
      }) {};
 
   "xdg-basedir" = callPackage
@@ -300436,6 +303479,7 @@ self: {
        ];
        description = "Parse Graphviz xdot files and interactively view them using GTK and Cairo";
        license = lib.licenses.bsd3;
+       mainProgram = "xdot-demo";
      }) {};
 
   "xeno" = callPackage
@@ -300526,9 +303570,8 @@ self: {
        executableSystemDepends = [ xgboost ];
        description = "XGBoost library for Haskell";
        license = lib.licenses.mit;
-       platforms = [
-         "aarch64-darwin" "i686-linux" "x86_64-darwin" "x86_64-linux"
-       ];
+       badPlatforms = [ "aarch64-linux" "armv7l-linux" ];
+       mainProgram = "xgb-agaricus";
      }) {inherit (pkgs) xgboost;};
 
   "xhaskell-library" = callPackage
@@ -300745,6 +303788,7 @@ self: {
        description = "Downloads the most recent xkcd comic";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xkcd";
        broken = true;
      }) {};
 
@@ -300785,6 +303829,7 @@ self: {
        description = "Parse Microsoft Excel xls files (BIFF/Excel 97-2004)";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xls2csv";
        broken = true;
      }) {};
 
@@ -300879,6 +303924,7 @@ self: {
        description = "Simple and incomplete Excel file templater";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "test";
        broken = true;
      }) {};
 
@@ -301348,6 +304394,7 @@ self: {
        description = "Pretty print XML";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xml-prettify";
        broken = true;
      }) {};
 
@@ -301372,6 +304419,7 @@ self: {
        benchmarkHaskellDepends = [ base gauge protolude ];
        description = "XML pretty printer";
        license = lib.licenses.gpl2Only;
+       mainProgram = "xml-prettify";
      }) {};
 
   "xml-push" = callPackage
@@ -301488,6 +304536,7 @@ self: {
        description = "Library and command line tool for converting XML files to json";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xml-to-json";
        broken = true;
      }) {};
 
@@ -301503,6 +304552,7 @@ self: {
        executableHaskellDepends = [ base directory process ];
        description = "Fast, light converter of xml to json capable of handling huge xml files";
        license = lib.licenses.mit;
+       mainProgram = "xml-to-json-fast";
      }) {};
 
   "xml-tydom-conduit" = callPackage
@@ -301608,6 +304658,7 @@ self: {
        description = "translate xml to json";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xml2json";
        broken = true;
      }) {};
 
@@ -301628,6 +304679,7 @@ self: {
        description = "Convert BLAST output in XML format to CSV or HTML";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xml2x";
      }) {};
 
   "xmlbf" = callPackage
@@ -301760,6 +304812,7 @@ self: {
        description = "Show tv channels in the terminal";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "tv";
      }) {};
 
   "xmms2-client" = callPackage
@@ -301834,9 +304887,8 @@ self: {
        benchmarkHaskellDepends = [ base gauge mtl time ];
        description = "A Minimalistic Text Based Status Bar";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
+       mainProgram = "xmobar";
      }) {inherit (pkgs.xorg) libXpm; inherit (pkgs.xorg) libXrandr; 
          inherit (pkgs.xorg) libXrender; inherit (pkgs) wirelesstools;};
 
@@ -301865,7 +304917,8 @@ self: {
        '';
        description = "A tiling window manager";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       mainProgram = "xmonad";
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "xmonad-bluetilebranch" = callPackage
@@ -301886,6 +304939,7 @@ self: {
        description = "A tiling window manager";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xmonad";
        broken = true;
      }) {};
 
@@ -301908,7 +304962,7 @@ self: {
        ];
        description = "Community-maintained extensions extensions for xmonad";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ peti ];
+       maintainers = [ lib.maintainers.peti ];
      }) {};
 
   "xmonad-contrib-bluetilebranch" = callPackage
@@ -301955,6 +305009,7 @@ self: {
        executableHaskellDepends = [ base dbus ];
        testHaskellDepends = [ base dbus ];
        license = lib.licenses.bsd3;
+       mainProgram = "xmonad-dbus";
      }) {};
 
   "xmonad-entryhelper" = callPackage
@@ -302012,9 +305067,7 @@ self: {
        ];
        description = "Third party extensions for xmonad with wacky dependencies";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "xmonad-screenshot" = callPackage
@@ -302094,9 +305147,7 @@ self: {
        ];
        description = "XMonad volume controls";
        license = lib.licenses.bsd3;
-       platforms = [
-         "aarch64-linux" "armv7l-linux" "i686-linux" "x86_64-linux"
-       ];
+       badPlatforms = [ "x86_64-darwin" "aarch64-darwin" ];
      }) {};
 
   "xmonad-wallpaper" = callPackage
@@ -302247,6 +305298,7 @@ self: {
        description = "convert utility for xoj files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xournal-convert";
      }) {};
 
   "xournal-parser" = callPackage
@@ -302320,6 +305372,7 @@ self: {
        ];
        description = "Command line tool to extract DSV data from HTML and XML with XPATH expressions";
        license = lib.licenses.bsd3;
+       mainProgram = "xpathdsv";
      }) {};
 
   "xrefcheck" = callPackage
@@ -302366,6 +305419,7 @@ self: {
        testToolDepends = [ hspec-discover ];
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "xrefcheck";
        broken = true;
      }) {};
 
@@ -302546,6 +305600,7 @@ self: {
        description = "#plaimi's all-encompassing bot";
        license = lib.licenses.agpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yolobot";
        broken = true;
      }) {};
 
@@ -302562,6 +305617,7 @@ self: {
        executableHaskellDepends = [ base word8 ];
        description = "Yet Another Brainfuck Interpreter";
        license = lib.licenses.mit;
+       mainProgram = "yabi";
      }) {};
 
   "yabi-muno" = callPackage
@@ -302581,6 +305637,7 @@ self: {
        description = "Yet Another Brainfuck Interpreter";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yabi";
        broken = true;
      }) {};
 
@@ -302976,6 +306033,7 @@ self: {
        description = "Yam Web";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yam-web";
      }) {};
 
   "yamemo" = callPackage
@@ -303267,6 +306325,7 @@ self: {
        ];
        description = "Generate OWL schema from YAML syntax, and an RDFa template";
        license = "LGPL";
+       mainProgram = "yaml2owl";
      }) {};
 
   "yamlkeysdiff" = callPackage
@@ -303285,6 +306344,7 @@ self: {
        description = "Compares the keys from two yaml files";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yamlkeysdiff";
        broken = true;
      }) {};
 
@@ -303338,6 +306398,7 @@ self: {
        description = "Connects GLFW-b (GLFW 3+) with the Yampa FRP library";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yampa-glfw-example";
        broken = true;
      }) {};
 
@@ -303427,6 +306488,7 @@ self: {
        description = "2048 game clone using Yampa/Gloss";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yampa2048";
        broken = true;
      }) {};
 
@@ -303520,7 +306582,7 @@ self: {
        ];
        description = "Represent and parse yarn.lock files";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "yarn2nix" = callPackage
@@ -303558,7 +306620,7 @@ self: {
        ];
        description = "Convert yarn.lock files to nix expressions";
        license = lib.licenses.mit;
-       maintainers = with lib.maintainers; [ sternenseemann ];
+       maintainers = [ lib.maintainers.sternenseemann ];
      }) {};
 
   "yarr" = callPackage
@@ -303652,6 +306714,7 @@ self: {
        description = "yet another visual editor";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yavie";
      }) {};
 
   "yaya" = callPackage
@@ -303850,6 +306913,7 @@ self: {
        testHaskellDepends = [ base containers hspec QuickCheck ];
        description = "Extended yes command to reproduce phrases in Yes! Precure 5";
        license = lib.licenses.mit;
+       mainProgram = "yes";
      }) {};
 
   "yeshql" = callPackage
@@ -304442,6 +307506,7 @@ self: {
        description = "A yesod-auth plugin for multi-tenant SSO via OpenID Connect";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yesod-auth-oidc-test";
        broken = true;
      }) {broch = null;};
 
@@ -304501,6 +307566,7 @@ self: {
        description = "Traditional email/pass auth for Yesod";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yesod-auth-simple-test";
      }) {};
 
   "yesod-auth-smbclient" = callPackage
@@ -304558,6 +307624,7 @@ self: {
        testHaskellDepends = [ base ];
        description = "Auto-reload a yesod app during development";
        license = lib.licenses.mit;
+       mainProgram = "yesod-autoreload-example";
      }) {};
 
   "yesod-bin" = callPackage
@@ -304585,6 +307652,7 @@ self: {
        ];
        description = "The yesod helper executable";
        license = lib.licenses.mit;
+       mainProgram = "yesod";
      }) {};
 
   "yesod-bootstrap" = callPackage
@@ -304685,6 +307753,7 @@ self: {
        description = "Continuations for Yesod";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yesodContinuationsTest";
      }) {};
 
   "yesod-core" = callPackage
@@ -304849,6 +307918,7 @@ self: {
        description = "DSL for generating Yesod subsite to manage an RDBMS;";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yesod-dsl";
        broken = true;
      }) {};
 
@@ -304924,6 +307994,7 @@ self: {
        description = "Fast live-reloading for yesod applications";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yesod-fast-devel";
        broken = true;
      }) {};
 
@@ -305529,6 +308600,7 @@ self: {
        description = "Yet another getMessage/setMessage using pnotify jquery plugins";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "sample";
        broken = true;
      }) {};
 
@@ -305611,6 +308683,7 @@ self: {
        description = "The raml helper executable";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yesod-raml-bin";
      }) {};
 
   "yesod-raml-docs" = callPackage
@@ -306070,6 +309143,7 @@ self: {
        description = "Simple CRUD classes for easy view creation for Yesod";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "vend-test-user";
        broken = true;
      }) {};
 
@@ -306149,6 +309223,7 @@ self: {
        ];
        description = "Yet Another Logger";
        license = lib.licenses.asl20;
+       mainProgram = "example";
      }) {};
 
   "yggdrasil" = callPackage
@@ -306199,6 +309274,7 @@ self: {
        description = "Calculation of YH sequence system";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yhseq";
        broken = true;
      }) {};
 
@@ -306223,6 +309299,7 @@ self: {
        description = "Yi editor";
        license = lib.licenses.gpl2Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yi";
      }) {};
 
   "yi-contrib" = callPackage
@@ -306692,6 +309769,7 @@ self: {
        ];
        testToolDepends = [ hspec-discover ];
        license = lib.licenses.gpl3Only;
+       mainProgram = "yiyd";
      }) {};
 
   "yjftp" = callPackage
@@ -306712,6 +309790,7 @@ self: {
        description = "CUI FTP client like 'ftp', 'ncftp'";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yjftp";
      }) {};
 
   "yjftp-libs" = callPackage
@@ -306726,6 +309805,7 @@ self: {
        description = "CUI FTP client like 'ftp', 'ncftp'";
        license = "GPL";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yjftp-ni";
      }) {};
 
   "yjsvg" = callPackage
@@ -306876,6 +309956,7 @@ self: {
        description = "A YQL engine to execute Open Data Tables";
        license = lib.licenses.bsd2;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yql";
      }) {};
 
   "yst" = callPackage
@@ -306899,6 +309980,7 @@ self: {
        description = "Builds a static website from templates and data in YAML or CSV files";
        license = lib.licenses.gpl2Plus;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yst";
        broken = true;
      }) {};
 
@@ -306958,6 +310040,7 @@ self: {
        description = "The launcher for Yu";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yu-launch";
      }) {};
 
   "yu-tool" = callPackage
@@ -306976,6 +310059,7 @@ self: {
        description = "Tool for Yu";
        license = lib.licenses.gpl3Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yu";
        broken = true;
      }) {};
 
@@ -307037,6 +310121,7 @@ self: {
        description = "A transcendental HTML parser gently wrapping the HXT library";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "yuuko";
      }) {};
 
   "yx" = callPackage
@@ -307188,6 +310273,7 @@ self: {
        description = "A tool for checking how much work is done on group projects";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zampolit";
        broken = true;
      }) {};
 
@@ -307260,6 +310346,7 @@ self: {
        ];
        description = "A standard compliant HTML parsing library";
        license = lib.licenses.mit;
+       mainProgram = "zenacy-html-exe";
      }) {};
 
   "zenacy-unicode" = callPackage
@@ -307344,6 +310431,7 @@ self: {
        description = "An automated proof system for Haskell programs";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zeno";
        broken = true;
      }) {};
 
@@ -307406,6 +310494,7 @@ self: {
        description = "Zephyr, tree-shaking for the PureScript language";
        license = lib.licenses.mpl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zephyr";
      }) {};
 
   "zephyr-copilot" = callPackage
@@ -307457,6 +310546,7 @@ self: {
        ];
        description = "Post to 0bin services";
        license = lib.licenses.mit;
+       mainProgram = "zerobin";
      }) {};
 
   "zeromq-haskell" = callPackage
@@ -307543,6 +310633,7 @@ self: {
        ];
        description = "Haskell implementation of the ZeroMQ clone pattern";
        license = lib.licenses.bsd3;
+       mainProgram = "zeromq4-clone-pattern-exe";
      }) {};
 
   "zeromq4-conduit" = callPackage
@@ -307607,6 +310698,7 @@ self: {
        ];
        description = "Haskell implementation of several ZeroMQ patterns";
        license = lib.licenses.bsd3;
+       mainProgram = "zeromq4-patterns-exe";
      }) {};
 
   "zeromq4-simple" = callPackage
@@ -307646,6 +310738,7 @@ self: {
        description = "ZeroTH - remove unnecessary TH dependencies";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zeroth";
      }) {};
 
   "zettelkast" = callPackage
@@ -307671,6 +310764,7 @@ self: {
        description = "Command-line utility for working with zettelkast files";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zettelkast";
        broken = true;
      }) {};
 
@@ -307912,6 +311006,7 @@ self: {
        ];
        description = "Operations on zip archives";
        license = lib.licenses.bsd3;
+       mainProgram = "haskell-zip-app";
      }) {};
 
   "zip-archive" = callPackage
@@ -308247,6 +311342,7 @@ self: {
        description = "Command-line tool for ZeroMQ";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zmcat";
      }) {};
 
   "zmidi-core" = callPackage
@@ -308295,6 +311391,7 @@ self: {
        description = "A socat-like tool for zeromq library";
        license = "unknown";
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zmqat";
        broken = true;
      }) {};
 
@@ -308328,6 +311425,7 @@ self: {
        description = "A rake/thor-like task runner written in Haskell";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zoom";
        broken = true;
      }) {};
 
@@ -308361,6 +311459,7 @@ self: {
        description = "A streamable, seekable, zoomable cache file format";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zoom-cache";
      }) {};
 
   "zoom-cache-pcm" = callPackage
@@ -308398,6 +311497,7 @@ self: {
        description = "Tools for generating zoom-cache-pcm files";
        license = lib.licenses.lgpl21Only;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zoom-cache-sndfile";
      }) {};
 
   "zoom-refs" = callPackage
@@ -308443,6 +311543,7 @@ self: {
        executableHaskellDepends = [ base monads-tf ];
        description = "Zot language";
        license = lib.licenses.bsd3;
+       mainProgram = "zot";
      }) {};
 
   "zre" = callPackage
@@ -308476,7 +311577,7 @@ self: {
        ];
        description = "ZRE protocol implementation";
        license = lib.licenses.bsd3;
-       maintainers = with lib.maintainers; [ sorki ];
+       maintainers = [ lib.maintainers.sorki ];
      }) {};
 
   "zsdd" = callPackage
@@ -308508,6 +311609,7 @@ self: {
        description = "Ascii bars representing battery status";
        license = lib.licenses.bsd3;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zsh-battery";
        broken = true;
      }) {};
 
@@ -308563,6 +311665,7 @@ self: {
        ];
        description = "Multi-file, colored, filtered log tailer";
        license = lib.licenses.bsd3;
+       mainProgram = "ztail";
      }) {};
 
   "ztar" = callPackage
@@ -308625,6 +311728,7 @@ self: {
        description = "A lisp processor, An inline-lisp, in Haskell";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "maru";
      }) {};
 
   "zuul" = callPackage
@@ -308649,6 +311753,7 @@ self: {
        description = "A zuul client library";
        license = lib.licenses.asl20;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zuul-cli";
        broken = true;
      }) {};
 
@@ -308717,6 +311822,7 @@ self: {
        description = "Password strength estimation based on zxcvbn";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zxcvbn-example";
        broken = true;
      }) {};
 
@@ -308761,6 +311867,7 @@ self: {
        description = "Haskell zyre bindings for reliable group messaging over local area networks";
        license = lib.licenses.mit;
        hydraPlatforms = lib.platforms.none;
+       mainProgram = "zyre-example-exe";
        broken = true;
      }) {inherit (pkgs) czmq; zyre = null;};
 
diff --git a/pkgs/development/haskell-modules/non-hackage-packages.nix b/pkgs/development/haskell-modules/non-hackage-packages.nix
index beb81a58d86..e3b21514831 100644
--- a/pkgs/development/haskell-modules/non-hackage-packages.nix
+++ b/pkgs/development/haskell-modules/non-hackage-packages.nix
@@ -13,7 +13,9 @@ self: super: {
 
   # Used by maintainers/scripts/regenerate-hackage-packages.sh, and generated
   # from the latest master instead of the current version on Hackage.
-  cabal2nix-unstable = self.callPackage ./cabal2nix-unstable.nix { };
+  cabal2nix-unstable = self.callPackage ./cabal2nix-unstable.nix {
+    distribution-nixpkgs = self.distribution-nixpkgs_1_7_0;
+  };
 
   # https://github.com/channable/vaultenv/issues/1
   vaultenv = self.callPackage ../tools/haskell/vaultenv { };