{ nixpkgs ? import <nixpkgs> {} }:

let

  inherit (nixpkgs) pkgs;

  haskellPackages = pkgs.haskellPackages.override {
    overrides = self: super: {
      selda = self.callPackage
        ({ mkDerivation, base, bytestring, exceptions, hashable, mtl
         , psqueues, text, time, unordered-containers
         }:
         mkDerivation {
           pname = "selda";
           version = "0.3.3.1";
           sha256 = "1rxwyls59mpmvb5f2l47ak5cnzmws847kgmn8fwbxb69h6a87bwr";
           enableSharedExecutables = false;
           libraryHaskellDepends = [
             base bytestring exceptions hashable mtl psqueues text time
             unordered-containers
           ];
           description = "ulti-backend, high-level EDSL for interacting with SQL databases";
           license = pkgs.stdenv.lib.licenses.mit;
           hydraPlatforms = pkgs.stdenv.lib.platforms.none;
         }) {};

      selda-sqlite = self.callPackage
        ({ mkDerivation, base, direct-sqlite, directory, exceptions, text, selda }:
         mkDerivation {
           pname = "selda-sqlite";
           version = "0.1.6.1";
           sha256 = "1qqrgqzcfwqzlcklm0qjvdy3ndn3zg8s5mp8744v76bd6z2xwq4d";
           revision = "2";
           editedCabalFile = "0gb8raqmy8r8xwjpx238mqar5gdfd4194si2ms1a9ndcrilkkqja";
           libraryHaskellDepends = [
             base direct-sqlite directory exceptions selda text
           ];
           description = "QLite backend for the Selda database EDSL";
           license = pkgs.stdenv.lib.licenses.mit;
           hydraPlatforms = pkgs.stdenv.lib.platforms.none;
         }) {};

      bisc = self.callPackage
        ({ mkDerivation, base, filepath, directory, stdenv, xdg-basedir
         , selda, selda-sqlite, text }:
        mkDerivation {
          pname = "bisc";
          version = "0.1.0.0";
          src = ./.;
          isLibrary = false;
          isExecutable = true;
          executableHaskellDepends = [
            base filepath directory selda selda-sqlite xdg-basedir text
          ];
          description = "A small tool that clears qutebrowser cookies";
          license = stdenv.lib.licenses.gpl3;
        }) {};
    };
  };

  drv = haskellPackages.bisc;

in

  if pkgs.lib.inNixShell then drv.env else drv