diff --git a/pkgs/tools/misc/pc/default.nix b/pkgs/tools/misc/pc/default.nix
new file mode 100644
index 000000000000..ecf0122f0869
--- /dev/null
+++ b/pkgs/tools/misc/pc/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, byacc
+, fetchFromSourcehut
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pc";
+  version = "0.4";
+
+  src = fetchFromSourcehut {
+    owner = "~ft";
+    repo = "pc";
+    rev = finalAttrs.version;
+    hash = "sha256-fzEDI20o5ROY9n/QRzCW66iCKYaBbI++Taur6EoA0wA=";
+  };
+
+  nativeBuildInputs = [ byacc ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = {
+    description = "Programmer's calculator";
+    homepage = "https://git.sr.ht/~ft/pc";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ moody ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6f39d14252c6..5c51a72afce1 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5959,6 +5959,8 @@ with pkgs;
 
   pbzx = callPackage ../tools/compression/pbzx { };
 
+  pc = callPackage ../tools/misc/pc { };
+
   pcb2gcode = callPackage ../tools/misc/pcb2gcode { };
 
   pcp = callPackage ../tools/misc/pcp { };