You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NixOS下Neovim中Haskell LSP无法识别XMonad导入求助

解决NixOS下HLS/ghci找不到XMonad模块的问题

问题原因

NixOS中的ghc是纯环境,默认不会将environment.systemPackages内的Haskell包纳入其模块搜索路径。而xmonad --recompile是通过Nix配置的专用编译环境运行的,该环境自动包含了XMonad相关依赖,因此能正常编译,但ghci和HLS(依赖系统ghc)无法识别这些包。

解决方案

方法1:用nix-shell临时加载依赖环境

在你的XMonad配置目录下创建shell.nix文件:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  buildInputs = with pkgs.haskellPackages; [
    ghc
    haskell-language-server
    xmonad
    xmonad-contrib
  ];
}

执行nix-shell进入该环境后,再启动Neovim或ghci,就能正常识别XMonad模块。

方法2:用direnv自动加载环境(推荐)

  1. 在configuration.nix中安装direnv:
environment.systemPackages = with pkgs; [
  # 其他已安装包...
  direnv
];

执行sudo nixos-rebuild switch使配置生效。

  1. 在XMonad配置目录下创建.envrc文件:
use nix
  1. 同样在该目录下创建上述的shell.nix,然后执行direnv allow完成授权。

之后每次进入该目录时,direnv会自动加载包含XMonad依赖的环境,直接启动Neovim即可正常使用HLS。

方法3:手动注册包到ghc全局数据库(不推荐)

这种方法会破坏ghc的纯环境,系统更新后可能失效,仅作临时应急用:

# 注册xmonad模块
ghc-pkg register $(nix-build '<nixpkgs>' -A haskellPackages.xmonad)/lib/ghc-*/package.conf.d/xmonad-*.conf
# 注册xmonad-contrib模块
ghc-pkg register $(nix-build '<nixpkgs>' -A haskellPackages.xmonad-contrib)/lib/ghc-*/package.conf.d/xmonad-contrib-*.conf

内容的提问来源于stack exchange,提问作者Refael Sheinker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:50:34