Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / hunspell / dictionaries.nix
blobdbaa4888922c5dd7ac6f49796bb3452f265cfa46
1 /* hunspell dictionaries */
3 { lib, stdenv, fetchurl, fetchzip, fetchFromGitHub, unzip, coreutils, bash, which, zip, ispell, perl, python3, hunspell }:
6 let
7   mkDict =
8     { pname, readmeFile, dictFileName, ... }@args:
9     stdenv.mkDerivation ({
10       inherit pname;
11       installPhase = ''
12         runHook preInstall
13         # hunspell dicts
14         install -dm755 "$out/share/hunspell"
15         install -m644 ${dictFileName}.dic "$out/share/hunspell/"
16         install -m644 ${dictFileName}.aff "$out/share/hunspell/"
17         # myspell dicts symlinks
18         install -dm755 "$out/share/myspell/dicts"
19         ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/"
20         ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/"
21         # docs
22         install -dm755 "$out/share/doc"
23         install -m644 ${readmeFile} $out/share/doc/${pname}.txt
24         runHook postInstall
25       '';
26     } // args);
28   mkDictFromRla =
29     { shortName, shortDescription, dictFileName }:
30     mkDict rec {
31       inherit dictFileName;
32       version = "2.5";
33       pname = "hunspell-dict-${shortName}-rla";
34       readmeFile = "README.txt";
35       src = fetchFromGitHub {
36         owner = "sbosio";
37         repo = "rla-es";
38         rev = "v${version}";
39         sha256 = "sha256-oGnxOGHzDogzUMZESydIxRTbq9Dmd03flwHx16AK1yk=";
40       };
41       meta = with lib; {
42         description = "Hunspell dictionary for ${shortDescription} from rla";
43         homepage = "https://github.com/sbosio/rla-es";
44         license = with licenses; [ gpl3 lgpl3 mpl11 ];
45         maintainers = with maintainers; [ renzo ];
46         platforms = platforms.all;
47       };
48       nativeBuildInputs = [ bash coreutils which zip unzip ];
49       postPatch = ''
50         substituteInPlace ortograf/herramientas/make_dict.sh \
51            --replace /bin/bash ${bash}/bin/bash \
52            --replace /dev/stderr stderr.log
54         substituteInPlace ortograf/herramientas/remover_comentarios.sh \
55            --replace /bin/bash ${bash}/bin/bash \
56       '';
57       buildPhase = ''
58         cd ortograf/herramientas
59         bash -x ./make_dict.sh -l ${dictFileName} -2
60         unzip ${dictFileName}.zip \
61           ${dictFileName}.dic ${dictFileName}.aff ${readmeFile}
62       '';
63     };
65   mkDictFromDSSO =
66     { shortName, shortDescription, dictFileName }:
67     mkDict rec {
68       inherit dictFileName;
69       version = "2.40";
70       # Should really use a string function or something
71       _version = "2-40";
72       pname = "hunspell-dict-${shortName}-dsso";
73       _name = "ooo_swedish_dict_${_version}";
74       readmeFile = "LICENSE_en_US.txt";
75       src = fetchurl {
76         url = "https://extensions.libreoffice.org/extensions/swedish-spelling-dictionary-den-stora-svenska-ordlistan/${version}/@@download/file/${_name}.oxt";
77         sha256 = "b982881cc75f5c4af1199535bd4735ee476bdc48edf63e3f05fb4f715654a7bc";
78       };
79       meta = with lib; {
80         longDescription = ''
81           Svensk ordlista baserad på DSSO (den stora svenska ordlistan) och Göran
82           Anderssons (goran@init.se) arbete med denna. Ordlistan hämtas från
83           LibreOffice då dsso.se inte längre verkar vara med oss.
84         '';
85         description = "Hunspell dictionary for ${shortDescription} from LibreOffice";
86         license = licenses.lgpl3;
87         platforms = platforms.all;
88       };
89       nativeBuildInputs = [ unzip ];
90       sourceRoot = ".";
91       unpackCmd = ''
92         unzip $src dictionaries/${dictFileName}.dic dictionaries/${dictFileName}.aff $readmeFile
93       '';
94       installPhase = ''
95         # hunspell dicts
96         install -dm755 "$out/share/hunspell"
97         install -m644 dictionaries/${dictFileName}.dic "$out/share/hunspell/"
98         install -m644 dictionaries/${dictFileName}.aff "$out/share/hunspell/"
99         # myspell dicts symlinks
100         install -dm755 "$out/share/myspell/dicts"
101         ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/"
102         ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/"
103         # docs
104         install -dm755 "$out/share/doc"
105         install -m644 ${readmeFile} $out/share/doc/${pname}.txt
106       '';
107     };
109   mkDictFromDicollecte =
110     { shortName, shortDescription, longDescription, dictFileName, isDefault ? false }:
111     mkDict rec {
112       inherit dictFileName;
113       version = "5.3";
114       pname = "hunspell-dict-${shortName}-dicollecte";
115       readmeFile = "README_dict_fr.txt";
116       src = fetchurl {
117         url = "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v${version}.zip";
118         sha256 = "0ca7084jm7zb1ikwzh1frvpb97jn27i7a5d48288h2qlfp068ik0";
119       };
120       meta = with lib; {
121         inherit longDescription;
122         description = "Hunspell dictionary for ${shortDescription} from Dicollecte";
123         homepage = "https://www.dicollecte.org/home.php?prj=fr";
124         license = licenses.mpl20;
125         maintainers = with maintainers; [ renzo ];
126         platforms = platforms.all;
127       };
128       nativeBuildInputs = [ unzip ];
129       sourceRoot = ".";
130       unpackCmd = ''
131         unzip $src ${dictFileName}.dic ${dictFileName}.aff ${readmeFile}
132       '';
133       postInstall = lib.optionalString isDefault ''
134         for ext in aff dic; do
135           ln -sv $out/share/hunspell/${dictFileName}.$ext $out/share/hunspell/fr_FR.$ext
136           ln -sv $out/share/myspell/dicts/${dictFileName}.$ext $out/share/myspell/dicts/fr_FR.$ext
137         done
138       '';
139     };
141   mkDictFromWordlist =
142     { shortName, shortDescription, srcFileName, dictFileName, src }:
143     mkDict rec {
144       inherit src srcFileName dictFileName;
145       version = "2018.04.16";
146       pname = "hunspell-dict-${shortName}-wordlist";
147       srcReadmeFile = "README_" + srcFileName + ".txt";
148       readmeFile = "README_" + dictFileName + ".txt";
149       meta = with lib; {
150         description = "Hunspell dictionary for ${shortDescription} from Wordlist";
151         homepage = "http://wordlist.aspell.net/";
152         license = licenses.bsd3;
153         maintainers = with maintainers; [ renzo ];
154         platforms = platforms.all;
155       };
156       nativeBuildInputs = [ unzip ];
157       sourceRoot = ".";
158       unpackCmd = ''
159         unzip $src ${srcFileName}.dic ${srcFileName}.aff ${srcReadmeFile}
160       '';
161       postUnpack = ''
162         mv ${srcFileName}.dic ${dictFileName}.dic || true
163         mv ${srcFileName}.aff ${dictFileName}.aff || true
164         mv ${srcReadmeFile} ${readmeFile}         || true
165       '';
166     };
168   mkDictFromLinguistico =
169     { shortName, shortDescription, dictFileName, src }:
170     mkDict rec {
171       inherit src dictFileName;
172       version = "2.4";
173       pname = "hunspell-dict-${shortName}-linguistico";
174       readmeFile = dictFileName + "_README.txt";
175       meta = with lib; {
176         description = "Hunspell dictionary for ${shortDescription}";
177         homepage = "https://sourceforge.net/projects/linguistico/";
178         license = licenses.gpl3;
179         maintainers = with maintainers; [ renzo ];
180         platforms = platforms.all;
181       };
182       nativeBuildInputs = [ unzip ];
183       sourceRoot = ".";
184       prePatch = ''
185         # Fix dic file empty lines (FS#22275)
186         sed '/^\/$/d' -i ${dictFileName}.dic
187       '';
188       unpackCmd = ''
189         unzip $src ${dictFileName}.dic ${dictFileName}.aff ${readmeFile}
190       '';
191     };
193   mkDictFromXuxen =
194     { shortName, srcs, shortDescription, longDescription, dictFileName }:
195     stdenv.mkDerivation rec {
196       pname = "hunspell-dict-${shortName}-xuxen";
197       version = "5-2015.11.10";
199       inherit srcs;
201       sourceRoot = ".";
202       # Copy files stripping until first dash (path and hash)
203       unpackCmd = "cp $curSrc \${curSrc##*-}";
204       installPhase = ''
205         # hunspell dicts
206         install -dm755 "$out/share/hunspell"
207         install -m644 ${dictFileName}.dic "$out/share/hunspell/"
208         install -m644 ${dictFileName}.aff "$out/share/hunspell/"
209         # myspell dicts symlinks
210         install -dm755 "$out/share/myspell/dicts"
211         ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/"
212         ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/"
213       '';
215       meta = with lib; {
216         homepage = "http://xuxen.eus/";
217         description = shortDescription;
218         longDescription = longDescription;
219         license = licenses.gpl2;
220         maintainers = with maintainers; [ zalakain ];
221         platforms = platforms.all;
222       };
223     };
225   mkDictFromJ3e =
226     { shortName, shortDescription, dictFileName }:
227     stdenv.mkDerivation rec {
228       pname = "hunspell-dict-${shortName}-j3e";
229       version = "20161207";
231       src = fetchurl {
232         url = "https://j3e.de/ispell/igerman98/dict/igerman98-${version}.tar.bz2";
233         sha256 = "1a3055hp2bc4q4nlg3gmg0147p3a1zlfnc65xiv2v9pyql1nya8p";
234       };
236       nativeBuildInputs = [ ispell perl hunspell ];
238       dontBuild = true;
240       installPhase = ''
241         patchShebangs bin
242         make hunspell/${dictFileName}.aff hunspell/${dictFileName}.dic
243         # hunspell dicts
244         install -dm755 "$out/share/hunspell"
245         install -m644 hunspell/${dictFileName}.dic "$out/share/hunspell/"
246         install -m644 hunspell/${dictFileName}.aff "$out/share/hunspell/"
247         # myspell dicts symlinks
248         install -dm755 "$out/share/myspell/dicts"
249         ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/"
250         ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/"
251       '';
253       meta = with lib; {
254         homepage = "https://www.j3e.de/ispell/igerman98/index_en.html";
255         description = shortDescription;
256         license = with licenses; [ gpl2 gpl3 ];
257         maintainers = with maintainers; [ timor ];
258         platforms = platforms.all;
259       };
260     };
262   mkDictFromLibreOffice =
263     { shortName
264     , shortDescription
265     , dictFileName
266     , license
267     , readmeFile ? "README_${dictFileName}.txt"
268     , sourceRoot ? dictFileName
269     }:
270     mkDict rec {
271       pname = "hunspell-dict-${shortName}-libreoffice";
272       version = "6.3.0.4";
273       inherit dictFileName readmeFile;
274       src = fetchFromGitHub {
275         owner = "LibreOffice";
276         repo = "dictionaries";
277         rev = "libreoffice-${version}";
278         sha256 = "14z4b0grn7cw8l9s7sl6cgapbpwhn1b3gwc3kn6b0k4zl3dq7y63";
279       };
280       buildPhase = ''
281         cp -a ${sourceRoot}/* .
282       '';
283       meta = with lib; {
284         homepage = "https://wiki.documentfoundation.org/Development/Dictionaries";
285         description = "Hunspell dictionary for ${shortDescription} from LibreOffice";
286         license = license;
287         maintainers = with maintainers; [ vlaci ];
288         platforms = platforms.all;
289       };
290     };
293 rec {
295   /* ENGLISH */
297   en_US = en-us;
298   en-us = mkDictFromWordlist {
299     shortName = "en-us";
300     shortDescription = "English (United States)";
301     srcFileName = "en_US";
302     dictFileName = "en_US";
303     src = fetchurl {
304       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_US-2018.04.16.zip";
305       sha256 = "18hbncvqnckzqarrmnzk58plymjqyi93k4qj98fac5mr71jbmzaf";
306     };
307   };
309   en_US-large = en-us-large;
310   en-us-large = mkDictFromWordlist {
311     shortName = "en-us-large";
312     shortDescription = "English (United States) Large";
313     srcFileName = "en_US-large";
314     dictFileName = "en_US";
315     src = fetchurl {
316       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_US-large-2018.04.16.zip";
317       sha256 = "1xm9jgqbivp5cb78ykjxg47vzq1yqj82l7r4q5cjpivrv99s49qc";
318     };
319   };
321   en_CA = en-ca;
322   en-ca = mkDictFromWordlist {
323     shortName = "en-ca";
324     shortDescription = "English (Canada)";
325     srcFileName = "en_CA";
326     dictFileName = "en_CA";
327     src = fetchurl {
328       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_CA-2018.04.16.zip";
329       sha256 = "06yf3s7y1215jmikbs18cn4j8a13csp4763w3jfgah8zlim6vc47";
330     };
331   };
333   en_CA-large = en-ca-large;
334   en-ca-large = mkDictFromWordlist {
335     shortName = "en-ca-large";
336     shortDescription = "English (Canada) Large";
337     srcFileName = "en_CA-large";
338     dictFileName = "en_CA";
339     src = fetchurl {
340       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_CA-large-2018.04.16.zip";
341       sha256 = "1200xxyvv6ni8nk52v3059c367817vnrkm0cdh38rhiigb5flfha";
342     };
343   };
345   en_AU = en-au;
346   en-au = mkDictFromWordlist {
347     shortName = "en-au";
348     shortDescription = "English (Australia)";
349     srcFileName = "en_AU";
350     dictFileName = "en_AU";
351     src = fetchurl {
352       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_AU-2018.04.16.zip";
353       sha256 = "1kp06npl1kd05mm9r52cg2iwc13x02zwqgpibdw15b6x43agg6f5";
354     };
355   };
357   en_AU-large = en-au-large;
358   en-au-large = mkDictFromWordlist {
359     shortName = "en-au-large";
360     shortDescription = "English (Australia) Large";
361     srcFileName = "en_AU-large";
362     dictFileName = "en_AU";
363     src = fetchurl {
364       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_AU-large-2018.04.16.zip";
365       sha256 = "14l1w4dpk0k1js2wwq5ilfil89ni8cigph95n1rh6xi4lzxj7h6g";
366     };
367   };
369   en_GB-ise = en-gb-ise;
370   en-gb-ise = mkDictFromWordlist {
371     shortName = "en-gb-ise";
372     shortDescription = "English (United Kingdom, 'ise' ending)";
373     srcFileName = "en_GB-ise";
374     dictFileName = "en_GB";
375     src = fetchurl {
376       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_GB-ise-2018.04.16.zip";
377       sha256 = "0ylg1zvfvsawamymcc9ivrqcb9qhlpgpnizm076xc56jz554xc2l";
378     };
379   };
381   en_GB-ize = en-gb-ize;
382   en-gb-ize = mkDictFromWordlist {
383     shortName = "en-gb-ize";
384     shortDescription = "English (United Kingdom, 'ize' ending)";
385     srcFileName = "en_GB-ize";
386     dictFileName = "en_GB";
387     src = fetchurl {
388       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_GB-ize-2018.04.16.zip";
389       sha256 = "1rmwy6sxmd400cwjf58az6g14sq28p18f5mlq8ybg8y33q9m42ps";
390     };
391   };
393   en_GB-large = en-gb-large;
394   en-gb-large = mkDictFromWordlist {
395     shortName = "en-gb-large";
396     shortDescription = "English (United Kingdom) Large";
397     srcFileName = "en_GB-large";
398     dictFileName = "en_GB";
399     src = fetchurl {
400       url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_GB-large-2018.04.16.zip";
401       sha256 = "1y4d7x5vvi1qh1s3i09m0vvqrpdzzqhsdngr8nsh7hc5bnlm37mi";
402     };
403   };
405   /* SPANISH */
407   es_ANY = es-any;
408   es-any = mkDictFromRla {
409     shortName = "es-any";
410     shortDescription = "Spanish (any variant)";
411     dictFileName = "es_ANY";
412   };
414   es_AR = es-ar;
415   es-ar = mkDictFromRla {
416     shortName = "es-ar";
417     shortDescription = "Spanish (Argentina)";
418     dictFileName = "es_AR";
419   };
421   es_BO = es-bo;
422   es-bo = mkDictFromRla {
423     shortName = "es-bo";
424     shortDescription = "Spanish (Bolivia)";
425     dictFileName = "es_BO";
426   };
428   es_CL = es-cl;
429   es-cl = mkDictFromRla {
430     shortName = "es-cl";
431     shortDescription = "Spanish (Chile)";
432     dictFileName = "es_CL";
433   };
435   es_CO = es-co;
436   es-co = mkDictFromRla {
437     shortName = "es-co";
438     shortDescription = "Spanish (Colombia)";
439     dictFileName = "es_CO";
440   };
442   es_CR = es-cr;
443   es-cr = mkDictFromRla {
444     shortName = "es-cr";
445     shortDescription = "Spanish (Costa Rica)";
446     dictFileName = "es_CR";
447   };
449   es_CU = es-cu;
450   es-cu = mkDictFromRla {
451     shortName = "es-cu";
452     shortDescription = "Spanish (Cuba)";
453     dictFileName = "es_CU";
454   };
456   es_DO = es-do;
457   es-do = mkDictFromRla {
458     shortName = "es-do";
459     shortDescription = "Spanish (Dominican Republic)";
460     dictFileName = "es_DO";
461   };
463   es_EC = es-ec;
464   es-ec = mkDictFromRla {
465     shortName = "es-ec";
466     shortDescription = "Spanish (Ecuador)";
467     dictFileName = "es_EC";
468   };
470   es_ES = es-es;
471   es-es = mkDictFromRla {
472     shortName = "es-es";
473     shortDescription = "Spanish (Spain)";
474     dictFileName = "es_ES";
475   };
477   es_GT = es-gt;
478   es-gt = mkDictFromRla {
479     shortName = "es-gt";
480     shortDescription = "Spanish (Guatemala)";
481     dictFileName = "es_GT";
482   };
484   es_HN = es-hn;
485   es-hn = mkDictFromRla {
486     shortName = "es-hn";
487     shortDescription = "Spanish (Honduras)";
488     dictFileName = "es_HN";
489   };
491   es_MX = es-mx;
492   es-mx = mkDictFromRla {
493     shortName = "es-mx";
494     shortDescription = "Spanish (Mexico)";
495     dictFileName = "es_MX";
496   };
498   es_NI = es-ni;
499   es-ni = mkDictFromRla {
500     shortName = "es-ni";
501     shortDescription = "Spanish (Nicaragua)";
502     dictFileName = "es_NI";
503   };
505   es_PA = es-pa;
506   es-pa = mkDictFromRla {
507     shortName = "es-pa";
508     shortDescription = "Spanish (Panama)";
509     dictFileName = "es_PA";
510   };
512   es_PE = es-pe;
513   es-pe = mkDictFromRla {
514     shortName = "es-pe";
515     shortDescription = "Spanish (Peru)";
516     dictFileName = "es_PE";
517   };
519   es_PR = es-pr;
520   es-pr = mkDictFromRla {
521     shortName = "es-pr";
522     shortDescription = "Spanish (Puerto Rico)";
523     dictFileName = "es_PR";
524   };
526   es_PY = es-py;
527   es-py = mkDictFromRla {
528     shortName = "es-py";
529     shortDescription = "Spanish (Paraguay)";
530     dictFileName = "es_PY";
531   };
533   es_SV = es-sv;
534   es-sv = mkDictFromRla {
535     shortName = "es-sv";
536     shortDescription = "Spanish (El Salvador)";
537     dictFileName = "es_SV";
538   };
540   es_UY = es-uy;
541   es-uy = mkDictFromRla {
542     shortName = "es-uy";
543     shortDescription = "Spanish (Uruguay)";
544     dictFileName = "es_UY";
545   };
547   es_VE = es-ve;
548   es-ve = mkDictFromRla {
549     shortName = "es-ve";
550     shortDescription = "Spanish (Venezuela)";
551     dictFileName = "es_VE";
552   };
554   /* FRENCH */
556   fr-any = mkDictFromDicollecte {
557     shortName = "fr-any";
558     dictFileName = "fr-toutesvariantes";
559     shortDescription = "French (any variant)";
560     longDescription = ''
561       Ce dictionnaire contient les nouvelles et les anciennes graphies des
562       mots concernés par la réforme de 1990.
563     '';
564   };
566   fr-classique = mkDictFromDicollecte {
567     shortName = "fr-classique";
568     dictFileName = "fr-classique";
569     shortDescription = "French (classic)";
570     longDescription = ''
571       Ce dictionnaire est une extension du dictionnaire «Moderne» et propose
572       en sus des graphies alternatives, parfois encore très usitées, parfois
573       tombées en désuétude.
574     '';
575   };
577   fr-moderne = mkDictFromDicollecte {
578     shortName = "fr-moderne";
579     dictFileName = "fr-moderne";
580     shortDescription = "French (modern)";
581     longDescription = ''
582       Ce dictionnaire propose une sélection des graphies classiques et
583       réformées, suivant la lente évolution de l’orthographe actuelle. Ce
584       dictionnaire contient les graphies les moins polémiques de la réforme.
585     '';
586     isDefault = true;
587   };
589   fr-reforme1990 = mkDictFromDicollecte {
590     shortName = "fr-reforme1990";
591     dictFileName = "fr-reforme1990";
592     shortDescription = "French (1990 reform)";
593     longDescription = ''
594       Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés
595       par la réforme de 1990.
596     '';
597   };
599   /* ITALIAN */
601   it_IT = it-it;
602   it-it = mkDictFromLinguistico {
603     shortName = "it-it";
604     dictFileName = "it_IT";
605     shortDescription = "Hunspell dictionary for 'Italian (Italy)' from Linguistico";
606     src = fetchurl {
607       url = "mirror://sourceforge/linguistico/italiano_2_4_2007_09_01.zip";
608       sha256 = "0m9frz75fx456bczknay5i446gdcp1smm48lc0qfwzhz0j3zcdrd";
609     };
610   };
612   /* BASQUE */
614   eu_ES = eu-es;
615   eu-es = mkDictFromXuxen {
616     shortName = "eu-es";
617     dictFileName = "eu_ES";
618     shortDescription = "Basque (Xuxen 5)";
619     longDescription = ''
620       Itxura berritzeaz gain, testuak zuzentzen laguntzeko zenbait hobekuntza
621       egin dira Xuxen.eus-en. Lexikoari dagokionez, 18645 sarrera berri erantsi
622       ditugu, eta proposamenak egiteko sistema ere aldatu dugu. Esate baterako,
623       gaizki idatzitako hitz baten inguruko proposamenak eskuratzeko, euskaraz
624       idaztean egiten ditugun akats arruntenak hartu dira kontuan. Sistemak
625       ematen dituen proposamenak ordenatzeko, berriz, aipatutako irizpidea
626       erabiltzeaz gain, Internetetik automatikoki eskuratutako euskarazko corpus
627       bateko datuen arabera ordenatu daitezke emaitzak. Erabiltzaileak horrela
628       ordenatu nahi baditu proposamenak, hautatu egin behar du aukera hori
629       testu-kutxaren azpian dituen aukeren artean. Interesgarria da proposamenak
630       ordenatzeko irizpide hori, hala sistemak formarik erabilienak proposatuko
631       baitizkigu gutxiago erabiltzen direnen aurretik.
632     '';
633     srcs = [
634       (fetchurl {
635         url = "http://xuxen.eus/static/hunspell/eu_ES.aff";
636         sha256 = "12w2j6phzas2rdzc7f20jnk93sm59m2zzfdgxv6p8nvcvbrkmc02";
637       })
638       (fetchurl {
639         url = "http://xuxen.eus/static/hunspell/eu_ES.dic";
640         sha256 = "0lw193jr7ldvln5x5z9p21rz1by46h0say9whfcw2kxs9vprd5b3";
641       })
642     ];
643   };
645   /* HUNGARIAN */
647   hu_HU = hu-hu;
648   hu-hu = mkDictFromLibreOffice {
649     shortName = "hu-hu";
650     dictFileName = "hu_HU";
651     shortDescription = "Hungarian (Hungary)";
652     license = with lib.licenses; [ mpl20 lgpl3 ];
653   };
655   /* SWEDISH */
657   sv_SE = sv-se;
658   sv-se = mkDictFromDSSO {
659     shortName = "sv-se";
660     dictFileName = "sv_SE";
661     shortDescription = "Swedish (Sweden)";
662   };
664   # Finlandian Swedish (hello Linus Torvalds)
665   sv_FI = sv-fi;
666   sv-fi = mkDictFromDSSO {
667     shortName = "sv-fi";
668     dictFileName = "sv_FI";
669     shortDescription = "Swedish (Finland)";
670   };
672   /* GERMAN */
674   de_DE = de-de;
675   de-de = mkDictFromJ3e {
676     shortName = "de-de";
677     shortDescription = "German (Germany)";
678     dictFileName = "de_DE";
679   };
681   de_AT = de-at;
682   de-at = mkDictFromJ3e {
683     shortName = "de-at";
684     shortDescription = "German (Austria)";
685     dictFileName = "de_AT";
686   };
688   de_CH = de-ch;
689   de-ch = mkDictFromJ3e {
690     shortName = "de-ch";
691     shortDescription = "German (Switzerland)";
692     dictFileName = "de_CH";
693   };
695   /* UKRAINIAN */
697   uk_UA = uk-ua;
698   uk-ua = mkDict rec {
699     pname = "hunspell-dict-uk-ua";
700     version = "4.6.3";
701     _version = "4-6.3";
703     src = fetchurl {
704       url = "https://extensions.libreoffice.org/extensions/ukrainian-spelling-dictionary-and-thesaurus/${_version}/@@download/file/dict-uk_UA-${version}.oxt";
705       sha256 = "14rd07yx4fx2qxjr5xqc8qy151idd8k2hr5yi18d9r8gccnm9w50";
706     };
708     dictFileName = "uk_UA";
709     readmeFile = "README_uk_UA.txt";
710     nativeBuildInputs = [ unzip ];
711     unpackCmd = ''
712       unzip $src ${dictFileName}/{${dictFileName}.dic,${dictFileName}.aff,${readmeFile}}
713     '';
715     meta = with lib; {
716       description = "Hunspell dictionary for Ukrainian (Ukraine) from LibreOffice";
717       homepage = "https://extensions.libreoffice.org/extensions/ukrainian-spelling-dictionary-and-thesaurus/";
718       license = licenses.mpl20;
719       maintainers = with maintainers; [ dywedir ];
720       platforms = platforms.all;
721     };
722   };
724   /* RUSSIAN */
726   ru_RU = ru-ru;
727   ru-ru = mkDictFromLibreOffice {
728     shortName = "ru-ru";
729     dictFileName = "ru_RU";
730     shortDescription = "Russian (Russian)";
731     license = with lib.licenses; [ mpl20 lgpl3 ];
732   };
734   /* CZECH */
736   cs_CZ = cs-cz;
737   cs-cz = mkDictFromLibreOffice {
738     shortName = "cs-cz";
739     dictFileName = "cs_CZ";
740     shortDescription = "Czech (Czechia)";
741     readmeFile = "README_cs.txt";
742     license = with lib.licenses; [ gpl2 ];
743   };
745   /* SLOVAK */
747   sk_SK = sk-sk;
748   sk-sk = mkDictFromLibreOffice {
749     shortName = "sk-sk";
750     dictFileName = "sk_SK";
751     shortDescription = "Slovak (Slovakia)";
752     readmeFile = "README_sk.txt";
753     license = with lib.licenses; [ gpl2 lgpl21 mpl11 ];
754   };
756   /* DANISH */
758   da_DK = da-dk;
759   da-dk = mkDict rec {
760     pname = "hunspell-dict-da-dk";
761     version = "2.5.189";
763     src = fetchurl {
764       url = "https://stavekontrolden.dk/dictionaries/da_DK/da_DK-${version}.oxt";
765       sha256 = "sha256:0i1cw0nfg24b0sg2yc3q7315ng5vc5245nvh0l1cndkn2c9z4978";
766     };
768     shortName = "da-dk";
769     shortDescription = "Danish (Danmark)";
770     dictFileName = "da_DK";
771     readmeFile = "README_da_DK.txt";
772     nativeBuildInputs = [ unzip ];
773     unpackCmd = ''
774       unzip $src ${dictFileName}.dic ${dictFileName}.aff ${readmeFile} -d ${dictFileName}
775     '';
777     meta = with lib; {
778       description = "Hunspell dictionary for Danish (Denmark) from Stavekontrolden";
779       homepage = "https://github.com/jeppebundsgaard/stavekontrolden";
780       license = with lib.licenses; [ gpl2Only lgpl21Only mpl11 ];
781       maintainers = with maintainers; [ louisdk1 ];
782     };
783   };
785   /* DUTCH */
787   nl_NL = nl_nl;
788   nl_nl = mkDict rec {
789     pname = "hunspell-dict-nl-nl";
790     version = "2.20.19";
792     src = fetchFromGitHub {
793       owner = "OpenTaal";
794       repo = "opentaal-hunspell";
795       rev = version;
796       sha256 = "0jma8mmrncyzd77kxliyngs4z6z4769g3nh0a7xn2pd4s5y2xdpy";
797     };
799     preInstall = ''
800       mv nl.aff nl_NL.aff
801       mv nl.dic nl_NL.dic
802     '';
804     dictFileName = "nl_NL";
805     readmeFile = "README.md";
807     meta = with lib; {
808       description = "Hunspell dictionary for Dutch (Netherlands) from OpenTaal";
809       homepage = "https://www.opentaal.org/";
810       license = with licenses; [ bsd3 ]; # and/or cc-by-nc-30
811       maintainers = with maintainers; [ artturin ];
812     };
813   };
815   /* HEBREW */
817   he_IL = he-il;
818   he-il = mkDictFromLibreOffice {
819     shortName = "he-il";
820     dictFileName = "he_IL";
821     shortDescription = "Hebrew (Israel)";
822     readmeFile = "README_he_IL.txt";
823     license = with lib.licenses; [ agpl3Plus ];
824   };
826   /* THAI */
828   th_TH = th-th;
829   th-th = mkDict {
830     pname = "hunspell-dict-th-th";
831     version = "experimental-2023-03-01";
832     dictFileName = "th_TH";
833     readmeFile = "README.md";
834     src = fetchFromGitHub {
835       owner = "SyafiqHadzir";
836       repo = "Hunspell-TH";
837       rev = "9c09f1b7c0eb4d04b9f6f427901686c5c3d9fa54";
838       sha256 = "1wszpnbgj31k72x1vvcfkzcpmxsncdpqsi3zagah7swilpi7cqm4";
839     };
840     meta = with lib; {
841       description = "Hunspell dictionary for Central Thai (Thailand)";
842       homepage = "https://github.com/SyafiqHadzir/Hunspell-TH";
843       license = with licenses; [ gpl3 ];
844       maintainers = with maintainers; [ toastal ]; # looking for a native speaker
845       platforms = platforms.all;
846     };
847   };
849   /* CROATIAN */
851   hr_HR = hr-hr;
852   hr-hr = mkDictFromLibreOffice {
853     shortName = "hr-hr";
854     dictFileName = "hr_HR";
855     shortDescription = "Croatian (Croatia)";
856     readmeFile = "README_hr_HR.txt";
857     license = with lib.licenses; [ gpl2Only lgpl21Only mpl11 ];
858   };
860   /* NORWEGIAN */
862   nb_NO = nb-no;
863   nb-no = mkDictFromLibreOffice {
864     shortName = "nb-no";
865     dictFileName = "nb_NO";
866     sourceRoot = "no";
867     readmeFile = "README_hyph_NO.txt";
868     shortDescription = "Norwegian Bokmål (Norway)";
869     license = with lib.licenses; [ gpl2Only ];
870   };
872   nn_NO = nn-no;
873   nn-no = mkDictFromLibreOffice {
874     shortName = "nn-no";
875     dictFileName = "nn_NO";
876     sourceRoot = "no";
877     readmeFile = "README_hyph_NO.txt";
878     shortDescription = "Norwegian Nynorsk (Norway)";
879     license = with lib.licenses; [ gpl2Only ];
880   };
882   /* TOKI PONA */
884   tok = mkDict rec {
885     pname = "hunspell-dict-tok";
886     version = "20220829";
887     dictFileName = "tok";
888     readmeFile = "README.en.adoc";
890     src = fetchzip {
891       url = "https://github.com/somasis/hunspell-tok/releases/download/${version}/hunspell-tok-${version}.tar.gz";
892       sha256 = "sha256-RiAODKXPUeIcf8IFcU6Tacehq5S8GYuPTuxEiN2CXD0=";
893     };
895     dontBuild = true;
897     meta = with lib; {
898       description = "Hunspell dictionary for Toki Pona";
899       homepage = "https://github.com/somasis/hunspell-tok";
900       license = with lib.licenses; [ cc0 publicDomain cc-by-sa-30 cc-by-sa-40 ];
901       maintainers = with maintainers; [ somasis ];
902       platforms = platforms.all;
903     };
904   };
906   /* POLISH */
908   pl_PL = pl-pl;
909   pl-pl = mkDictFromLibreOffice {
910     shortName = "pl-pl";
911     dictFileName = "pl_PL";
912     shortDescription = "Polish (Poland)";
913     readmeFile = "README_en.txt";
914     # the README doesn't specify versions of licenses :/
915     license = with lib.licenses; [ gpl2Plus lgpl2Plus mpl10 asl20 cc-by-sa-25 ];
916   };
918   /* PORTUGUESE */
920   pt_BR = pt-br;
921   pt-br = mkDictFromLibreOffice {
922     shortName = "pt-br";
923     dictFileName = "pt_BR";
924     shortDescription = "Portuguese (Brazil)";
925     readmeFile = "README_pt_BR.txt";
926     license = with lib.licenses; [ lgpl3 ];
927   };
929   pt_PT = pt-pt;
930   pt-pt = mkDictFromLibreOffice {
931     shortName = "pt-pt";
932     dictFileName = "pt_PT";
933     shortDescription = "Portuguese (Portugal)";
934     readmeFile = "README_pt_PT.txt";
935     license = with lib.licenses; [ gpl2 lgpl21 mpl11 ];
936   };
938   /* PERSIAN */
940   fa_IR = fa-ir;
941   fa-ir = mkDict {
942     pname = "hunspell-dict-fa-ir";
943     version = "experimental-2022-09-04";
944     dictFileName = "fa-IR";
945     readmeFile = "README.md";
946     src = fetchFromGitHub {
947       owner = "b00f";
948       repo = "lilak";
949       rev = "1a80a8e5c9377ac424d29ef20be894e250bc9765";
950       hash = "sha256-xonnrclzgFEHdQ9g8ijm0bo9r5a5Y0va52NoJR5d8mo=";
951     };
952     nativeBuildInputs = [ python3 ];
953     buildPhase = ''
954       runHook preBuild
955       mkdir build
956       (cd src && python3 lilak.py)
957       mv build/* ./
958       # remove timestamp from file
959       sed -i 's/^\(## *File Version[^,]*\),.*/\1/' fa-IR.aff
960       runHook postBuild
961     '';
962     meta = with lib; {
963       description = "Hunspell dictionary for Persian (Iran)";
964       homepage = "https://github.com/b00f/lilak";
965       license = licenses.asl20;
966       maintainers = with maintainers; [ nix-julia ];
967       platforms = platforms.all;
968     };
969   };