diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..b8c5877643a4767126a6b9f693a9201f52475d83
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,11 @@
+{ pkgs ? import <nixpkgs> {}, haskellPackages ? pkgs.haskellPackages, args ? {}}:
+
+let
+  inherit (pkgs) lib haskell;
+
+  rawdrv = haskellPackages.callCabal2nix "qbar" ./. args;
+  drv = haskell.lib.generateOptparseApplicativeCompletions [ "qbar" ] rawdrv;
+
+in
+
+  if lib.inNixShell then drv.env else drv
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000000000000000000000000000000000000..95a72bf9ad4c6e1df899b946f5b641ce56e98fd9
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,25 @@
+{
+  "nodes": {
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1616527350,
+        "narHash": "sha256-VkMevY2WLU+K7T/P4wVj18Ms8zyeRfp05ILf556m5Y8=",
+        "owner": "nixos",
+        "repo": "nixpkgs",
+        "rev": "d3f7e969b9860fb80750147aeb56dab1c730e756",
+        "type": "github"
+      },
+      "original": {
+        "id": "nixpkgs",
+        "type": "indirect"
+      }
+    },
+    "root": {
+      "inputs": {
+        "nixpkgs": "nixpkgs"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000000000000000000000000000000000000..4728067c32d762ba9706c0cd86d7cf107ff210a2
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,32 @@
+{
+  outputs = { self, nixpkgs }: let
+
+    lib = nixpkgs.lib;
+
+    systems = lib.platforms.unix;
+
+    forAllSystems = f: lib.genAttrs systems (system: f system);
+
+  in {
+
+    packages = forAllSystems (system: {
+      qbar = import ./. {
+        pkgs = nixpkgs.legacyPackages."${system}";
+      };
+    });
+
+    overlay = self: super: {
+      qbar = self.haskellPackages.qd;
+      haskell = super.haskell // {
+        packageOverrides = hself: hsuper: super.haskell.packageOverrides hself hsuper // {
+          qbar = import ./. { pkgs = self; haskellPackages = hself; };
+        };
+      };
+    };
+
+    defaultPackage = forAllSystems (system: self.packages.${system}.qbar);
+
+    devShell = forAllSystems (system: self.packages.${system}.qbar.env);
+
+  };
+}