diff --git a/manifest.dhall b/manifest.dhall
index 067e7dce14c13e1a0fd73c70147f5f8c77d66f34..d7d47af1efe8f9ee03b651ffba68e33044e4a115 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -67,6 +67,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "ChasingBottoms" "1.3.1.12"
     , callHackage "HTTP" "4000.4.1"
     , callHackage "JuicyPixels" "3.3.8"
+    , callHackage "MonadRandom" "0.5.3"
     , callHackage "OneTuple" "0.3.1"
     , callHackage "OpenGLRaw" "3.3.4.1"
     , callHackage "PyF" "0.11.1.0"
diff --git a/overlay.nix b/overlay.nix
index e06de10dfccc1a3a41c1f61da35387eb8ff4ad3d..0bbd99fb0282f2c20f8802e4888aaf0d85d43a53 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -17,6 +17,8 @@ final: prev: with pkgs.haskell.lib; {
 
   JuicyPixels = prev.callPackage (./pkgs/JuicyPixels.nix) { };
 
+  MonadRandom = prev.callPackage (./pkgs/MonadRandom.nix) { };
+
   OneTuple = prev.callPackage (./pkgs/OneTuple.nix) { };
 
   OpenGLRaw = prev.callPackage (./pkgs/OpenGLRaw.nix) { };
diff --git a/pkgs/MonadRandom.nix b/pkgs/MonadRandom.nix
new file mode 100644
index 0000000000000000000000000000000000000000..750cc72011bbaa5df1b54633972bea1b4e1cd207
--- /dev/null
+++ b/pkgs/MonadRandom.nix
@@ -0,0 +1,37 @@
+{ mkDerivation
+, base
+, lib
+, mtl
+, primitive
+, random
+, transformers
+, transformers-compat
+}:
+mkDerivation {
+  pname = "MonadRandom";
+  version = "0.5.3";
+  sha256 = "27184dadda0a49abac0208a1e6576b14217a60dc45b6839cd9e90af25ee00a9f";
+  revision = "2";
+  editedCabalFile = "1diy29if7w1c9ckc465mrrb52fm0zmd8zzym1h5ryh5a58qafwhr";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    mtl
+    primitive
+    random
+    transformers
+    transformers-compat
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Random-number generation monad";
+  license = lib.licenses.bsd3;
+  broken = false;
+}