diff --git a/manifest.dhall b/manifest.dhall
index c57044df8c223d87f01dada765344221016dd8c4..a12a8d41cb615185874fa3d39267ebff18cc6693 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -465,6 +465,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "quickcheck-classes" "0.6.5.0"
     , callHackage "quickcheck-dynamic" "2.0.0"
     , callHackage "quickcheck-instances" "0.3.28"
+    , callHackage "random-shuffle" "0.0.4"
     , callHackage "rebase" "1.16"
     , callHackage "reducers" "3.12.4"
     , callHackage "regex-tdfa" "1.3.2"
diff --git a/overlay.nix b/overlay.nix
index 62e6cae61437ae68377ab72e625cb38568e25511..000e09dcf51639069d1ff24814dd4168fc34141e 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -635,6 +635,8 @@ final: prev: with pkgs.haskell.lib; {
 
   quickcheck-instances = prev.callPackage (./pkgs/quickcheck-instances.nix) { };
 
+  random-shuffle = prev.callPackage (./pkgs/random-shuffle.nix) { };
+
   rebase = prev.callPackage (./pkgs/rebase.nix) { };
 
   reducers = prev.callPackage (./pkgs/reducers.nix) { };
diff --git a/pkgs/random-shuffle.nix b/pkgs/random-shuffle.nix
new file mode 100644
index 0000000000000000000000000000000000000000..d30d97148a0596967d740553749db0311699d9ca
--- /dev/null
+++ b/pkgs/random-shuffle.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, base, lib, MonadRandom, random }:
+mkDerivation {
+  pname = "random-shuffle";
+  version = "0.0.4";
+  sha256 = "52704411f040fd0bf2361dad162e35dc13caa6535b2e4908d3513c00a95d0615";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base MonadRandom random ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Random shuffle implementation";
+  license = lib.licenses.bsd3;
+  broken = false;
+}