gnu: emilua: Update to 0.3.0.
[jackhill/guix/guix.git] / gnu / packages / education.scm
CommitLineData
2614de3c
DM
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
9e39ac41 3;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
b84257c0 4;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
808e4c14 5;;; Copyright © 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
a1093d73 6;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
a7e6e9ad 7;;; Copyright © 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
8534c949 8;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
7adf6f1b 9;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
648ae621 10;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
73c81ae0 11;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
2614de3c
DM
12;;;
13;;; This file is part of GNU Guix.
14;;;
15;;; GNU Guix is free software; you can redistribute it and/or modify it
16;;; under the terms of the GNU General Public License as published by
17;;; the Free Software Foundation; either version 3 of the License, or (at
18;;; your option) any later version.
19;;;
20;;; GNU Guix is distributed in the hope that it will be useful, but
21;;; WITHOUT ANY WARRANTY; without even the implied warranty of
22;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23;;; GNU General Public License for more details.
24;;;
25;;; You should have received a copy of the GNU General Public License
26;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
27
28(define-module (gnu packages education)
29 #:use-module (ice-9 regex)
30 #:use-module (gnu packages)
8534c949 31 #:use-module (gnu packages audio)
3cfd12f3
NG
32 #:use-module (gnu packages base)
33 #:use-module (gnu packages bash)
2614de3c 34 #:use-module (gnu packages compression)
230e59da 35 #:use-module (gnu packages curl)
4f963be0 36 #:use-module (gnu packages databases)
7adf6f1b 37 #:use-module (gnu packages flex)
4f963be0 38 #:use-module (gnu packages fonts)
3cfd12f3 39 #:use-module (gnu packages freedesktop)
4f963be0 40 #:use-module (gnu packages game-development)
2614de3c 41 #:use-module (gnu packages gettext)
0ea179fd
RW
42 #:use-module (gnu packages glib)
43 #:use-module (gnu packages gnome)
648ae621 44 #:use-module (gnu packages golang)
0ea179fd 45 #:use-module (gnu packages gtk)
34208bf5 46 #:use-module (gnu packages image)
3cfd12f3 47 #:use-module (gnu packages javascript)
d2c0a7a2 48 #:use-module (gnu packages kde)
b27aacbf 49 #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules
8534c949 50 #:use-module (gnu packages mp3)
7adf6f1b 51 #:use-module (gnu packages ncurses)
2614de3c 52 #:use-module (gnu packages perl)
0ea179fd
RW
53 #:use-module (gnu packages pkg-config)
54 #:use-module (gnu packages python)
8534c949
RS
55 #:use-module (gnu packages python-web)
56 #:use-module (gnu packages python-xyz)
3cfd12f3 57 #:use-module (gnu packages qt)
7adf6f1b 58 #:use-module (gnu packages readline)
0ea179fd 59 #:use-module (gnu packages sdl)
cd0322a3 60 #:use-module (gnu packages sqlite)
0ea179fd 61 #:use-module (gnu packages texinfo)
96ec4604 62 #:use-module (gnu packages tls)
8534c949 63 #:use-module (gnu packages video)
7e48e849 64 #:use-module (gnu packages xorg)
0ea179fd 65 #:use-module (gnu packages xml)
2614de3c
DM
66 #:use-module ((guix licenses) #:prefix license:)
67 #:use-module (guix packages)
68 #:use-module (guix download)
3cfd12f3 69 #:use-module (guix git-download)
2614de3c
DM
70 #:use-module (guix svn-download)
71 #:use-module (guix utils)
2614de3c 72 #:use-module (guix build-system cmake)
3cfd12f3 73 #:use-module (guix build-system gnu)
648ae621 74 #:use-module (guix build-system go)
3b2cf5c8 75 #:use-module (guix build-system python)
7d796d80 76 #:use-module (guix build-system qt)
3cfd12f3 77 #:use-module (guix build-system trivial)
2614de3c
DM
78 #:use-module (srfi srfi-1))
79
0ea179fd
RW
80(define-public gcompris
81 (package
82 (name "gcompris")
cdc827b3 83 (version "17.05")
0ea179fd
RW
84 (source (origin
85 (method url-fetch)
86 (uri (string-append "http://gcompris.net/download/gtk/src/gcompris-"
87 version ".tar.bz2"))
88 (sha256
89 (base32
cdc827b3 90 "18y483alb4r4vfmh80nnl0pah5gv0b8frcm6l1drb9njn5xlcpgc"))))
0ea179fd
RW
91 (build-system gnu-build-system)
92 (arguments
93 `(#:configure-flags
94 ;; Use SDL mixer because otherwise GCompris would need an old version
95 ;; of Gstreamer.
96 (list "--enable-sdlmixer"
97 "LDFLAGS=-lgmodule-2.0")
98 #:phases
99 (modify-phases %standard-phases
100 (add-after 'set-paths 'set-sdl-paths
101 (lambda* (#:key inputs #:allow-other-keys)
102 (setenv "CPATH"
103 (string-append (assoc-ref inputs "sdl-mixer")
5ba856ab
MB
104 "/include/SDL:"
105 (or (getenv "CPATH") "")))
0ea179fd
RW
106 #t)))))
107 (inputs
108 `(("gtk+" ,gtk+-2)
109 ("librsvg" ,librsvg)
110 ("libxml2" ,libxml2)
111 ("sdl-mixer" ,sdl-mixer)
112 ("sqlite" ,sqlite)
113 ("glib:bin" ,glib)
114 ("python" ,python)))
115 (native-inputs
116 `(("intltool" ,intltool)
117 ("texinfo" ,texinfo)
118 ("texi2html" ,texi2html)
119 ("glib:bin" ,glib "bin")
120 ("pkg-config" ,pkg-config)))
09a3d34c 121 (home-page "https://gcompris.net")
0ea179fd
RW
122 (synopsis "Educational software suite")
123 (description "GCompris is an educational software suite comprising of
124numerous activities for children aged 2 to 10. Some of the activities are
125game orientated, but nonetheless still educational. Below you can find a list
126of categories with some of the activities available in that category.
127
128@enumerate
129@item computer discovery: keyboard, mouse, different mouse gestures, ...
130@item arithmetic: table memory, enumeration, double entry table, mirror image, ...
131@item science: the canal lock, the water cycle, the submarine, electric simulation ...
132@item geography: place the country on the map
133@item games: chess, memory, connect 4, oware, sudoku ...
134@item reading: reading practice
135@item other: learn to tell time, puzzle of famous paintings, vector drawing, cartoon making, ...
136@end enumerate
137")
138 (license license:gpl3+)))
b84257c0 139
b27aacbf
EF
140(define-public gcompris-qt
141 (package
142 (name "gcompris-qt")
6ace1ec8 143 (version "1.0")
b27aacbf 144 (source
96ec4604
TGR
145 (origin
146 (method url-fetch)
147 (uri (string-append
148 "https://gcompris.net/download/qt/src/gcompris-qt-"
149 version ".tar.xz"))
150 (sha256
6ace1ec8 151 (base32 "08dw1q0h4qz2q0ksa5pbmb9v60hr1zv9skx6z8dlq9b1i7harnds"))))
b27aacbf
EF
152 (build-system cmake-build-system)
153 (arguments
5c105203
EF
154 `(#:phases
155 (modify-phases %standard-phases
7e48e849
EF
156 (add-before 'check 'start-xorg-server
157 (lambda* (#:key inputs #:allow-other-keys)
158 ;; The test suite requires a running X server.
159 (system (string-append (assoc-ref inputs "xorg-server")
160 "/bin/Xvfb :1 &"))
161 (setenv "DISPLAY" ":1")
6ace1ec8
EF
162 ;; The test suite wants to write to /homeless-shelter
163 (setenv "HOME" (getcwd))
7e48e849 164 #t))
5c105203
EF
165 (add-after 'install 'wrap-executable
166 (lambda* (#:key inputs outputs #:allow-other-keys)
167 (let ((out (assoc-ref outputs "out")))
168 (wrap-program (string-append out "/bin/gcompris-qt")
169 `("QT_PLUGIN_PATH" ":" prefix
170 ,(map (lambda (label)
171 (string-append (assoc-ref inputs label)
172 "/lib/qt5/plugins"))
173 '("qtbase" "qtdeclarative" "qtmultimedia" "qtsvg")))
174 `("QML2_IMPORT_PATH" ":" prefix
175 ,(map (lambda (label)
176 (string-append (assoc-ref inputs label)
177 "/lib/qt5/qml"))
178 '("qtdeclarative" "qtgraphicaleffects"
179 "qtmultimedia" "qtquickcontrols"))))
180 #t))))
7e48e849
EF
181 #:configure-flags (list "-DQML_BOX2D_MODULE=disabled"
182 "-DBUILD_TESTING=TRUE")))
b27aacbf
EF
183 (native-inputs
184 `(("extra-cmake-modules" ,extra-cmake-modules)
185 ("gettext" ,gettext-minimal)
668307c0 186 ("kdoctools" ,kdoctools)
5c105203 187 ("perl" ,perl)
7e48e849 188 ("qttools" ,qttools)
ff337525 189 ("xorg-server" ,xorg-server-for-tests)))
b27aacbf 190 (inputs
96ec4604 191 `(("openssl" ,openssl)
6ace1ec8 192 ("python" ,python-wrapper)
5c105203
EF
193 ("qtbase" ,qtbase)
194 ("qtdeclarative" ,qtdeclarative)
195 ("qtgraphicaleffects" ,qtgraphicaleffects)
196 ("qtmultimedia" ,qtmultimedia)
197 ("qtquickcontrols" ,qtquickcontrols)
198 ("qtsensors" ,qtsensors)
199 ("qtsvg" ,qtsvg)
200 ("qtxmlpatterns" ,qtxmlpatterns)))
201 (home-page "https://gcompris.net/index-en.html")
b27aacbf
EF
202 (synopsis "Educational games for small children")
203 (description
204 "Gcompris offers a large collection of educational games for small
205children, designed to be a unified interface to integrate more educational
206games. Language-oriented games contain vocabulary, sounds, and voices for
207many different languages.
208Currently available boards include:
209@enumerate
210@item learning how to use a mouse and keyboard
211@item learning simple arithmetic
212@item learning how to read an analog clock
213@item recognize letters after hearing their names
214@item reading practice
215@item small games (memory games, jigsaw puzzles, ...)
216@end enumerate\n")
fe50813c
EF
217 (license (list license:silofl1.1 ; bundled fonts
218 license:gpl3+))))
b27aacbf 219
b84257c0
HG
220(define-public tipp10
221 (package
222 (name "tipp10")
223 (version "2.1.0")
224 (source (origin
225 (method url-fetch)
226 ;; guix download is not able to handle the download links on the
227 ;; home-page, which use '<meta http-equiv="refresh" …>'
228 (uri (string-append "mirror://debian/pool/main/"
229 "t/tipp10/tipp10_2.1.0.orig.tar.gz"))
230 (sha256
231 (base32
232 "0d387b404j88gsv6kv0rb7wxr23v5g5vl6s5l7602x8pxf7slbbx"))
808e4c14 233 ;; Apply patches in the order determined by Debian
b84257c0 234 (patches (search-patches "tipp10-fix-compiling.patch"
808e4c14
EF
235 "tipp10-remove-license-code.patch"
236 "tipp10-disable-downloader.patch"
237 "tipp10-qt5.patch"))))
b84257c0
HG
238 (build-system cmake-build-system)
239 (arguments
240 `(#:tests? #f ; packages has no tests
241 #:phases
242 (modify-phases %standard-phases
243 (add-after 'unpack 'disable-new-version-check
7cc98473
RW
244 (lambda _
245 ;; Make new version check to default to false.
246 ;; TODO: Remove the checkbox from the dialog and the check itself
247 (substitute* '("widget/settingspages.cpp" "widget/mainwindow.cpp")
248 (("settings.value(\"check_new_version\", true)")
249 "settings.value(\"check_new_version\", false)"))
250 #t))
b84257c0 251 (replace 'configure
7cc98473
RW
252 (lambda* (#:key outputs #:allow-other-keys)
253 (let ((out (assoc-ref outputs "out")))
254 ;; Make program honor $PREFIX
255 (substitute* "tipp10.pro"
256 (("\\.path = /usr/") (string-append ".path = " out "/")))
257 (substitute* "def/defines.h"
258 (("\"/usr/") (string-append "\"" out "/")))
259 ;; Recreate Makefile
946e5e8a 260 (invoke "qmake")))))))
b84257c0 261 (inputs
808e4c14
EF
262 `(("qtbase" ,qtbase)
263 ("qtmultimedia" ,qtmultimedia)))
b84257c0
HG
264 (home-page "https://www.tipp10.com/")
265 (synopsis "Touch typing tutor")
9e39ac41
RW
266 (description "Tipp10 is a touch typing tutor. The ingenious thing about
267the software is its intelligence feature: characters that are mistyped are
268repeated more frequently. Beginners will find their way around right away so
269they can start practicing without a hitch.
b84257c0
HG
270
271Useful support functions and an extensive progress tracker, topical lessons
272and the ability to create your own practice lessons make learning to type
9e39ac41 273easy.")
b84257c0 274 (license license:gpl2)))
3cfd12f3
NG
275
276(define-public snap
277 (package
278 (name "snap")
a4640f40 279 (version "6.6.0")
3cfd12f3
NG
280 (source
281 (origin
282 (method git-fetch)
283 (uri (git-reference
b0e7b699 284 (url "https://github.com/jmoenig/Snap")
458f410b 285 (commit (string-append "v" version))))
3cfd12f3
NG
286 (file-name (git-file-name name version))
287 (sha256
a4640f40 288 (base32 "1k0j0sp6zz2hnh7zc7f086zc3sld01h7sk277j6fak914yv6slzy"))))
3cfd12f3
NG
289 (build-system trivial-build-system)
290 (arguments
291 `(#:modules ((guix build utils))
292 #:builder
293 (begin
294 (use-modules (guix build utils))
295 (let* ((source (assoc-ref %build-inputs "source"))
296 (out (assoc-ref %outputs "out"))
297 (share (string-append out "/share/snap")))
298 (copy-recursively source share)
299 ;; Replace the sole minified file in the package.
3a352a44 300 (with-directory-excursion (string-append share "/src")
3cfd12f3
NG
301 (delete-file "FileSaver.min.js")
302 (symlink (string-append (assoc-ref %build-inputs "js-filesaver")
303 "/share/javascript/FileSaver.min.js")
304 "FileSaver.min.js"))
305 ;; Create a "snap" executable.
306 (let* ((bin (string-append out "/bin"))
307 (script (string-append bin "/snap"))
308 (snap (string-append share "/snap.html"))
309 (bash (string-append (assoc-ref %build-inputs "bash")
310 "/bin/sh"))
311 (xdg-open (string-append (assoc-ref %build-inputs "xdg-utils")
312 "/bin/xdg-open")))
313 (mkdir-p bin)
314 (call-with-output-file script
315 (lambda (port)
316 (format port "#!~a\n~a '~a'" bash xdg-open snap)))
317 (chmod script #o555)))
318 #t)))
319 (inputs
320 `(("bash" ,bash-minimal)
321 ("js-filesaver" ,js-filesaver)
322 ("xdg-utils" ,xdg-utils)))
323 (home-page "https://snap.berkeley.edu")
324 (synopsis "Visual, blocks based programming language")
325 (description "Snap! (formerly BYOB) is a visual, drag-and-drop
326programming language. It is an extended reimplementation of Scratch (a
327project of the Lifelong Kindergarten Group at the MIT Media Lab) that
328allows you to Build Your Own Blocks. It also features first class
329lists, first class procedures, and continuations. These added
330capabilities make it suitable for a serious introduction to computer
331science for high school or college students.
332
333This package provides a @command{snap} executable calling @command{xdg-open}
334to open the application in a web browser, for offline usage.")
335 (license license:agpl3+)))
3b2cf5c8
NG
336
337(define-public toutenclic
338 (package
339 (name "toutenclic")
f5557bde 340 (version "7.00")
3b2cf5c8
NG
341 (source
342 (origin
343 (method url-fetch)
344 (uri (string-append "http://www.bipede.fr/downloads/logiciels/"
f5557bde 345 "ToutEnClic-" version "-src.zip"))
3b2cf5c8 346 (sha256
f5557bde 347 (base32 "0xg24p925rl5bfqsq3jb2lrkidb0f3kbmay5iyxxmjsn3ra0blyh"))))
3b2cf5c8
NG
348 (build-system python-build-system)
349 (arguments
632c508c 350 `(#:tests? #f ; no tests
3b2cf5c8
NG
351 #:phases
352 (modify-phases %standard-phases
353 (delete 'build)
354 (replace 'install
355 (lambda* (#:key outputs #:allow-other-keys)
356 (let* ((out (assoc-ref outputs "out"))
357 (share (string-append out "/share/toutenclic"))
358 (pixmaps (string-append out "/share/pixmaps"))
f5557bde 359 (doc (string-append out "share/doc/" ,name "-" ,version))
3b2cf5c8 360 (bin (string-append out "/bin"))
f5557bde 361 (executable "toutenclic"))
3b2cf5c8
NG
362 ;; Install icon.
363 (install-file "toutenclic.png" pixmaps)
364 ;; Move files into "share/" directory.
f5557bde
NG
365 (for-each (lambda (f) (install-file f share))
366 (find-files "." "\\.py$"))
367 ;; Install documentation.
368 (install-file "ToutEnClic.pdf" doc)
3b2cf5c8
NG
369 ;; Create executable in "bin/".
370 (mkdir-p bin)
371 (with-directory-excursion bin
f5557bde 372 (symlink (string-append share "/" executable ".py")
3b2cf5c8
NG
373 executable)))
374 #t))
375 (add-after 'install 'create-desktop-file
376 (lambda* (#:key outputs #:allow-other-keys)
377 (let* ((out (assoc-ref outputs "out"))
378 (applications (string-append out "/share/applications")))
379 (mkdir-p applications)
380 (call-with-output-file
381 (string-append applications "/toutenclic.desktop")
382 (lambda (file)
383 (format file
384 "[Desktop Entry]~@
385 Name=ToutEnClic~@
386 Comment=For schooling without difference~@
f5557bde
NG
387 Exec=~a/bin/toutenclic~@
388 TryExec=~@*~a/bin/toutenclic~@
3b2cf5c8
NG
389 Terminal=false~@
390 Icon=toutenclic~@
391 Type=Application~%"
392 out)))
393 #t))))))
5359b601
MB
394 (native-inputs
395 `(("unzip" ,unzip)))
396 (inputs
397 `(("python-pyqt" ,python-pyqt)))
3b2cf5c8
NG
398 (synopsis "School tools for physically disabled children")
399 (description "ToutEnClic is intended to facilitate the schooling
400of physically disabled children in ordinary schools. It is both
401a multi-page virtual exercise book and a kit including pencil,
402scissors, glue, ruler, compass, protractor and square. A virtual
403keyboard is also available if the child does not have any other
404specialized device.")
405 (home-page "https://bipede.fr/contrib/")
406 (license license:gpl3)))
4f963be0
NG
407
408(define-public childsplay
409 (package
410 (name "childsplay")
411 (version "3.4")
412 (source (origin
413 (method url-fetch)
414 (uri (string-append
415 "mirror://sourceforge/schoolsplay/"
416 "childsplay-" version ".tgz"))
417 (sha256
418 (base32
419 "0z7yp2swjnbz51vn2zyfnjn40jq38l5mbh15yafmx1z3vn2z1m77"))))
420 (build-system python-build-system)
421 (arguments
422 `(#:python ,python-2
423 #:tests? #f
424 #:phases
425 (modify-phases %standard-phases
426 (add-after 'unpack 'unbundle-dejavu-font
427 (lambda* (#:key inputs #:allow-other-keys)
428 (let* ((dejavu-dir
429 (string-append (assoc-ref inputs "font-dejavu")
430 "/share/fonts/truetype"))
431 (dejavu-font
432 (string-append dejavu-dir
433 "/DejaVuSansCondensed-Bold.ttf")))
434 (substitute* "SPConstants.py"
435 (("^(TTF(BOLD)? = ).*" _ prefix)
436 (string-append prefix "'" dejavu-font "'\n")))
437 (for-each (lambda (f) (delete-file f))
438 (find-files "lib/SPData" "DejaVu"))
439 #t)))
440 (delete 'build)
441 (replace 'install
442 (lambda* (#:key outputs #:allow-other-keys)
443 (let* ((out (assoc-ref outputs "out"))
444 (pixmaps (string-append out "/share/pixmaps"))
445 (share (string-append out "/share/childsplay"))
446 (doc (string-append out "/share/doc/" ,name "-",version)))
447 ;; Install icon.
448 (install-file "lib/SPData/themes/childsplay/logo_cp.svg" pixmaps)
449 ;; Install data.
450 (mkdir-p share)
451 (for-each (lambda (f)
452 (copy-recursively f (string-append share "/" f)))
453 '("alphabet-sounds" "lib" "locale" "SPWidgets"))
454 (for-each (lambda (f) (install-file f share))
455 (find-files "." "\\.(py|dev|db)$"))
456 ;; Install documentation.
457 (mkdir-p doc)
458 (copy-recursively "docs" doc)
459 #t)))
460 (add-after 'install 'create-executable
461 (lambda* (#:key outputs inputs #:allow-other-keys)
462 (let* ((python (string-append (assoc-ref inputs "python")
463 "/bin/python"))
464 (out (assoc-ref outputs "out"))
465 (bin (string-append out "/bin"))
466 (executable (string-append bin "/childsplay")))
467 (mkdir-p bin)
468 (call-with-output-file executable
469 (lambda (file)
470 (format file
471 "~a ~a"
472 python
473 (string-append out "/share/childsplay/childsplay.py"))))
474 (chmod executable #o555)
475 #t)))
476 (add-after 'install 'create-desktop-file
477 (lambda* (#:key outputs #:allow-other-keys)
478 (let* ((out (assoc-ref outputs "out"))
479 (applications (string-append out "/share/applications")))
480 (mkdir-p applications)
481 (call-with-output-file
482 (string-append applications "/childsplay.desktop")
483 (lambda (file)
484 (format file
485 "[Desktop Entry]~@
486 Name=Childsplay~@
487 Comment=Suite of educational games for young children~@
488 Comment[ca]=Conjunt de jocs educatius per a xiquets~@
489 Comment[es]=Conjunto de juegos educativos para niños~@
490 Comment[de]=Sammlung mit lehrreichen Spielen für kleine Kinder~@
73c81ae0 491 Exec=~a/bin/childsplay~@
4f963be0
NG
492 Terminal=false~@
493 Icon=logo_cp.svg~@
494 Type=Application~@
495 Categories=Application;Game;Education;KidsGame;~@
496 Keywords=suite;children;games;young;educational;~%"
497 out)))
498 #t))))))
499 (inputs
500 `(("font-dejavu" ,font-dejavu)
501 ("pygame" ,python2-pygame)
502 ("sqlalchemy" ,python2-sqlalchemy)))
503 (synopsis "Suite of educational games for young children")
504 (description "Childsplay is a collection of educational activities
505for young children. Childsplay can be used at home, kindergartens and
506pre-schools. Childsplay is a fun and safe way to let young children
507use the computer and at the same time teach them a little math,
508letters of the alphabet, spelling, eye-hand coordination, etc.")
509 (home-page "http://www.schoolsplay.org")
510 (license license:gpl3+)))
52e7295f 511
3450bb81
NG
512(define-public omnitux
513 (package
514 (name "omnitux")
515 (version "1.2.1")
516 (source
517 (origin
518 (method url-fetch)
519 (uri (string-append "mirror://sourceforge/omnitux/omnitux/"
520 "v" version "/omnitux-" version ".tar.bz2"))
521 (sha256
522 (base32 "1wmmmbzmxd0blhn00d4g91xwavnab143a31ca3i8hrqgzh6qz9w6"))
523 (modules '((guix build utils)))
524 (snippet
525 '(begin
526 ;; Remove pre-compiled .pyc files from source.
527 (for-each delete-file (find-files "bin" "\\.pyc$"))
528 #t))))
529 (build-system python-build-system)
530 (inputs
531 `(("python2-pygame" ,python2-pygame)
532 ("python2-pygtk" ,python2-pygtk)))
533 (arguments
534 `(#:tests? #f ;no test
535 #:python ,python-2
536 #:phases
537 (modify-phases %standard-phases
538 (delete 'build) ;no setup.py
539 (replace 'install
540 (lambda* (#:key outputs #:allow-other-keys)
541 (let* ((out (assoc-ref outputs "out"))
542 (share (string-append out "/share"))
543 (data (string-append share "/omnitux")))
544 ;; Install documentation.
545 (let ((doc (string-append share "/doc/" ,name "-" ,version)))
546 (for-each (lambda (f) (install-file f doc))
547 '("LICENSE.txt" "README.txt")))
548 ;; Install data.
549 (install-file "omnitux.sh" data)
550 (for-each (lambda (d)
551 (copy-recursively d (string-append data "/" d)))
552 '("bin" "data"))
553 ;; Install the launcher.
554 (let* ((bin (string-append out "/bin"))
555 (script (string-append bin "/omnitux"))
556 (bash (string-append (assoc-ref %build-inputs "bash")
557 "/bin/bash"))
558 (python (string-append (assoc-ref %build-inputs "python")
559 "/bin/python2")))
560 (mkdir-p bin)
561 (with-output-to-file script
562 (lambda ()
563 (format #t "#!~a~%" bash)
564 (format #t
565 "cd ~a; ~a menu.py~%"
566 (string-append data "/bin")
567 python)))
568 (chmod script #o755))
569 ;; Install icon and desktop file.
570 (let ((pixmaps (string-append share "/pixmaps")))
571 (install-file "data/default/icons/Omnitux_logo.svg" pixmaps))
572 (let ((apps (string-append out "/share/applications")))
573 (mkdir-p apps)
574 (with-output-to-file (string-append apps "/omnitux.desktop")
575 (lambda _
576 (format #t
577 "[Desktop Entry]~@
578 Name=Omnitux~@
579 GenericName=Omnitux
580 Comment=An educational game based on multimedia elements.~@
581 Comment[fr]=Un jeu ludo-éducatif basé sur des éléments multimédias.~@
582 Exec=~a/bin/omnitux~@
583 Type=Application~@
584 Categories=Game;Education;~@
585 Terminal=false~@
586 Icon=Omnitux_logo.svg~@"
587 out))))
588 #t))))))
589 (home-page "http://omnitux.sourceforge.net/")
590 (synopsis "Educational activities based on multimedia elements")
591 (description "The project aims to provide various educational
592activities around multimedia elements (images, sounds, texts). Types
593of activities include:
594@itemize
595@item associations,
596@item items to place on a map or a schema,
597@item counting activities,
598@item puzzles,
599@item card faces to remember,
600@item find differences between two pictures,
601@item ...
602@end itemize
603
604Activities are available in English, French, German, Polish,
605Portuguese, Spanish and Italian.")
606 ;; Project's license is GPL3+, but multimedia elements are
607 ;; released under various licenses.
608 (license (list license:gpl3+
609 license:gpl2+
610 license:cc-by-sa2.0
611 license:cc-by-sa3.0
612 license:public-domain))))
613
52e7295f
NG
614(define-public fet
615 (package
616 (name "fet")
a7e6e9ad 617 (version "5.49.0")
3e4cf41b
NG
618 (source
619 (origin
620 (method url-fetch)
621 (uri (string-append "https://www.lalescu.ro/liviu/fet/download/"
622 "fet-" version ".tar.bz2"))
623 (sha256
a7e6e9ad 624 (base32 "011bgr46bfi41hah1gr54va6arvr5zsvkk9zq2gfgavynwfnmny4"))))
52e7295f
NG
625 (build-system gnu-build-system)
626 (arguments
627 `(#:phases
628 (modify-phases %standard-phases
629 (add-after 'unpack 'fix-hardcoded-directories
630 (lambda* (#:key outputs #:allow-other-keys)
631 (substitute* (list "fet.pro"
632 "src/src.pro"
633 "src/src-cl.pro"
634 "src/interface/fet.cpp")
635 (("/usr") (assoc-ref outputs "out")))
636 #t))
637 (replace 'configure
638 (lambda _ (invoke "qmake" "fet.pro"))))))
639 (inputs
640 `(("qtbase" ,qtbase)))
641 (home-page "https://www.lalescu.ro/liviu/fet/")
642 (synopsis "Timetabling software")
a5e47130
NG
643 (description
644 "FET is a program for automatically scheduling the timetable of a school,
645high-school or university. It uses a fast and efficient timetabling
646algorithm.
52e7295f 647
a5e47130
NG
648Usually, FET is able to solve a complicated timetable in maximum 5-20 minutes.
649For extremely difficult timetables, it may take a longer time, a matter of
650hours.")
52e7295f
NG
651 (license license:agpl3+)))
652
3f19b268
EF
653(define-public klavaro
654 (package
655 (name "klavaro")
492e07ea 656 (version "3.11")
3f19b268
EF
657 (source
658 (origin
659 (method url-fetch)
660 (uri (string-append "mirror://sourceforge/klavaro/klavaro-"
661 version ".tar.bz2"))
662 (sha256
492e07ea 663 (base32 "1rkxaqb62w4mv86fcnmr32lq6y0h4hh92wmsy5ddb9a8jnzx6r7w"))))
3f19b268
EF
664 (build-system gnu-build-system)
665 (native-inputs
666 `(("intltool" ,intltool)
667 ("pkg-config" ,pkg-config)))
668 (inputs
669 `(("cairo" ,cairo)
670 ("curl" ,curl)
671 ("gtk+" ,gtk+)
672 ("pango" ,pango)))
673 (home-page "https://klavaro.sourceforge.io/en/index.html")
674 (synopsis "Touch typing tutor")
675 (description
676 "Klavaro is a simple tutor to teach correct typing, almost independently of
677language and very flexible regarding to new or unknown keyboard layouts.")
678 (license license:gpl3+)))
d2c0a7a2
EF
679
680(define-public ktouch
681 (package
682 (name "ktouch")
a1093d73 683 (version "20.12.1")
d2c0a7a2
EF
684 (source
685 (origin
686 (method url-fetch)
224d30d0 687 (uri (string-append "mirror://kde/stable/release-service/"
d2c0a7a2
EF
688 version "/src/ktouch-" version ".tar.xz"))
689 (sha256
a1093d73 690 (base32 "10lm2p8w26c9n6lhvw3301myfss0dq7hl7rawzb3hsy1lqvmvdib"))))
7d796d80 691 (build-system qt-build-system)
d2c0a7a2 692 (arguments
7d796d80 693 `(#:phases
50bdf004 694 (modify-phases %standard-phases
d2c0a7a2
EF
695 (add-after 'configure 'patch-makefiles
696 (lambda* (#:key inputs #:allow-other-keys)
697 (let ((qtdec (assoc-ref inputs "qtdeclarative")))
698 (substitute* '("src/CMakeFiles/ktouch_autogen.dir/build.make"
699 "src/CMakeFiles/ktouch.dir/build.make")
700 (("/gnu/store/.*qmlcachegen")
701 (string-append qtdec "/bin/qmlcachegen"))))
d2c0a7a2
EF
702 #t)))))
703 (native-inputs
704 `(("extra-cmake-modules" ,extra-cmake-modules)
705 ("kdoctools" ,kdoctools)
706 ("pkg-config" ,pkg-config)))
707 (inputs
708 `(("kcmutils" ,kcmutils)
709 ("kcompletion" ,kcompletion)
710 ("kconfig" ,kconfig)
711 ("kconfigwidgets" ,kconfigwidgets)
712 ("kcoreaddons" ,kcoreaddons)
713 ("kdeclarative" ,kdeclarative)
714 ("ki18n" ,ki18n)
715 ("kiconthemes" ,kiconthemes)
716 ("kitemviews" ,kitemviews)
717 ("kqtquickcharts" ,kqtquickcharts)
718 ("ktextwidgets" ,ktextwidgets)
719 ("kwidgetsaddons" ,kwidgetsaddons)
720 ("kwindowsystem" ,kwindowsystem)
721 ("kxmlgui" ,kxmlgui)
722 ("libxcb" ,libxcb)
723 ("libxkbfile" ,libxkbfile)
724 ("qtbase" ,qtbase)
725 ("qtdeclarative" ,qtdeclarative)
726 ("qtgraphicaleffects" ,qtgraphicaleffects)
727 ("qtquickcontrols2" ,qtquickcontrols2)
728 ("qtx11extras" ,qtx11extras)
729 ("qtxmlpatterns" ,qtxmlpatterns)))
730 (home-page "https://edu.kde.org/ktouch/")
731 (synopsis "Touch typing tutor")
732 (description
733 "KTouch is an aid for learning how to type with speed and accuracy. It
734provides a sample text to type and indicates which fingers should be used for
735each key. A collection of lessons are included for a wide range of different
736languages and keyboard layouts, and typing statistics are used to dynamically
737adjust the level of difficulty.")
738 (license license:gpl2)))
34208bf5 739
8534c949
RS
740(define-public anki
741 (package
742 (name "anki")
743 ;; Later versions have dependencies on npm packages not yet in Guix.
744 (version "2.1.16")
745 (source
746 (origin
747 (method url-fetch)
748 (uri (string-append "https://apps.ankiweb.net/downloads/archive/anki-"
749 version "-source.tgz"))
750 (sha256
880a3165
RS
751 (base32 "1gfr51rnllkyzli73p4r51h5ypzfa3m7lic3m3rzpywmqwrxs07k"))
752 (patches (search-patches "anki-mpv-args.patch"))))
8534c949
RS
753 (build-system gnu-build-system)
754 (arguments
755 `(#:make-flags (list (string-append "PREFIX=" %output))
756 #:tests? #f ;no check target
757 #:modules ((guix build gnu-build-system)
758 (guix build utils)
759 (ice-9 match))
760 #:phases
761 (modify-phases %standard-phases
a81a6449
TGR
762 (add-after 'unpack 'disable-update-check
763 ;; Don't ‘phone home’ unasked to check for updates.
764 (lambda _
765 (substitute* "aqt/update.py"
766 (("requests\\.post")
767 "throw.an.exception.instead"))
768 #t))
8534c949
RS
769 (delete 'configure) ;no configure script
770 (add-after 'install 'wrap
771 (lambda* (#:key inputs outputs #:allow-other-keys)
772 (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
773 ;; List of paths to the site-packages directories of Python
774 ;; library inputs.
775 (site-packages
776 (map (lambda (pyinput)
777 (string-append
778 (cdr pyinput)
779 "/lib/python"
780 ;; Calculate the python version to avoid breaking
781 ;; with future 3.X releases.
782 ,(version-major+minor
783 (package-version python-wrapper))
784 "/site-packages"))
785 (filter (match-lambda
786 ((label . _)
787 (string-prefix? "python-" label)))
788 inputs)))
789 (qtwebengineprocess
790 (string-append (assoc-ref inputs "qtwebengine")
791 "/lib/qt5/libexec/QtWebEngineProcess")))
792 ;; The program fails to find the QtWebEngineProcess program, so
793 ;; we set QTWEBENGINEPROCESS_PATH to help it. PYTHONPATH is
794 ;; wrapped to avoid declaring Python libraries as propagated
795 ;; inputs.
796 (for-each (lambda (program)
797 (wrap-program program
798 `("QTWEBENGINEPROCESS_PATH" =
799 (,qtwebengineprocess))
880a3165
RS
800 `("PATH" prefix (,(string-append
801 (assoc-ref inputs "mpv")
802 "/bin")))
8534c949
RS
803 `("PYTHONPATH" = ,site-packages)))
804 (find-files bin ".")))
805 #t)))))
806 (native-inputs
807 `(("xdg-utils" ,xdg-utils)))
808 (inputs
809 `(("lame" ,lame)
810 ("mpv" ,mpv)
811 ("python" ,python-wrapper)
812 ("python-beautifulsoup4" ,python-beautifulsoup4)
813 ("python-decorator" ,python-decorator)
814 ("python-distro" ,python-distro)
815 ("python-jsonschema" ,python-jsonschema)
816 ("python-markdown" ,python-markdown)
817 ("python-pyaudio" ,python-pyaudio)
818 ;; `python-pyqtwebengine' must precede `python-pyqt' in PYTHONPATH.
819 ("python-pyqtwebengine" ,python-pyqtwebengine)
820 ("python-pyqt" ,python-pyqt)
821 ("python-requests" ,python-requests)
822 ("python-send2trash" ,python-send2trash)
823 ("python-sip" ,python-sip)
824 ;; `qtwebengine' is included in `pyqtwebengine', included here for easy
825 ;; wrapping.
826 ("qtwebengine" ,qtwebengine)))
827 (home-page "https://apps.ankiweb.net/")
828 (synopsis "Powerful, intelligent flash cards")
829 (description "Anki is a program which makes remembering things
830easy. Because it's a lot more efficient than traditional study
831methods, you can either greatly decrease your time spent studying, or
832greatly increase the amount you learn.
833
834Anyone who needs to remember things in their daily life can benefit
835from Anki. Since it is content-agnostic and supports images, audio,
836videos and scientific markup (via LaTeX), the possibilities are
837endless. For example:
838@itemize
839@item Learning a language
840@item Studying for medical and law exams
841@item Memorizing people's names and faces
842@item Brushing up on geography
843@item Mastering long poems
844@item Even practicing guitar chords!
845@end itemize")
846 (license license:agpl3+)))
847
34208bf5
NG
848(define-public t4k-common
849 (package
850 (name "t4k-common")
851 (version "0.1.1")
852 (source
853 (origin
854 (method git-fetch)
855 (uri (git-reference
856 (url "https://github.com/tux4kids/t4kcommon")
857 (commit (string-append "upstream/" version))))
858 (file-name (git-file-name name version))
859 (sha256
860 (base32 "13q02xpmps9qg8zrzzy2gzv4a6afgi28lxk4z242j780v0gphchp"))
861 (patches
862 (search-patches "t4k-common-libpng16.patch"))))
863 (build-system cmake-build-system)
864 (arguments
865 `(#:tests? #f ;FIXME: cannot find how to run tests
866 #:phases
867 (modify-phases %standard-phases
868 (add-after 'set-paths 'set-sdl-paths
869 (lambda* (#:key inputs #:allow-other-keys)
870 (setenv "CPATH" (string-append (assoc-ref inputs "sdl")
871 "/include/SDL:"
872 (or (getenv "CPATH") "")))))
873 (add-after 'unpack 'fix-andika-font-path
874 (lambda* (#:key inputs #:allow-other-keys)
875 (substitute* "src/t4k_sdl.c"
876 (("(/usr/share/.*?)/AndikaDesRevG\\.ttf")
877 (string-append (assoc-ref inputs "font-andika")
878 "/share/fonts/truetype")))
879 #t)))))
880 (native-inputs
881 `(("pkg-config" ,pkg-config)))
882 (inputs
883 `(("font-andika" ,font-sil-andika)
884 ("libpng" ,libpng)
885 ("librsvg" ,librsvg)
886 ("libxml2" ,libxml2)
887 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net sdl-pango)))))
888 (home-page "https://github.com/tux4kids/t4kcommon")
889 (synopsis "Library of code shared between TuxMath and TuxType")
890 (description "Tux4Kids-Common is a library of code shared between
891TuxMath and TuxType.")
892 (license license:gpl3+)))
8baaf51f
NG
893
894(define-public tuxmath
895 (package
896 (name "tuxmath")
897 (version "2.0.3")
898 (source
899 (origin
900 (method git-fetch)
901 (uri (git-reference
902 (url "https://github.com/tux4kids/tuxmath")
903 (commit (string-append "upstream/" version))))
904 (file-name (git-file-name name version))
905 (sha256
906 (base32 "1f1pz83w6d3mbik2h6xavfxmk5apxlngxbkh80x0m55lhniwkdxv"))
907 (modules '((guix build utils)))
908 ;; Unbundle fonts.
909 (snippet
910 `(begin
911 (for-each delete-file (find-files "data/fonts" "\\.ttf$"))
912 #t))))
913 (build-system gnu-build-system)
914 (arguments
915 `(#:tests? #f ;no test
916 #:phases
917 (modify-phases %standard-phases
918 (add-after 'set-paths 'set-sdl-paths
919 (lambda* (#:key inputs #:allow-other-keys)
920 (setenv "CPATH"
921 (string-append (assoc-ref inputs "sdl")
922 "/include/SDL:"
923 (or (getenv "CPATH") "")))
924 #t))
925 (add-after 'install 'install-desktop-file
926 (lambda* (#:key outputs #:allow-other-keys)
927 (let* ((out (assoc-ref outputs "out"))
928 (apps (string-append out "/share/applications"))
929 (pixmaps (string-append out "/share/pixmaps")))
930 (install-file "tuxmath.desktop" apps)
931 (for-each (lambda (f) (install-file f pixmaps))
932 (find-files "data/images/icons/"
933 "tuxmath\\.(png|ico|svg)$"))
934 #t))))))
935 (native-inputs
936 `(("pkg-config" ,pkg-config)))
937 (inputs
938 `(("librsvg" ,librsvg)
939 ("libxml2" ,libxml2)
940 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net sdl-pango)))
941 ("t4k-common" ,t4k-common)))
942 (home-page "https://github.com/tux4kids/tuxmath")
943 (synopsis "Educational math tutorial game")
944 (description "@emph{Tux, of Math Command} is an educational math
945tutorial game starring Tux, the Linux penguin, in which you play the
946part of Commander Tux, as he defends his friends from an attack of
947math equations. Comets are crashing towards the friendly penguins in
948their igloos, and you must destroy the comets by solving their
949equations.
950
951TuxMath also includes Factoroids, a game that gives practice in
952factoring numbers and simplifying fractions, as well as zapping rocks
953floating through space.")
954 (license license:gpl3+)))
7adf6f1b 955
956(define-public mdk
957 (package
958 (name "mdk")
1975baae 959 (version "1.3.0")
7adf6f1b 960 (source
40541eaa
EF
961 (origin
962 (method url-fetch)
963 (uri (string-append "mirror://gnu/mdk/v" version "/mdk-"
964 version ".tar.gz"))
965 (sha256
7adf6f1b 966 (base32
1975baae 967 "0bhk3c82kyp8167h71vdpbcr852h5blpnwggcswqqwvvykbms7lb"))))
40541eaa 968 (build-system gnu-build-system)
7adf6f1b 969 (arguments
970 `(#:configure-flags (list "--enable-gui=yes" "-with-readline=yes")))
971 (native-inputs
972 `(("flex" ,flex)
0ea23218
EF
973 ("intltool" ,intltool)
974 ("pkg-config" ,pkg-config)))
40541eaa 975 (inputs
0ea23218 976 `(("glib" ,glib)
40541eaa 977 ("gtk+" ,gtk+)
0ea23218 978 ("libglade" ,libglade)
40541eaa
EF
979 ("ncurses" ,ncurses)
980 ("pango" ,pango)
0ea23218 981 ("readline" ,readline)))
1975baae 982 (home-page "https://www.gnu.org/software/mdk/manual/")
7adf6f1b 983 (synopsis "Virtual development environment for Knuth's MIX")
984 (description
985 "GNU MDK is the Mix Development Kit, an emulation of the pedagogical
986computer MIX and its assembly language MIXAL. MIX has a virtual CPU with
987standard features such as registers, memory cells, an overflow toggle,
988comparison flags, input-output devices, and a set of binary instructions.
989The package includes a compiler, a virtual machine, a GUI for the virtual
990machine, and more.")
991 (license license:gpl3+)))
648ae621
JK
992
993(define-public exercism
994 (package
995 (name "exercism")
996 (version "3.0.13")
997 (source
998 (origin
999 (method git-fetch)
1000 (uri (git-reference
1001 (url "https://github.com/exercism/cli")
1002 (commit (string-append "v" version))))
1003 (file-name (git-file-name name version))
1004 (sha256
1005 (base32
1006 "17gvz9a0sn4p36hf4l77bxhhfipf4x998iay31layqwbnzmb4xy7"))
1007 (patches (search-patches "exercism-disable-self-update.patch"))))
1008 (build-system go-build-system)
1009 (arguments
1010 `(#:import-path "github.com/exercism/cli/exercism"
4bc71b4e
JK
1011 #:unpack-path "github.com/exercism/cli"
1012 #:install-source? #f))
648ae621
JK
1013 (inputs
1014 `(("github.com/blang/semver" ,go-github-com-blang-semver)
1015 ("github.com/spf13/cobra" ,go-github-com-spf13-cobra)
1016 ("github.com/spf13/pflag" ,go-github-com-spf13-pflag)
1017 ("github.com/spf13/viper" ,go-github-com-spf13-viper)
1018 ("golang.org/x/net" ,go-golang-org-x-net)
1019 ("golang.org/x/text" ,go-golang-org-x-text)))
1020 (home-page "https://exercism.io")
1021 (synopsis "Mentored learning for programming languages")
1022 (description "Commandline client for exercism.io, a free service providing
1023mentored learning for programming languages.")
1024 (license license:expat)))