diff --git a/manifest.dhall b/manifest.dhall
index 7d24208fd867ce05652c4a0c20188db1a7953f86..5cd2842b49d61e18bd141efa6c20435b6817aaeb 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -516,6 +516,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "test-framework-hunit" "0.3.0.2"
     , callHackage "test-framework-quickcheck2" "0.3.0.5"
     , callHackage "text-display" "0.0.3.0"
+    , callHackage "text-manipulate" "0.3.1.0"
     , callHackage "text-metrics" "0.3.2"
     , callHackage "text-short" "0.1.5"
     , callHackage "text-zipper" "0.12"
diff --git a/overlay.nix b/overlay.nix
index c4e4df969078b12a288a83c6e3c3578cd2305b1f..f3b6c4af2fcdaa630f39b4d79f55d3aaed5ae0b2 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -665,6 +665,8 @@ final: prev: with pkgs.haskell.lib; {
 
   text-display = prev.callPackage (./pkgs/text-display.nix) { };
 
+  text-manipulate = prev.callPackage (./pkgs/text-manipulate.nix) { };
+
   text-metrics = prev.callPackage (./pkgs/text-metrics.nix) { };
 
   text-short = prev.callPackage (./pkgs/text-short.nix) { };
diff --git a/pkgs/text-manipulate.nix b/pkgs/text-manipulate.nix
new file mode 100644
index 0000000000000000000000000000000000000000..e752b275612348bc67715b582e167177b769bfc8
--- /dev/null
+++ b/pkgs/text-manipulate.nix
@@ -0,0 +1,23 @@
+{ mkDerivation, base, criterion, lib, tasty, tasty-hunit, text }:
+mkDerivation {
+  pname = "text-manipulate";
+  version = "0.3.1.0";
+  sha256 = "9a67efef74bf8a0166436e11bc5b668c10a943c5454fdac3c8de366668a306bc";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base text ];
+  testHaskellDepends = [ base tasty tasty-hunit text ];
+  benchmarkHaskellDepends = [ base criterion text ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/brendanhay/text-manipulate";
+  description = "Case conversion, word boundary manipulation, and textual subjugation";
+  license = lib.licenses.mpl20;
+  broken = false;
+}