I've installed aspell and aspellDicts.en but when I do aspell -c
Error: No word lists can be found for the language "en_US".
Did you try to log out and back in again? Aspell can unfortunately only handle one dict-dir directive, and the decision on which dict-dir to use is made in when you log in (in /etc/profile). So it is actually the expected behaviour that aspell doesn't find its dictionary until you log in again.
The only real fix is to patch aspell, teaching it to look at a list of dict-dirs. Other distros don't have this issue, because they just have a single place for aspell to look for dictionaries. But in nix they can be located in different profiles.
Also note that, until recently, aspell would only work if installed with nix-env. This changed in https://github.com/NixOS/nixos/commit/0192c027203efa9b7b4d6516d8d5ae322e76c6bd so that it'd work from any profile (system, default, user).
logging out and back in didn't help. It was installed globally. I'll try it with nix-env.
@kevinfish, did you manage to remedy this issue?
@peti, I think so. How do I tell if I've installed something with nix-env -i overlaying a globally installed package?
@kevinfish: I can think of two ways.
which -a some-program
nix-env -qsP
lists anything you have in systemPackages.This issue seems fixed, please reopen if not.
This issue is not fixed:
Hermes:/usr/local/src/nixpkgs master $ nix-env -iA nixpkgs.aspell nixpkgs.aspellDicts.en
replacing old `aspell-0.60.6.1'
replacing old `aspell-dict-en-7.1-0'
installing `aspell-0.60.6.1'
installing `aspell-dict-en-7.1-0'
building path(s) `/nix/store/1g1bz5zxr9rpg79cmnkra724wb933ziv-user-environment'
created 1140 symlinks in user environment
Hermes:/usr/local/src/nixpkgs master $ aspell dicts
Hermes:/usr/local/src/nixpkgs master $
Doing some analysis reveals that the aspell install creates the following directory:
/Users/johnw/.nix-profile/lib/aspell-0.60
But nixpkgs.aspellDicts.en installs into this directory:
/Users/johnw/.nix-profile/lib/aspell
Using strace
(well, dtruss
on the Mac), I can verify that aspell
is only look for dictionaries in the first directory, and so it doesn't find it.
@shlevy Please reopen
Note that this command does at least work:
aspell -d ~/.nix-profile/lib/aspell/en_US.multi pipe
Also, you can set this in ~/.aspell-conf
:
data-dir /Users/johnw/.nix-profile/lib/aspell
@jwiegley's solution works for me too, tho the file is called ~/.aspell.conf
Is this a darwin only issue? I don't see it on NixOS. When installing aspell I get ~/.nix-profile/lib/aspell
(which the code in /etc/profile picks up), not ~/.nix-profile/lib/aspell-0.60
.
On Fedora and Debian I don't have the directory aspell-0.60
. Nevertheless ~/.nix-profile/lib/aspell
is not picked up by aspell
; setting data-dir
solves it.
It seems that this issue can be solved via configuration of aspell itself. Can we close this issue therefor?
Ping @kevinfish
having to twiddle with a _hard coded_ path (~ and $HOME don't work) in a config file is not the most awesome experience
Whenever I have used it in the past, it works after install, no need to tell it where the dictionary lives.
Closing based on last comment.
I have this problem, too. (on OSX)
If I am correct this is supposed to be solved with #24425 and can therefore be closed.
I've just opened https://github.com/NixOS/nixpkgs/pull/26622 where composition is used instead of going through the profiles to find the dictionaries.
aspell works fine for me now (darwin).
This doesn't work for me on nixos even with .aspell-conf
. I'm using nixos https://nixos.org/channels/nixos-unstable
marek@nixos-mainframe λ ~/Dotfiles (master●)
❯❯❯ which aspell
/home/marek/.nix-profile/bin/aspell
marek@nixos-mainframe λ ~/Dotfiles (master●)
❯❯❯ cat ~/.aspell-conf
data-dir /home/marek/.nix-profile/lib/aspell
marek@nixos-mainframe λ ~/Dotfiles (master●)
❯❯❯ ls /home/marek/.nix-profile/lib/aspell
ccpp.amf cp1255.cmap iso-8859-10.cmap iso-8859-2.cset ispell spell
comment.amf cp1255.cset iso-8859-10.cset iso-8859-3.cmap koi8-r.cmap split.kbd
context-filter.info cp1256.cmap iso-8859-11.cmap iso-8859-3.cset koi8-r.cset standard.kbd
context-filter.la cp1256.cset iso-8859-11.cset iso-8859-4.cmap koi8-u.cmap tex.amf
context-filter.so cp1257.cmap iso-8859-13.cmap iso-8859-4.cset koi8-u.cset tex-filter.info
cp1250.cmap cp1257.cset iso-8859-13.cset iso-8859-5.cmap none.amf tex-filter.la
cp1250.cset cp1258.cmap iso-8859-14.cmap iso-8859-5.cset nroff.amf tex-filter.so
cp1251.cmap cp1258.cset iso-8859-14.cset iso-8859-6.cmap nroff-filter.info texinfo.amf
cp1251.cset dvorak.kbd iso-8859-15.cmap iso-8859-6.cset nroff-filter.la texinfo-filter.info
cp1252.cmap email.amf iso-8859-15.cset iso-8859-7.cmap nroff-filter.so texinfo-filter.la
cp1252.cset email-filter.info iso-8859-16.cmap iso-8859-7.cset perl.amf texinfo-filter.so
cp1253.cmap email-filter.la iso-8859-16.cset iso-8859-8.cmap sgml.amf url.amf
cp1253.cset email-filter.so iso-8859-1.cmap iso-8859-8.cset sgml-filter.info
cp1254.cmap html.amf iso-8859-1.cset iso-8859-9.cmap sgml-filter.la
cp1254.cset html-filter.info iso-8859-2.cmap iso-8859-9.cset sgml-filter.so
marek@nixos-mainframe λ ~/Dotfiles (master●)
❯❯❯ echo "hi theree" | aspell -a
Error: No word lists can be found for the language "en_US".
works when installed via nix-env -i
Does not work when ran using nix run nixpkgs.aspell
because the nix profile isn't available.
Also does not work when installing with nix-env -i
and setting config as documented above.
edit : aspellWithDicts
works as expected, but requires aspell
to be compiled from source every time you want to add a language, which is not ideal!
The aspell config file is ~/.aspell.conf
not .aspell-conf
:
$ < ~/.aspell.conf
data-dir /Users/rwanyoike/.nix-profile/lib/aspell
An environment variable can also work:
ASPELL_CONF="data-dir ${HOME}/.nix-profile/lib/aspell"
You can confirm with aspell dump config
:
$ aspell dump config | grep data-dir # data-dir (string)
data-dir /Users/rwanyoike/.nix-profile/lib/aspell
# default: <data-dir> = /Users/rwanyoike/.nix-profile/lib/aspell
# local-data-dir (string)
Everything seems to be working fine in macos.
Instructions on how to get aspell working with a dictionary:
# Install aspell
nix-env -i aspell
# Install dictionary
nix-env -f '<nixpkgs>' -iA aspellDicts.en
# Test
echo "hi theree" | aspell -a
# Bonus: search for available dictionaries
nix-env -f '<nixpkgs>' -qaPA aspellDicts
Most helpful comment
Also, you can set this in
~/.aspell-conf
: