diff --git a/horizon.dhall b/horizon.dhall
index 7233eb067d526fb4cc9a4f3053333f95953320d4..9743ec5c1f03e94646db813b4e47a43fbf118921 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -584,6 +584,7 @@ let packages =
       , shh = H.callHackage "shh" "0.7.2.2"
       , should-not-typecheck = H.callHackage "should-not-typecheck" "2.1.0"
       , show-combinators = H.callHackage "show-combinators" "0.2.0.0"
+      , shower = H.callHackage "shower" "0.2.0.3"
       , singleton-bool = H.callHackage "singleton-bool" "0.1.7"
       , singletons = H.callHackage "singletons" "3.0.2"
       , size-based = H.callHackage "size-based" "0.1.3.2"
diff --git a/horizon.lock b/horizon.lock
index 507635cf516e0e6a7b06aefbe3e4f0d0cce3995d..84b487c7fffa4d915c6a05c451c1f51a99099650 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -1810,6 +1810,10 @@
   , mapValue =
       "8e145c0cbb0f42d24bed8dd507364fb9953ba9b08d3079f2dc3414aa4bbccf6d"
   }
+, { mapKey = "shower"
+  , mapValue =
+      "a889eae9c4c996b906dd93a67ff410b8c2839d5e03a1fbcc47f92b345ab05c10"
+  }
 , { mapKey = "singleton-bool"
   , mapValue =
       "b9e4406e098a6f6eee37200be9a20e4b8b7907af8f593960e1d8ad84b01efd18"
diff --git a/overlay.nix b/overlay.nix
index 594e9a8ab50fd25f2ba783bde63de02b1269c6dd..4b5e27804aac0ee3368a357b4df10e847e04dbc3 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -907,6 +907,8 @@ final: prev: with pkgs.haskell.lib; {
 
   show-combinators = final.callPackage (./pkgs/show-combinators.nix) { };
 
+  shower = final.callPackage (./pkgs/shower.nix) { };
+
   singleton-bool = final.callPackage (./pkgs/singleton-bool.nix) { };
 
   singletons = final.callPackage (./pkgs/singletons.nix) { };
diff --git a/pkgs/shower.nix b/pkgs/shower.nix
new file mode 100644
index 0000000000000000000000000000000000000000..84d975e0450772046accf8d35b63c8c171d313bc
--- /dev/null
+++ b/pkgs/shower.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, QuickCheck, aeson, base, containers, directory
+, filepath, lib, megaparsec, pretty, process, tasty, tasty-golden
+, tasty-quickcheck, temporary, text, unordered-containers
+, utf8-string, vector
+}:
+mkDerivation {
+  pname = "shower";
+  version = "0.2.0.3";
+  sha256 = "39e492fad7f6f6b08707866b5906d6b7d0431b013a3044aa0df296b72442af2f";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base megaparsec pretty ];
+  executableHaskellDepends = [ base ];
+  testHaskellDepends = [
+    aeson base containers directory filepath process QuickCheck tasty
+    tasty-golden tasty-quickcheck temporary text unordered-containers
+    utf8-string vector
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://monadfix.com/shower";
+  description = "Clean up the formatting of 'show' output";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file