diff --git a/pkgs/tools/admin/swapspace/default.nix b/pkgs/tools/admin/swapspace/default.nix
new file mode 100644
index 000000000000..a60820240699
--- /dev/null
+++ b/pkgs/tools/admin/swapspace/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "swapspace";
+  version = "1.17";
+
+  src = fetchFromGitHub {
+    owner = "Tookmund";
+    repo = "Swapspace";
+    rev = "v${version}";
+    sha256 = "sha256-v1kSkepZm6+S4wf86ETgQzEAZBLJ2jQBgCRdF7yvuxs=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage doc/swapspace.8
+  '';
+
+  meta = with lib; {
+    description = "Dynamic swap manager for Linux";
+    homepage = "https://github.com/Tookmund/Swapspace";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ misuzu ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index df1528961255..dd6fba8b29c3 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -4670,6 +4670,8 @@ with pkgs;
 
   swappy = callPackage ../applications/misc/swappy { gtk = gtk3; };
 
+  swapspace = callPackage ../tools/admin/swapspace { };
+
   swego = callPackage ../servers/swego { };
 
   sydbox = callPackage ../os-specific/linux/sydbox { };