Merge pull request #34798 from oxij/pkgs/aspell-dicts

aspellDicts: add more dictionaries and some documentation
This commit is contained in:
Michael Raskin 2018-02-19 14:24:46 +00:00 committed by GitHub
commit cfa3e7e633
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,32 +1,113 @@
{stdenv, fetchurl, aspell, which}:
{lib, stdenv, fetchurl, aspell, which}:
with lib;
/* HOWTO:
* Add some of these to your profile or systemPackages.
~~~~
environment.systemPackages = [
aspell
aspellDicts.en
aspellDicts.en-computers
aspellDicts.en-science
];
~~~~
* Rebuild and switch to the new profile.
* Add something like
~~~~
master en_US
extra-dicts en-computers.rws
add-extra-dicts en_US-science.rws
~~~~
to `/etc/aspell.conf` or `~/.aspell.conf`.
* Check that `aspell -a` starts without errors.
* (optional) Check your config with `aspell dump config | grep -vE '^(#|$)'`.
* Enjoy.
*/
let
/* Function to compile an Aspell dictionary. Fortunately, they all
build in the exact same way. */
buildDict =
{shortName, fullName, src, postInstall ? ""}:
{shortName, fullName, ...}@args:
stdenv.mkDerivation {
stdenv.mkDerivation ({
name = "aspell-dict-${shortName}";
inherit src;
buildInputs = [aspell which];
dontAddPrefix = true;
preBuild = "makeFlagsArray=(dictdir=$out/lib/aspell datadir=$out/lib/aspell)";
inherit postInstall;
meta = {
description = "Aspell dictionary for ${fullName}";
platforms = stdenv.lib.platforms.all;
};
};
} // (args.meta or {});
} // removeAttrs args [ "meta" ]);
in {
/* Function to compile txt dict files into Aspell dictionaries. */
buildTxtDict =
{langInputs ? [], ...}@args:
buildDict ({
propagatedUserEnvPackages = langInputs;
preBuild = ''
# Aspell can't handle multiple data-dirs
# Copy everything we might possibly need
${concatMapStringsSep "\n" (p: ''
cp -a ${p}/lib/aspell/* .
'') ([ aspell ] ++ langInputs)}
export ASPELL_CONF="data-dir $(pwd)"
aspell-create() {
target=$1
shift
echo building $target
aspell create "$@" master ./$target.rws
}
words-only() {
awk -F'\t' '{print $1}' | sort | uniq
}
# drop comments
aspell-affix() {
words-only \
| grep -v '#' \
| aspell-create "$@"
}
# Hack: drop comments and words with affixes
aspell-plain() {
words-only \
| grep -v '#' \
| grep -v '/' \
| aspell-create "$@"
}
aspell-install() {
install -d $out/lib/aspell
for a in "$@"; do
echo installing $a
install -t $out/lib/aspell $a.rws
done
}
'';
phases = [ "preBuild" "buildPhase" "installPhase" ];
} // args);
in rec {
### Languages
ca = buildDict {
shortName = "ca-2.1.5-1";
@ -230,4 +311,53 @@ in {
};
};
### Jargons
en-computers = buildTxtDict rec {
shortName = "en-computers";
fullName = "English Computer Jargon";
src = fetchurl {
url = https://mrsatterly.com/computer.dic;
sha256 = "1vzk7cdvcm9r1c6mgxpabrdcpvghdv9mjmnf6iq5wllcif5nsw2b";
};
langInputs = [ en ];
buildPhase = "cat $src | aspell-affix en-computers --dont-validate-words --lang=en";
installPhase = "aspell-install en-computers";
meta = {
homepage = https://mrsatterly.com/spelling.html;
};
};
en-science = buildTxtDict rec {
shortName = "en-science";
fullName = "English Scientific Jargon";
src1 = fetchurl {
url = http://jpetrie.net/wp-content/uploads/custom_scientific_US.txt;
sha256 = "1psqm094zl4prk2f8h18jv0d471hxykzd1zdnrlx7gzrzy6pz5r3";
};
src2 = fetchurl {
url = http://jpetrie.net/wp-content/uploads/custom_scientific_UK.txt;
sha256 = "17ss1sdr3k70zbyx2z9xf74345slrp41gbkpih8axrmg4x92fgm1";
};
langInputs = [ en ];
buildPhase = ''
cat $src1 | aspell-plain en_US-science --dont-validate-words --lang=en
cat $src2 | aspell-plain en_GB-science --dont-validate-words --lang=en
'';
installPhase = "aspell-install en_US-science en_GB-science";
meta = {
homepage = http://www.jpetrie.net/scientific-word-list-for-spell-checkersspelling-dictionaries/;
};
};
}