diff --git a/manifest.dhall b/manifest.dhall
index 9870ff740b6447523da9a62bb27a74de9e2bef66..fad6ad3f13cbf14f26a7b5d8b8df6d6f1c731ca0 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -118,6 +118,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "conduit-extra" "1.3.6"
     , callHackage "config-ini" "0.2.5.0"
     , callHackage "constraints" "0.13.4"
+    , callHackage "cursor" "0.3.2.0"
     , callHackage "cryptonite" "0.30"
     , callHackage "cryptohash-sha1" "0.11.101.0"
     , callHackage "data-fix" "0.3.2"
diff --git a/overlay.nix b/overlay.nix
index efc62b82e103665d5ba3d4b91a3627a003d0da2b..2960b55e7b8ad68a3babf4e856fca24c7a355ab7 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -107,6 +107,8 @@ final: prev: with pkgs.haskell.lib; {
 
     cryptonite = prev.callPackage (./pkgs/cryptonite.nix) { };
 
+    cursor = prev.callPackage (./pkgs/cursor.nix) { };
+
     data-fix = prev.callPackage (./pkgs/data-fix.nix) { };
 
     dec = prev.callPackage (./pkgs/dec.nix) { };
diff --git a/pkgs/cursor.nix b/pkgs/cursor.nix
new file mode 100644
index 0000000000000000000000000000000000000000..f794cba041458c9b5ac48d0fea63f5ce6a2314c4
--- /dev/null
+++ b/pkgs/cursor.nix
@@ -0,0 +1,19 @@
+{ mkDerivation, base, containers, deepseq, lib, microlens, text
+, validity, validity-containers, validity-text
+}:
+mkDerivation {
+  pname = "cursor";
+  version = "0.3.2.0";
+  sha256 = "4fe97cf1a3f179a0febb34bac2c31200cf79fd101ef07380709e9d64fdf25c24";
+  libraryHaskellDepends = [
+    base containers deepseq microlens text validity validity-containers
+    validity-text
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/NorfairKing/cursor";
+  description = "Purely Functional Cursors";
+  license = lib.licenses.mit;
+}
\ No newline at end of file