当我在 Mac OSX 上使用 Nix 将包含 Aspell 英语词典的 Aspell 软件包安装到我的全局环境中时:
$ nix-env -iA nixpkgs.aspell nixpkgs.aspellDicts.en
然后 Aspell 的行为正如我所期望的:
$ aspell dump dicts
en
en-variant_0
...
但是,如果我将软件包安装到 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".
以下每个变体都会产生相同的问题行为:
nix-shell
。任何人都可以建议如何让它工作吗?
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
但是,如果您想构建一个带有字典的独立
aspell
安装,您可以使用 aspellWithDicts
:
nix-build -E 'with import <nixpkgs> {}; aspellWithDicts (d: [d.en])'
这将对
ASPELL_CONF
进行硬编码,因此您无需再次考虑这些环境变量。
我知道这是一个老问题,但自从我发现它后,我想给出对我有用的东西。我使用 Nix,我喜欢 Nix,我推广 Nix,但我并不真正了解 Nix。我采取了更实用的方法,这是一个使用英语拼写检查字典设置开发环境的示例。
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
aspellWithDicts = pkgs.aspellWithDicts (d: [d.en]);
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
aspellWithDicts
];
shellHook = ''
export PS1="nix:# ";
'';
};
}
);
}
}
将其放入 flake.nix 中,您应该能够:
# aspell dump dicts
en
en-variant_0
en-variant_1
en-variant_2
en-w_accents
en-wo_accents
en_AU
en_AU-variant_0
en_AU-variant_1
en_AU-w_accents
en_AU-wo_accents
en_CA
en_CA-variant_0
en_CA-variant_1
en_CA-w_accents
en_CA-wo_accents
en_GB
en_GB-ise
en_GB-ise-w_accents
en_GB-ise-wo_accents
en_GB-ize
en_GB-ize-w_accents
en_GB-ize-wo_accents
en_GB-variant_0
en_GB-variant_1
en_GB-w_accents
en_GB-wo_accents
en_US
en_US-variant_0
en_US-variant_1
en_US-w_accents
en_US-wo_accents