{ config, pkgs, ... }:

let
  myAgda = pkgs.agda.withPackages (pkgs: with pkgs; [
    standard-library
    agda-prelude
    cubical
    _1lab
    generics
  ]);

  als-src = pkgs.fetchFromGitHub {
    owner = "agda";
    repo = "agda-language-server";
    rev = "master";
    sha256 = "sha256-M1Emy8PQsZJ6VdEWBk/6id/nG+XKbXJ8kcs7kjeZA5A=";
  };

  hs = pkgs.haskellPackages.override {
    overrides = self: super: {
      network-simple = self.callHackage "network-simple" "0.4.2" { };

      # Disable test suit
      agda-language-server =
        pkgs.haskell.lib.dontCheck
          (self.callCabal2nix "agda-language-server" als-src { });
    };
  };

  agda-language-server = pkgs.writeShellScriptBin "agda-language-server" ''
    exec ${pkgs.lib.getExe hs.agda-language-server} "$@"
  '';
in
{
  home.packages = [
    myAgda
    hs.agda-language-server
  ];

  programs.direnv.enable = true;
  programs.direnv.nix-direnv.enable = true;
}