diff --git a/manifest.dhall b/manifest.dhall
index b51ca9d9a7eb60a731f6918fb6ebe8f13498d045..bb3fa960838ee5bd10de2849ee94cd33d9b68b97 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -549,6 +549,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "regex-base" "0.94.0.2"
     , callHackage "regex-tdfa" "1.3.2"
     , callHackage "regex-posix" "0.96.0.1"
+    , callHackage "refact" "0.3.0.2"
     , callHackage "refined" "0.8"
     , callHackage "reflection" "2.1.6"
     , callHackage "repline" "0.4.2.0"
diff --git a/overlay.nix b/overlay.nix
index e5048d004d4089ffbcb778e0aeab853ff4d59051..52acbf3608fecef28f8832ddaefca1870278c195 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -815,6 +815,8 @@ self: with pkgs.haskell.lib; {
 
   reducers = self.callPackage (./pkgs/reducers.nix) { };
 
+  refact = self.callPackage (./pkgs/refact.nix) { };
+
   refined = self.callPackage (./pkgs/refined.nix) { };
 
   reflection = self.callPackage (./pkgs/reflection.nix) { };
diff --git a/pkgs/refact.nix b/pkgs/refact.nix
new file mode 100644
index 0000000000000000000000000000000000000000..15b91ece26edd40d666945141ac1f347776b71a5
--- /dev/null
+++ b/pkgs/refact.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "refact";
+  version = "0.3.0.2";
+  sha256 = "0ad029727797c8ca5d179c7abf1bfc135d86a7d72cf93785ee12ad243aeb1f6c";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Specify refactorings to perform with apply-refact";
+  license = lib.licenses.bsd3;
+  broken = false;
+}