diff --git a/manifest.dhall b/manifest.dhall
index 1b4428f36aea039aa637af9e23fd308e04f94f70..3b0b9712e62c542eca76c57488e985c78c9f9cf7 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -320,6 +320,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
         "https://github.com/haskell-effectful/log-effectful/"
         (Some "910c79e10d5ac3353f2a1551103a2b63229c3f57")
         (None Text)
+    , callHackage "lpeg" "1.0.3"
     , callHackage "lsp-types" "1.6.0.0"
     , callHackage "lsp" "1.6.0.0"
     , callHackage "lua-arbitrary" "1.0.1"
diff --git a/overlay.nix b/overlay.nix
index 2e50098e588f5238ff46d650560175d13cb252a3..575e63af34b9336c38f11ab6d319ed925e551bf7 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -371,6 +371,8 @@ final: prev: with pkgs.haskell.lib; {
 
   log-effectful = prev.callPackage (./pkgs/log-effectful.nix) { };
 
+  lpeg = prev.callPackage (./pkgs/lpeg.nix) { };
+
   lsp = prev.callPackage (./pkgs/lsp.nix) { };
 
   lsp-types = prev.callPackage (./pkgs/lsp-types.nix) { };
diff --git a/pkgs/lpeg.nix b/pkgs/lpeg.nix
new file mode 100644
index 0000000000000000000000000000000000000000..b295a80bfd7be8912354cb020badc6f038c50f60
--- /dev/null
+++ b/pkgs/lpeg.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, base, lib, lua, tasty, tasty-hunit }:
+mkDerivation {
+  pname = "lpeg";
+  version = "1.0.3";
+  sha256 = "e1c1f4891931f469dc78a6cd2a528fcc27b645e0df5ecf1a975f50c4dbd67ba7";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base lua ];
+  testHaskellDepends = [ base lua tasty tasty-hunit ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://hslua.org/";
+  description = "LPeg – Parsing Expression Grammars For Lua";
+  license = lib.licenses.mit;
+  broken = false;
+}