diff --git a/default.nix b/default.nix
deleted file mode 100644
index 243321fec62ebad78a4f0d0a35ed8f28fef3309e..0000000000000000000000000000000000000000
--- a/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{ pkgs ? import <nixpkgs> {}, haskellPackages ? pkgs.haskellPackages, args ? {} }:
-
-let
-  rawdrv = haskellPackages.callCabal2nix "qbar" ./. args;
-  drv = pkgs.haskell.lib.generateOptparseApplicativeCompletions [ "qbar" ] rawdrv;
-
-in
-  if pkgs.lib.inNixShell then rawdrv.env else drv
diff --git a/flake.lock b/flake.lock
index 1d6fed0f6607e411659de8740b9a6eb253453036..35b657e4658a528143693aad6920d6f020c6d802 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,21 +2,58 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1648486164,
-        "narHash": "sha256-v2EOpYJkFS+L4TFoBWC1ZTKYm6FsNNIGyWraY5MtO+4=",
-        "owner": "nixos",
+        "lastModified": 1681303793,
+        "narHash": "sha256-JEdQHsYuCfRL2PICHlOiH/2ue3DwoxUX7DJ6zZxZXFk=",
+        "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "1be57bee8d0565a7bfd8745540fed257c8c7f523",
+        "rev": "fe2ecaf706a5907b5e54d979fbde4924d84b65fc",
         "type": "github"
       },
       "original": {
-        "id": "nixpkgs",
-        "type": "indirect"
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs_2": {
+      "locked": {
+        "lastModified": 1681303793,
+        "narHash": "sha256-JEdQHsYuCfRL2PICHlOiH/2ue3DwoxUX7DJ6zZxZXFk=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "fe2ecaf706a5907b5e54d979fbde4924d84b65fc",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "quasar": {
+      "inputs": {
+        "nixpkgs": "nixpkgs_2"
+      },
+      "locked": {
+        "lastModified": 1682474992,
+        "narHash": "sha256-tyN64/4weIGmlYMOOrVwFaBVyqvt8du9APhCO9vkV14=",
+        "owner": "queezle42",
+        "repo": "quasar",
+        "rev": "76faa881ae2e3a5575fba9f9e374931dbb8e6495",
+        "type": "github"
+      },
+      "original": {
+        "owner": "queezle42",
+        "repo": "quasar",
+        "type": "github"
       }
     },
     "root": {
       "inputs": {
-        "nixpkgs": "nixpkgs"
+        "nixpkgs": "nixpkgs",
+        "quasar": "quasar"
       }
     }
   },
diff --git a/flake.nix b/flake.nix
index 8d30d187145d2f92a5c3092a2848c6f16969a6f9..3a8d4b95966b946083a50b64ac878a1d244d22c4 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,46 +1,69 @@
 {
-  outputs = { self, nixpkgs }: with nixpkgs.lib; let
+  inputs = {
+    nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
+    quasar.url = github:queezle42/quasar;
+  };
 
+  outputs = { self, nixpkgs, quasar }:
+  with nixpkgs.lib;
+  let
     systems = platforms.unix;
-    forAllSystems = f: genAttrs systems (system: f system);
-
+    forAllSystems = genAttrs systems;
+    getHaskellPackages = pkgs: pattern: pipe pkgs.haskell.packages [
+      attrNames
+      (filter (x: !isNull (strings.match pattern x)))
+      (sort (x: y: x>y))
+      (map (x: pkgs.haskell.packages.${x}))
+      head
+    ];
   in {
-
     packages = forAllSystems (system:
-      let pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; };
-      in rec {
-        default = qbar;
-        qbar = pkgs.haskellPackages.qbar;
+      let
+        pkgs = import nixpkgs { inherit system; overlays = [
+          self.overlays.default
+          quasar.overlays.default
+        ]; };
+        haskellPackages = getHaskellPackages pkgs "ghc94.";
+        results = {
+          qbar = haskellPackages.qbar;
+        };
+      in results // {
+        default = pkgs.linkFarm "qbar-all" (results // mapAttrs' (k: v: nameValuePair "${k}-doc" (v.doc or pkgs.emptyDirectory)) results);
       }
     );
 
-    defaultPackage = forAllSystems (system: self.packages.${system}.qbar);
-
-    overlay = final: prev: {
+    overlays.default = final: prev: {
       haskell = prev.haskell // {
         packageOverrides = hfinal: hprev: prev.haskell.packageOverrides hfinal hprev // {
-          qbar = import ./. {
-            pkgs = final;
-            haskellPackages = hfinal;
-          };
+          qbar = hfinal.generateOptparseApplicativeCompletions ["qbar"]
+            (hfinal.callCabal2nix "qbar" ./. {});
         };
       };
     };
 
-    devShell = forAllSystems (system:
+    devShells = forAllSystems (system:
       let
-        pkgs = nixpkgs.legacyPackages.${system};
-      in pkgs.mkShell {
-        inputsFrom = [ self.packages.${system}.default.env ];
-        packages = [
-          pkgs.cabal-install
-          pkgs.zsh
-          pkgs.entr
-          pkgs.ghcid
-          pkgs.haskell-language-server
-        ];
+        pkgs = import nixpkgs { inherit system; overlays = [
+          self.overlays.default
+          quasar.overlays.default
+        ]; };
+        haskellPackages = getHaskellPackages pkgs "ghc94.";
+      in rec {
+        default = haskellPackages.shellFor {
+          packages = hpkgs: [
+            hpkgs.qbar
+          ];
+          nativeBuildInputs = [
+            pkgs.cabal-install
+            pkgs.zsh
+            pkgs.entr
+            pkgs.ghcid
+            haskellPackages.haskell-language-server
+            pkgs.hlint
+          ];
+        };
       }
     );
-
   };
 }
+
diff --git a/qbar.cabal b/qbar.cabal
index a9b6227336070f7f5ba68af5456e7ac88f6b2c07..4fc91965916e8c41f3256bdcd3cb5ab43702a3dd 100644
--- a/qbar.cabal
+++ b/qbar.cabal
@@ -102,6 +102,8 @@ library
     pipes-network,
     pipes-parse,
     pipes-safe,
+    quasar,
+    quasar-timer,
     random,
     sorted-list,
     stm,
@@ -151,39 +153,7 @@ executable qbar
   hs-source-dirs:
     app
   build-depends:
-    aeson,
-    async,
-    attoparsec,
-    base >=4.7 && <5,
-    binary,
-    bytestring,
-    colour,
-    concurrent-extra,
-    containers,
-    dbus,
-    directory,
-    filepath,
-    gitrev,
-    hostname,
-    lens,
-    mtl,
-    network,
-    optparse-applicative,
-    pipes,
-    pipes-aeson,
-    pipes-concurrency,
-    pipes-network,
-    pipes-parse,
-    pipes-safe,
     qbar,
-    random,
-    sorted-list,
-    stm,
-    text,
-    time,
-    typed-process,
-    unix,
-    unordered-containers,
 
 test-suite qbar-test
   import: shared-executable-properties
@@ -195,4 +165,4 @@ test-suite qbar-test
     test
   build-depends:
     base >=4.7 && <5,
-    qbar,
\ No newline at end of file
+    qbar,
diff --git a/src/QBar/Utils.hs b/src/QBar/Utils.hs
index ca0c2fc7c4f95b41bb4dbb458539624de578dd12..e00ab4e135761b07a052e0f35d6de822b8eb4501 100644
--- a/src/QBar/Utils.hs
+++ b/src/QBar/Utils.hs
@@ -7,7 +7,7 @@ import Control.Concurrent.STM (atomically)
 import Control.Concurrent.STM.TChan
 import Control.Concurrent.STM.TVar
 import Control.Monad (replicateM)
-import qualified Data.Text.Lazy as T
+import Data.Text.Lazy qualified as T
 import Pipes
 import System.Random