diff --git a/manifest.dhall b/manifest.dhall
index bcc2fd7efd96c3d8114509da5c0b32c3aec50e29..b8255035df383fc8bb04532f8f82e548883b5ee1 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -467,6 +467,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "text-zipper" "0.12"
     , callHackage "these" "1.1.1.1"
     , callHackage "these-skinny" "0.7.5"
+    , callHackage "tf-random" "0.5"
     , callHackage "th-extras" "0.0.0.6"
     , callHackage "th-lift-instances" "0.1.20"
     , callHackage "tidal" "1.8.1"
diff --git a/overlay.nix b/overlay.nix
index 83c388c96b909eec1da7328d5d525e47b2c0d824..fde827dad27122720a82bc2bfedb47d8826a9f89 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -563,6 +563,8 @@ final: prev: with pkgs.haskell.lib; {
 
   text-zipper = prev.callPackage (./pkgs/text-zipper.nix) { };
 
+  tf-random = prev.callPackage (./pkgs/tf-random.nix) { };
+
   th-extras = prev.callPackage (./pkgs/th-extras.nix) { };
 
   th-lift-instances = prev.callPackage (./pkgs/th-lift-instances.nix) { };
diff --git a/pkgs/tf-random.nix b/pkgs/tf-random.nix
new file mode 100644
index 0000000000000000000000000000000000000000..534add50395799bf4c7eb0feacbc7f5a902a3388
--- /dev/null
+++ b/pkgs/tf-random.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, base, lib, primitive, random, time }:
+mkDerivation {
+  pname = "tf-random";
+  version = "0.5";
+  sha256 = "2e30cec027b313c9e1794d326635d8fc5f79b6bf6e7580ab4b00186dadc88510";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base primitive random time ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "High-quality splittable pseudorandom number generator";
+  license = lib.licenses.bsd3;
+  broken = false;
+}