This project will probably never work with multiple Cabal targets per project — too much effort to emulate this behavior of the original Stack. See issues #7, #6.
We suggest using Dante, which works very well with Cabal@Nix (incl. multiple targets), or HIE, after haskell/haskell-ide-engine#357 is ready.
You need to have default.nix
and shell.nix
defined for your project, see https://nixos.org/nixpkgs/manual/#how-to-create-nix-builds-for-your-own-private-haskell-packages.
Emacs’ intero-stack-executable
variable needs to point to /nix/store/…-intero-nix-shim-…/bin/intero-nix-shim
.
You can set it to just "intero-nix-shim"
, if it’s available in your global PATH
. (By default, that variable is set to "stack"
.)
There are several ways to achieve the above.
Probably, the simplest one would be to install intero-nix-shim
globally in your PATH
, e.g., if you’re on nixos-17.03
:
# /etc/nixos/configuration.nix
{
environment.systemPackages = [
haskellPackages.intero-nix-shim
];
}
… and set intero-stack-executable
to just "intero-nix-shim"
in .dir-locals.el
for your project:
;; your-project/.dir-locals.el
((nil . ((intero-stack-executable . "intero-nix-shim"))))
Warning: if you choose the .dir-locals.el
way, Emacs has a security mechanism to prevent untrusted code execution. You will have to accept this setting. If you use global-intero-mode
, Intero will start loading before you manage to whitelist this setting. Therefore, the first time, it will fail. Just do M-x intero-restart
.