summaryrefslogtreecommitdiffstats
path: root/pkgs/development/libraries/aspell
diff options
context:
space:
mode:
authorSLNOS <anonymous@wired>2017-01-01 00:00:00 +0000
committerJan Malakhovski <oxij@oxij.org>2018-02-18 12:58:50 +0000
commit3f9ada02ae733022152f75eda760b72468991e6c (patch)
tree1b26a40aaeb5574b2bff298d7042284b3ef98cef /pkgs/development/libraries/aspell
parentecf4825f325298e3b78665e7e6295c039dfe969f (diff)
aspellDicts: add more dictionaries and some documentation
Diffstat (limited to 'pkgs/development/libraries/aspell')
-rw-r--r--pkgs/development/libraries/aspell/dictionaries.nix152
1 files changed, 141 insertions, 11 deletions
diff --git a/pkgs/development/libraries/aspell/dictionaries.nix b/pkgs/development/libraries/aspell/dictionaries.nix
index 8d97d6db2f1c..096ac80e5a70 100644
--- a/pkgs/development/libraries/aspell/dictionaries.nix
+++ b/pkgs/development/libraries/aspell/dictionaries.nix
@@ -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;
- };
- };
-
-in {
+ } // (args.meta or {});
+ } // removeAttrs args [ "meta" ]);
+
+ /* 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/;
+ };
+
+ };
+
}