安装到 nix-shell 中时 Aspell 字典丢失

b73*_*b73 5 nixos nix

当我在 Mac OSX 上使用 Nix 将带有英语 Aspell 字典的 Aspell 包安装到我的全局环境中时:

$ nix-env -iA nixpkgs.aspell nixpkgs.aspellDicts.en
Run Code Online (Sandbox Code Playgroud)

然后 Aspell 的行为正如我所期望的:

$ aspell dump dicts

en
en-variant_0
...
Run Code Online (Sandbox Code Playgroud)

但是,如果我将软件包安装到 nix-shell 中,则词典似乎未正确安装:

$ nix-shell -p aspell aspellDicts.en --pure

$ aspell dump dicts
# nothing printed

$ echo 'word lister to check' | aspell --list
Error: No word lists can be found for the language "en_US".
Run Code Online (Sandbox Code Playgroud)

以下每个变体都会产生相同的问题行为:

  • 安装到不纯的 nix-shell 中,
  • 将 nix 表达式放入 default.nix 文件中并运行nix-shell
  • 安装其他 Aspell 词典

谁能建议如何让它发挥作用?

Rob*_*ing 4

aspell二进制文件由 NixPkgs 包装,通过以下方式提供安装路径ASPELL_CONF(如果尚未指定)。(欲了解详情,cat -v result/bin/aspell

您可以ASPELL_CONF手动指定,也可以使用NIX_PROFILES环境变量。例如:

$ nix-build -E 'with import <nixpkgs> {};
     buildEnv { name = "aspell-env"; paths = [aspell aspellDicts.en]; }'

$ NIX_PROFILES=./result ./result/bin/aspell dump dicts
en
en-variant_0
[...]
en_US-wo_accents
Run Code Online (Sandbox Code Playgroud)

aspell但是,如果您想使用字典构建独立的安装,您可以使用aspellWithDicts

nix-build -E 'with import <nixpkgs> {}; aspellWithDicts (d: [d.en])'
Run Code Online (Sandbox Code Playgroud)

这将对 进行硬编码ASPELL_CONF,因此您无需再次考虑这些环境变量。