diff --git a/manifest.dhall b/manifest.dhall
index 9fe04c499ac4905cc5ceb19cf528ee1a49dcd805..b2c48b55b8c4fd930bed27aecab3185989d78d47 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -593,6 +593,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "text-display" "0.0.3.0"
     , callHackage "text-manipulate" "0.3.1.0"
     , callHackage "text-metrics" "0.3.2"
+    , callHackage "text-rope" "0.2"
     , callHackage "text-short" "0.1.5"
     , callHackage "text-zipper" "0.12"
     , callHackage "these" "1.1.1.1"
diff --git a/overlay.nix b/overlay.nix
index 2152f7bc57d03dd71c4a4942e7ccdfa43c46140b..888108238552477a4a4bb82c38e078d1a67e8241 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -817,6 +817,8 @@ final: prev: with pkgs.haskell.lib; {
 
   text-metrics = prev.callPackage (./pkgs/text-metrics.nix) { };
 
+  text-rope = prev.callPackage (./pkgs/text-rope.nix) { };
+
   text-short = prev.callPackage (./pkgs/text-short.nix) { };
 
   text-zipper = prev.callPackage (./pkgs/text-zipper.nix) { };
diff --git a/pkgs/text-rope.nix b/pkgs/text-rope.nix
new file mode 100644
index 0000000000000000000000000000000000000000..7222d3ca313907d7f949236e56e36ed9351f9c52
--- /dev/null
+++ b/pkgs/text-rope.nix
@@ -0,0 +1,33 @@
+{ mkDerivation
+, base
+, deepseq
+, lib
+, random
+, tasty
+, tasty-bench
+, tasty-quickcheck
+, text
+, vector
+}:
+mkDerivation {
+  pname = "text-rope";
+  version = "0.2";
+  sha256 = "b14422855e9cc375a31c22758454013ac629671331de6ccb77b496509bcae78b";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = true;
+  libraryHaskellDepends = [ base deepseq text vector ];
+  testHaskellDepends = [ base tasty tasty-quickcheck text ];
+  benchmarkHaskellDepends = [ base random tasty-bench text ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/Bodigrim/text-rope";
+  description = "Text lines and ropes";
+  license = lib.licenses.bsd3;
+  broken = false;
+}