{ compiler ? "default" }: let

  stockholm = import <stockholm>;
  inherit (stockholm.systems.${lib.krops.getHostName}) config pkgs;
  inherit (stockholm) lib;

  haskellPackages =
    if compiler == "default"
      then pkgs.haskellPackages
      else pkgs.haskell.packages.${compiler};

  drv = haskellPackages.callPackage (import ./.) {};

in

  lib.overrideDerivation drv.env (oldAttrs: {

    buildInputs = [
      pkgs.flameshot
    ];

    shellHook = ''
      pkg_name=${lib.escapeShellArg (builtins.baseNameOf (toString ./.))}

      WORKDIR=${lib.escapeShellArg (toString ./.)}
      CACHEDIR=$HOME/tmp/$pkg_name
      HISTFILE=$CACHEDIR/bash_history

      mkdir -p "$CACHEDIR"

      exe=$CACHEDIR/${lib.currentSystem}

      build() {(
        set -efu
        cd "$WORKDIR"
        options=$(
          ${pkgs.cabal-read}/bin/ghc-options "$pkg_name.cabal" "$pkg_name"
        )
        exec ghc $options \
            -isrc \
            -odir "$CACHEDIR" \
            -hidir "$CACHEDIR" \
            -o "$exe" \
            src/main.hs
      )}

      run() {(
        exec "$exe" "$@"
      )}

      export SHELL=/run/current-system/sw/bin/bash
      export FLAMESHOT_CAPTURE_PATH="$CACHEDIR/captures"

      cd "$WORKDIR"
    '';
  })