diff --git a/manifest.dhall b/manifest.dhall
index 27acd9c67094b2886a7a74238d9da211bdd565bf..c2811c460ef8d2d19d8c354252ffdb4ebf6559ee 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -76,6 +76,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "OpenGLRaw" "3.3.4.1"
     , callHackage "PyF" "0.11.1.0"
     , callHackage "QuickCheck" "2.14.2"
+    , callHackage "StateVar" "1.2.2"
     , callHackage "adjunctions" "4.4.2"
     , callHackage "aeson" "2.1.0.0"
     , callHackage "aeson-pretty" "0.8.9"
diff --git a/overlay.nix b/overlay.nix
index 1d9bac003536b66e17911dfda1acadc87a3205f5..2ad446b4654d4841e2b2b5cab7652baea5754bb5 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -35,6 +35,8 @@ self: with pkgs.haskell.lib; {
 
   QuickCheck = self.callPackage (./pkgs/QuickCheck.nix) { };
 
+  StateVar = self.callPackage (./pkgs/StateVar.nix) { };
+
   adjunctions = self.callPackage (./pkgs/adjunctions.nix) { };
 
   aeson = self.callPackage (./pkgs/aeson.nix) { };
diff --git a/pkgs/StateVar.nix b/pkgs/StateVar.nix
new file mode 100644
index 0000000000000000000000000000000000000000..a5857d255190260b50a85d9bdade439fef088456
--- /dev/null
+++ b/pkgs/StateVar.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib, stm, transformers }:
+mkDerivation {
+  pname = "StateVar";
+  version = "1.2.2";
+  sha256 = "5e4b39da395656a59827b0280508aafdc70335798b50e5d6fd52596026251825";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base stm transformers ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/haskell-opengl/StateVar";
+  description = "State variables";
+  license = lib.licenses.bsd3;
+  broken = false;
+}