diff --git a/manifest.dhall b/manifest.dhall
index 7b92e4c1ed937507051d827ba6d6d92545f377d6..c42ce323016ebd0c1e43ee76a7b306b03ad2cb29 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -82,6 +82,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "asn1-types" "0.3.4"
     , callHackage "assoc" "1.0.2"
     , callHackage "async" "2.2.4"
+    , callHackage "atomic-primops" "0.8.4"
     , callHackage "attoparsec-iso8601" "1.1.0.0"
     , callHackage "attoparsec" "0.14.4"
     , callHackage "autodocodec" "0.2.0.1"
diff --git a/overlay.nix b/overlay.nix
index 9fadc0481bd16460e50c6aab876ed77a2466632a..faecff382cb9c6a21466f589db36f420b61ef712 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -47,6 +47,8 @@ final: prev: with pkgs.haskell.lib; {
 
   async = prev.callPackage (./pkgs/async.nix) { };
 
+  atomic-primops = prev.callPackage (./pkgs/atomic-primops.nix) { };
+
   attoparsec = prev.callPackage (./pkgs/attoparsec.nix) { };
 
   attoparsec-iso8601 = prev.callPackage (./pkgs/attoparsec-iso8601.nix) { };
diff --git a/pkgs/atomic-primops.nix b/pkgs/atomic-primops.nix
new file mode 100644
index 0000000000000000000000000000000000000000..e0fc09cd1738b385627b7de3b53fe6b6e19ee113
--- /dev/null
+++ b/pkgs/atomic-primops.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, ghc-prim, lib, primitive }:
+mkDerivation {
+  pname = "atomic-primops";
+  version = "0.8.4";
+  sha256 = "22a8617eb9e221b5daee1ae26ccce279ce3d7a53d76e82c767708f90a6c72d3e";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ghc-prim primitive ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/rrnewton/haskell-lockfree/wiki";
+  description = "A safe approach to CAS and other atomic ops in Haskell";
+  license = lib.licenses.bsd3;
+  broken = false;
+}