diff --git a/manifest.dhall b/manifest.dhall
index e0de96e6865376e5ab0c926e0972f6301d0b8c0c..1b4428f36aea039aa637af9e23fd308e04f94f70 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -322,6 +322,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
         (None Text)
     , callHackage "lsp-types" "1.6.0.0"
     , callHackage "lsp" "1.6.0.0"
+    , callHackage "lua-arbitrary" "1.0.1"
     , callHackage "lua" "2.2.1"
     , callHackage "lucid-alpine" "0.1.0.7"
     , callHackage "lucid-aria" "0.1.0.1"
diff --git a/overlay.nix b/overlay.nix
index e55a43954bb2791b94a0a8070d61bac7c043f4f3..2e50098e588f5238ff46d650560175d13cb252a3 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -377,6 +377,8 @@ final: prev: with pkgs.haskell.lib; {
 
   lua = prev.callPackage (./pkgs/lua.nix) { };
 
+  lua-arbitrary = prev.callPackage (./pkgs/lua-arbitrary.nix) { };
+
   lucid = prev.callPackage (./pkgs/lucid.nix) { };
 
   lucid-alpine = prev.callPackage (./pkgs/lucid-alpine.nix) { };
diff --git a/pkgs/lua-arbitrary.nix b/pkgs/lua-arbitrary.nix
new file mode 100644
index 0000000000000000000000000000000000000000..316bf7beb86ccc2909ba0ca5739d4660ce0e3101
--- /dev/null
+++ b/pkgs/lua-arbitrary.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib, lua, QuickCheck }:
+mkDerivation {
+  pname = "lua-arbitrary";
+  version = "1.0.1";
+  sha256 = "aadeb5fbcd7de95a64374a959ffc6b341db171fd3db570d1cc0cfae3f7bce205";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base lua QuickCheck ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://hslua.org/";
+  description = "Arbitrary instances for Lua types";
+  license = lib.licenses.mit;
+  broken = false;
+}