diff --git a/pkgs/default.nix b/pkgs/default.nix
index 00a97732a8e12631dc2b61ee1f87793642faffc8..ffc7815e4c17e558420b16b98da13c4b785bbb20 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -16,6 +16,7 @@ let
 
     haskell = pkgs.haskell // {
       packageOverrides = self: super: {
+        q = self.callPackage ./q {};
         qbar = self.callPackage ./qbar {};
       };
     };
@@ -30,6 +31,7 @@ let
       };
     }));
 
+    q = haskellPackages.q;
     qbar = haskellPackages.qbar;
   };
 
diff --git a/pkgs/q/default.nix b/pkgs/q/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..2b989c973de4c197249aa5530701a41510ad3396
--- /dev/null
+++ b/pkgs/q/default.nix
@@ -0,0 +1,11 @@
+{ haskell, fetchgit, callCabal2nix }:
+
+let
+  repo = with builtins; fromJSON ( readFile ./repo.json );
+  src = fetchgit {
+    inherit (repo) url rev sha256;
+  };
+in
+haskell.lib.generateOptparseApplicativeCompletion "q" (
+  callCabal2nix "q" src {}
+)
diff --git a/pkgs/q/repo.json b/pkgs/q/repo.json
new file mode 100644
index 0000000000000000000000000000000000000000..58d01c90640a8ccf525a81dfddd08d23d63bfecd
--- /dev/null
+++ b/pkgs/q/repo.json
@@ -0,0 +1,11 @@
+{
+  "ref": "refs/heads/master",
+  "url": "https://git.c3pb.de/jens/q.git",
+  "rev": "029d589c88c676c1e8a7e96f91f563a5a4eb5190",
+  "date": "2020-07-12T19:45:06+02:00",
+  "path": "/nix/store/1f3f7nwpcwf9yczfmam72mi65gmabbf5-q",
+  "sha256": "01j37vyjzjhs3a6661w20hhfwhacxsvfyl005zz49r9kv4618f81",
+  "fetchSubmodules": false,
+  "deepClone": false,
+  "leaveDotGit": false
+}
diff --git a/pkgs/q/update b/pkgs/q/update
new file mode 100755
index 0000000000000000000000000000000000000000..beea01e8074185246988737ec3d1c1c5b4956959
--- /dev/null
+++ b/pkgs/q/update
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i sh -p nix-prefetch-git jq
+
+url="https://git.c3pb.de/jens/q.git"
+ref="refs/heads/master"
+
+nix-prefetch-git --rev "$ref" --no-deepClone "$url" | jq --arg ref "$ref" '{ref: $ref} + .' > repo.json