diff --git a/manifest.dhall b/manifest.dhall
index a1d98299577f87920b1acc9aff9230f9bd9dc604..5d98cbc21f96844a76b0441184486120dee52a33 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -183,6 +183,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "cpphs" "1.20.9.1"
     , callHackage "criterion-measurement" "0.2.0.0"
     , callHackage "criterion" "1.5.13.0"
+    , callHackage "csv" "0.1.2"
     , callHackage "cursor-brick" "0.1.0.1"
     , callCabal2nix
         "cursor-dirforest"
diff --git a/overlay.nix b/overlay.nix
index 8eabd6becb8ed13b090373e9119ab6d46686105f..8934cff48b1736b14f862f1c334a1507bb4fe19b 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -257,6 +257,8 @@ self: with pkgs.haskell.lib; {
 
   cryptonite = self.callPackage (./pkgs/cryptonite.nix) { };
 
+  csv = self.callPackage (./pkgs/csv.nix) { };
+
   cursor = self.callPackage (./pkgs/cursor.nix) { };
 
   cursor-brick = self.callPackage (./pkgs/cursor-brick.nix) { };
diff --git a/pkgs/csv.nix b/pkgs/csv.nix
new file mode 100644
index 0000000000000000000000000000000000000000..de20870a6bebd2a03a3a8e5754078bf7d88bf64a
--- /dev/null
+++ b/pkgs/csv.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, base, filepath, lib, parsec }:
+mkDerivation {
+  pname = "csv";
+  version = "0.1.2";
+  sha256 = "8cf43442325faa1368f9b55ad952beccf677d9980cdffa3d70a7f204a23ae600";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base filepath parsec ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "CSV loader and dumper";
+  license = lib.licenses.mit;
+  broken = false;
+}