diff --git a/manifest.dhall b/manifest.dhall
index 97e937f99cc6e9ca01062d27af74d31af3358292..969ec93fefef1b28d581c7814ecb0bbddcee2e72 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -390,6 +390,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "sdl2-mixer" "1.2.0.0"
     , callHackage "sdl2-ttf" "2.1.3"
     , callHackage "semialign" "1.2.0.1"
+    , callHackage "semigroups" "0.20"
     , callHackage "serialise" "0.2.6.0"
     , callCabal2nix
         "servant"
diff --git a/overlay.nix b/overlay.nix
index 937ab6cbbd81a0f850e3024a1062be164bea3cb0..4dc843cebc83c0780f6c4f320db42f5dd9578437 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -487,6 +487,8 @@ final: prev: with pkgs.haskell.lib; {
 
   semialign = prev.callPackage (./pkgs/semialign.nix) { };
 
+  semigroups = prev.callPackage (./pkgs/semigroups.nix) { };
+
   serialise = prev.callPackage (./pkgs/serialise.nix) { };
 
   servant = prev.callPackage (./pkgs/servant.nix) { };
diff --git a/pkgs/semigroups.nix b/pkgs/semigroups.nix
new file mode 100644
index 0000000000000000000000000000000000000000..8e29c1d134fedb6a799c7c228441c588060491c4
--- /dev/null
+++ b/pkgs/semigroups.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "semigroups";
+  version = "0.20";
+  sha256 = "902d2e33c96b40a89de5957f2a9e097197afcc35e257e45b32ebe770993673e1";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/ekmett/semigroups/";
+  description = "Anything that associates";
+  license = lib.licenses.bsd3;
+  broken = false;
+}