{ pkgs ? import { overlays = [ (self: super: { tree-sitter = super.tree-sitter.overrideAttrs (oldAttrs: { buildInputs = oldAttrs.buildInputs or [ ] ++ [ super.makeWrapper ]; postInstall = oldAttrs.postInstall or "" + '' wrapProgram $out/bin/tree-sitter \ --prefix LD_LIBRARY_PATH : "${super.tree-sitter.withPlugins (_: self.tree-sitter.allGrammars)}" ''; }); }) (self: super: { tree-sitter-grammars = pkgs.lib.mapAttrs (name: grammar: if self.lib.isDerivation grammar then pkgs.stdenv.mkDerivation { inherit (grammar) pname version; phases = [ "installPhase" ]; installPhase = '' mkdir -p $out/lib cp ${grammar}/parser $out/lib/lib${name}.so ''; } else grammar ) super.tree-sitter-grammars; }) (self: super: { anissue = pkgs.writers.writeDashBin "anissue" '' set -efu exec cabal run anissue -- "$@" ''; }) ]; } }: let haskellPackages = pkgs.haskellPackages.override { overrides = self: super: { anissue = (super.callCabal2nix "anissue" ./. { inherit (pkgs) tree-sitter; inherit (pkgs.tree-sitter-grammars) tree-sitter-haskell; }).overrideAttrs (oldAttrs: rec { nativeBuildInputs = [ pkgs.installShellFiles ]; buildInputs = oldAttrs.buildInputs or [ ] ++ [ pkgs.makeWrapper ]; passthru = oldAttrs.passthru // { dependencies = [ pkgs.coreutils pkgs.git ]; }; postInstall = '' exe=${oldAttrs.pname} wrapProgram $out/bin/$exe --prefix PATH : ${pkgs.lib.makeBinPath passthru.dependencies} installShellCompletion --cmd $exe \ --bash <($out/bin/$exe --bash-completion-script $out/bin/.$exe-wrapped) \ --fish <($out/bin/$exe --fish-completion-script $out/bin/.$exe-wrapped) \ --zsh <($out/bin/$exe --zsh-completion-script $out/bin/.$exe-wrapped) ''; }); }; }; in rec { inherit (haskellPackages) anissue; shell = haskellPackages.shellFor { packages = _: [ anissue ]; buildInputs = [ haskellPackages.cabal-install haskellPackages.hlint haskellPackages.ormolu haskellPackages.pointfree pkgs.anissue pkgs.ghcid pkgs.haskell-language-server pkgs.tree-sitter ] ++ ( pkgs.lib.filter pkgs.lib.isDerivation (pkgs.lib.attrValues pkgs.tree-sitter-grammars) ) ++ anissue.passthru.dependencies; withHoogle = true; withHaddock = true; shellHook = '' HISTFILE=${pkgs.lib.escapeShellArg ./.}/.history; export HISTFILE ''; }; }