I’m trying to set up Emacs with elixir-ls via lsp-mode and credo via Flycheck. This should mostly be preconfigured as Flycheck picks up credo once added to the mix deps, but it can’t seem to start it without some faffing around (see below):
Syntax checkers for buffer mix.exs in elixir-mode:
Flycheck could not read elixir-credo's output.
This usually means the tool is missing, misconfigured, or picking up
the wrong environment. It reported:
Exited with status 1, printing output that contained no errors Flycheck could read:
Mix requires the Hex package manager to fetch dependencies
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] ** (Mix) Could not find an SCM for dependency :credo from RPG.MixProject
It wants some sort of interactive confirmation which I can’t give since this is called from Flycheck non-interactively. Also, credo and Hex are already installed, running mix credo in the same project directory works.
The setup is macOS with mise installed via Homebrew and Elixir/OTP/Erlang through mise:
Tool Version Source Requested
elixir 1.20.2-otp-29 ~/.config/mise/config.toml 1.20.2-otp-29
elixir-ls 0.31.1 ~/.config/mise/config.toml latest
erlang 28.3.1 ~/.config/mise/config.toml 28.3.1
A trick I found to get it to work is to start Eshell and do mix credo there. This will produce the same prompt, and after confirming, subsequent uses of mix credo also work in Flycheck.
Why could that be? Emacs seems to pick up the mise stubs fine, why would it require a separate invocation inside its own shell for things to click? Is this a common experience or do I need to fix something about my environment?
Once it works, it works every time, so I’m not too bothered. lsp-mode also works now. But it would be interesting to find out why there are environment discrepancies inside and outside Emacs in case this leads to problems down the road.






















