Nixpkgs: aspell dictionary

Created on 21 Sep 2013  ·  27Comments  ·  Source: NixOS/nixpkgs

I've installed aspell and aspellDicts.en but when I do aspell -c it says:

Error: No word lists can be found for the language "en_US".

bug non-nixos reporter feedback

Most helpful comment

Also, you can set this in ~/.aspell-conf:

data-dir /Users/johnw/.nix-profile/lib/aspell

All 27 comments

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.

  • See output of which -a some-program
  • See if 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
Was this page helpful?
0 / 5 - 0 ratings