Recentemente mudei para o NixOS e instalei a cadeia de ferramentas Rust (rustup, cargo, rustc) usando o gerenciador de pacotes Nix.
Entretanto, quando tento abrir minha configuração pré-configurada do Neovim, recebo o seguinte erro LSP:
Client rust-analyzer quit with exit code 1 and signal 0. Check log for errors: /home/user/.local/state/nvim/lsp.log
Ao olhar o arquivo lsp.log, vejo esta mensagem de erro:
[ERROR] .../vim/lsp/rpc.lua:420 "rpc" "/run/current-system/sw/bin/rust-analyzer" "stderr" "error: Unknown binary 'rust-analyzer' in official toolchain 'stable-x86_64-unknown-linux-gnu'.\n"
A princípio, pensei que pudesse ser um problema do Neovim relacionado à forma como o Nix gerencia pacotes. Então, tentei executar o rust-analyzer diretamente do terminal, mas recebo o mesmo erro:
$ rust-analyzer
error: Unknown binary 'rust-analyzer' in official toolchain 'stable-x86_64-unknown-linux-gnu'.
Percebi que o rust-analyzer pode não ter sido instalado automaticamente com o pacote rustup do Nix, então instalei explicitamente o rust-analyzer usando o gerenciador de pacotes do Nix também.
Apesar disso, o comportamento permanece idêntico para rust-analyzer.
Executando which rust-analyzer mostra corretamente o caminho:
$ which rust-analyzer
/run/current-system/sw/bin/rust-analyzer
Mas executá-lo diretamente usando o caminho absoluto ainda produz o mesmo erro "Binário desconhecido":
$ /run/current-system/sw/bin/rust-analyzer
error: Unknown binary 'rust-analyzer' in official toolchain 'stable-x86_64-unknown-linux-gnu'.
Além disso, reinstalei todos os pacotes do Rust, incluindo rustfmt e rustc, mas agora estou enfrentando problemas semelhantes ao tentar usá-los (seja diretamente no terminal ou por meio de integrações com o Neovim). Especificamente, estou recebendo erros indicando que rustfmt e rustc não podem escolher uma versão para executar porque nenhuma foi especificada explicitamente e nenhum padrão foi configurado. Também usei o comando "which" para encontrar a localização desses binários e, mesmo depois de confirmar o caminho correto, executá-los ainda resulta nos mesmos erros.
$ rustfmt
error: rustup could not choose a version of rustfmt to run, because one wasn't specified explicitly, and no default is configured.
help: run 'rustup default stable' to download the latest stable release of Rust and set it as your default toolchain.
$ rustc
error: rustup could not choose a version of rustc to run, because one wasn't specified explicitly, and no default is configured.
help: run 'rustup default stable' to download the latest stable release of Rust and set it as your default toolchain.
Isso me leva a algumas perguntas:
Considerando o erro persistente "Binário desconhecido" do rust-analyzer e esses novos erros para rustfmt/rustc, devo instalar esses componentes via rustup (por exemplo, rustup default stable, rustup component add rust-analyzer) em vez de usar o gerenciador de pacotes do Nix? Instalar componentes via rustup não contradiz de certa forma a natureza declarativa e reproduzível do NixOS, onde as dependências são preferencialmente gerenciadas pelo próprio Nix?
Estou esquecendo de alguma etapa de configuração ou não entendi como o rustup (instalado via Nix) interage com componentes como rust-analyzer, rustfmt e rustc (também instalados via Nix) no NixOS?