gnu: mdk: Update to 1.2.11.
[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>
62a7f3b8 5;;; Copyright © 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
a5215f17 6;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
f4167bda 7;;; Copyright © 2018, 2019, 2020 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")
a5215f17 143 (version "0.98")
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
a5215f17 151 (base32 "1jmjykn0lpk0v6hs2flmch8v4da5bgxl891nav7szxw9l7aqnf4y"))))
b27aacbf
EF
152 (build-system cmake-build-system)
153 (arguments
5c105203
EF
154 `(#:phases
155 (modify-phases %standard-phases
668307c0
NG
156 (add-after 'unpack 'disable-failing-test
157 (lambda _
158 (substitute* "tests/core/CMakeLists.txt"
159 (("DownloadManagerTest\\.cpp") "#"))
160 #t))
7e48e849
EF
161 (add-before 'check 'start-xorg-server
162 (lambda* (#:key inputs #:allow-other-keys)
163 ;; The test suite requires a running X server.
164 (system (string-append (assoc-ref inputs "xorg-server")
165 "/bin/Xvfb :1 &"))
166 (setenv "DISPLAY" ":1")
167 #t))
5c105203
EF
168 (add-after 'install 'wrap-executable
169 (lambda* (#:key inputs outputs #:allow-other-keys)
170 (let ((out (assoc-ref outputs "out")))
171 (wrap-program (string-append out "/bin/gcompris-qt")
172 `("QT_PLUGIN_PATH" ":" prefix
173 ,(map (lambda (label)
174 (string-append (assoc-ref inputs label)
175 "/lib/qt5/plugins"))
176 '("qtbase" "qtdeclarative" "qtmultimedia" "qtsvg")))
177 `("QML2_IMPORT_PATH" ":" prefix
178 ,(map (lambda (label)
179 (string-append (assoc-ref inputs label)
180 "/lib/qt5/qml"))
181 '("qtdeclarative" "qtgraphicaleffects"
182 "qtmultimedia" "qtquickcontrols"))))
183 #t))))
7e48e849
EF
184 #:configure-flags (list "-DQML_BOX2D_MODULE=disabled"
185 "-DBUILD_TESTING=TRUE")))
b27aacbf
EF
186 (native-inputs
187 `(("extra-cmake-modules" ,extra-cmake-modules)
188 ("gettext" ,gettext-minimal)
668307c0 189 ("kdoctools" ,kdoctools)
5c105203 190 ("perl" ,perl)
7e48e849 191 ("qttools" ,qttools)
ff337525 192 ("xorg-server" ,xorg-server-for-tests)))
b27aacbf 193 (inputs
96ec4604
TGR
194 `(("openssl" ,openssl)
195 ("python-2" ,python-2)
5c105203
EF
196 ("qtbase" ,qtbase)
197 ("qtdeclarative" ,qtdeclarative)
198 ("qtgraphicaleffects" ,qtgraphicaleffects)
199 ("qtmultimedia" ,qtmultimedia)
200 ("qtquickcontrols" ,qtquickcontrols)
201 ("qtsensors" ,qtsensors)
202 ("qtsvg" ,qtsvg)
203 ("qtxmlpatterns" ,qtxmlpatterns)))
204 (home-page "https://gcompris.net/index-en.html")
b27aacbf
EF
205 (synopsis "Educational games for small children")
206 (description
207 "Gcompris offers a large collection of educational games for small
208children, designed to be a unified interface to integrate more educational
209games. Language-oriented games contain vocabulary, sounds, and voices for
210many different languages.
211Currently available boards include:
212@enumerate
213@item learning how to use a mouse and keyboard
214@item learning simple arithmetic
215@item learning how to read an analog clock
216@item recognize letters after hearing their names
217@item reading practice
218@item small games (memory games, jigsaw puzzles, ...)
219@end enumerate\n")
220 (license license:gpl3+)))
221
b84257c0
HG
222(define-public tipp10
223 (package
224 (name "tipp10")
225 (version "2.1.0")
226 (source (origin
227 (method url-fetch)
228 ;; guix download is not able to handle the download links on the
229 ;; home-page, which use '<meta http-equiv="refresh" …>'
230 (uri (string-append "mirror://debian/pool/main/"
231 "t/tipp10/tipp10_2.1.0.orig.tar.gz"))
232 (sha256
233 (base32
234 "0d387b404j88gsv6kv0rb7wxr23v5g5vl6s5l7602x8pxf7slbbx"))
235 (patches (search-patches "tipp10-fix-compiling.patch"
236 "tipp10-remove-license-code.patch"))))
237 (build-system cmake-build-system)
238 (arguments
239 `(#:tests? #f ; packages has no tests
240 #:phases
241 (modify-phases %standard-phases
242 (add-after 'unpack 'disable-new-version-check
7cc98473
RW
243 (lambda _
244 ;; Make new version check to default to false.
245 ;; TODO: Remove the checkbox from the dialog and the check itself
246 (substitute* '("widget/settingspages.cpp" "widget/mainwindow.cpp")
247 (("settings.value(\"check_new_version\", true)")
248 "settings.value(\"check_new_version\", false)"))
249 #t))
b84257c0 250 (replace 'configure
7cc98473
RW
251 (lambda* (#:key outputs #:allow-other-keys)
252 (let ((out (assoc-ref outputs "out")))
253 ;; Make program honor $PREFIX
254 (substitute* "tipp10.pro"
255 (("\\.path = /usr/") (string-append ".path = " out "/")))
256 (substitute* "def/defines.h"
257 (("\"/usr/") (string-append "\"" out "/")))
258 ;; Recreate Makefile
946e5e8a 259 (invoke "qmake")))))))
b84257c0
HG
260 (inputs
261 `(("qt4" ,qt-4)
262 ("sqlite" ,sqlite)))
263 (home-page "https://www.tipp10.com/")
264 (synopsis "Touch typing tutor")
9e39ac41
RW
265 (description "Tipp10 is a touch typing tutor. The ingenious thing about
266the software is its intelligence feature: characters that are mistyped are
267repeated more frequently. Beginners will find their way around right away so
268they can start practicing without a hitch.
b84257c0
HG
269
270Useful support functions and an extensive progress tracker, topical lessons
271and the ability to create your own practice lessons make learning to type
9e39ac41 272easy.")
b84257c0 273 (license license:gpl2)))
3cfd12f3
NG
274
275(define-public snap
276 (package
277 (name "snap")
08834730 278 (version "6.2.1")
3cfd12f3
NG
279 (source
280 (origin
281 (method git-fetch)
282 (uri (git-reference
b0e7b699 283 (url "https://github.com/jmoenig/Snap")
458f410b 284 (commit (string-append "v" version))))
3cfd12f3
NG
285 (file-name (git-file-name name version))
286 (sha256
08834730 287 (base32 "163pskgrssw0l6c73lrdx613fridnv0162lscl4xqx9sgg7hfaxh"))))
3cfd12f3
NG
288 (build-system trivial-build-system)
289 (arguments
290 `(#:modules ((guix build utils))
291 #:builder
292 (begin
293 (use-modules (guix build utils))
294 (let* ((source (assoc-ref %build-inputs "source"))
295 (out (assoc-ref %outputs "out"))
296 (share (string-append out "/share/snap")))
297 (copy-recursively source share)
298 ;; Replace the sole minified file in the package.
3a352a44 299 (with-directory-excursion (string-append share "/src")
3cfd12f3
NG
300 (delete-file "FileSaver.min.js")
301 (symlink (string-append (assoc-ref %build-inputs "js-filesaver")
302 "/share/javascript/FileSaver.min.js")
303 "FileSaver.min.js"))
304 ;; Create a "snap" executable.
305 (let* ((bin (string-append out "/bin"))
306 (script (string-append bin "/snap"))
307 (snap (string-append share "/snap.html"))
308 (bash (string-append (assoc-ref %build-inputs "bash")
309 "/bin/sh"))
310 (xdg-open (string-append (assoc-ref %build-inputs "xdg-utils")
311 "/bin/xdg-open")))
312 (mkdir-p bin)
313 (call-with-output-file script
314 (lambda (port)
315 (format port "#!~a\n~a '~a'" bash xdg-open snap)))
316 (chmod script #o555)))
317 #t)))
318 (inputs
319 `(("bash" ,bash-minimal)
320 ("js-filesaver" ,js-filesaver)
321 ("xdg-utils" ,xdg-utils)))
322 (home-page "https://snap.berkeley.edu")
323 (synopsis "Visual, blocks based programming language")
324 (description "Snap! (formerly BYOB) is a visual, drag-and-drop
325programming language. It is an extended reimplementation of Scratch (a
326project of the Lifelong Kindergarten Group at the MIT Media Lab) that
327allows you to Build Your Own Blocks. It also features first class
328lists, first class procedures, and continuations. These added
329capabilities make it suitable for a serious introduction to computer
330science for high school or college students.
331
332This package provides a @command{snap} executable calling @command{xdg-open}
333to open the application in a web browser, for offline usage.")
334 (license license:agpl3+)))
3b2cf5c8
NG
335
336(define-public toutenclic
337 (package
338 (name "toutenclic")
f5557bde 339 (version "7.00")
3b2cf5c8
NG
340 (source
341 (origin
342 (method url-fetch)
343 (uri (string-append "http://www.bipede.fr/downloads/logiciels/"
f5557bde 344 "ToutEnClic-" version "-src.zip"))
3b2cf5c8 345 (sha256
f5557bde 346 (base32 "0xg24p925rl5bfqsq3jb2lrkidb0f3kbmay5iyxxmjsn3ra0blyh"))))
3b2cf5c8
NG
347 (build-system python-build-system)
348 (arguments
632c508c 349 `(#:tests? #f ; no tests
3b2cf5c8
NG
350 #:phases
351 (modify-phases %standard-phases
352 (delete 'build)
353 (replace 'install
354 (lambda* (#:key outputs #:allow-other-keys)
355 (let* ((out (assoc-ref outputs "out"))
356 (share (string-append out "/share/toutenclic"))
357 (pixmaps (string-append out "/share/pixmaps"))
f5557bde 358 (doc (string-append out "share/doc/" ,name "-" ,version))
3b2cf5c8 359 (bin (string-append out "/bin"))
f5557bde 360 (executable "toutenclic"))
3b2cf5c8
NG
361 ;; Install icon.
362 (install-file "toutenclic.png" pixmaps)
363 ;; Move files into "share/" directory.
f5557bde
NG
364 (for-each (lambda (f) (install-file f share))
365 (find-files "." "\\.py$"))
366 ;; Install documentation.
367 (install-file "ToutEnClic.pdf" doc)
3b2cf5c8
NG
368 ;; Create executable in "bin/".
369 (mkdir-p bin)
370 (with-directory-excursion bin
f5557bde 371 (symlink (string-append share "/" executable ".py")
3b2cf5c8
NG
372 executable)))
373 #t))
374 (add-after 'install 'create-desktop-file
375 (lambda* (#:key outputs #:allow-other-keys)
376 (let* ((out (assoc-ref outputs "out"))
377 (applications (string-append out "/share/applications")))
378 (mkdir-p applications)
379 (call-with-output-file
380 (string-append applications "/toutenclic.desktop")
381 (lambda (file)
382 (format file
383 "[Desktop Entry]~@
384 Name=ToutEnClic~@
385 Comment=For schooling without difference~@
f5557bde
NG
386 Exec=~a/bin/toutenclic~@
387 TryExec=~@*~a/bin/toutenclic~@
3b2cf5c8
NG
388 Terminal=false~@
389 Icon=toutenclic~@
390 Type=Application~%"
391 out)))
392 #t))))))
5359b601
MB
393 (native-inputs
394 `(("unzip" ,unzip)))
395 (inputs
396 `(("python-pyqt" ,python-pyqt)))
3b2cf5c8
NG
397 (synopsis "School tools for physically disabled children")
398 (description "ToutEnClic is intended to facilitate the schooling
399of physically disabled children in ordinary schools. It is both
400a multi-page virtual exercise book and a kit including pencil,
401scissors, glue, ruler, compass, protractor and square. A virtual
402keyboard is also available if the child does not have any other
403specialized device.")
404 (home-page "https://bipede.fr/contrib/")
405 (license license:gpl3)))
4f963be0
NG
406
407(define-public childsplay
408 (package
409 (name "childsplay")
410 (version "3.4")
411 (source (origin
412 (method url-fetch)
413 (uri (string-append
414 "mirror://sourceforge/schoolsplay/"
415 "childsplay-" version ".tgz"))
416 (sha256
417 (base32
418 "0z7yp2swjnbz51vn2zyfnjn40jq38l5mbh15yafmx1z3vn2z1m77"))))
419 (build-system python-build-system)
420 (arguments
421 `(#:python ,python-2
422 #:tests? #f
423 #:phases
424 (modify-phases %standard-phases
425 (add-after 'unpack 'unbundle-dejavu-font
426 (lambda* (#:key inputs #:allow-other-keys)
427 (let* ((dejavu-dir
428 (string-append (assoc-ref inputs "font-dejavu")
429 "/share/fonts/truetype"))
430 (dejavu-font
431 (string-append dejavu-dir
432 "/DejaVuSansCondensed-Bold.ttf")))
433 (substitute* "SPConstants.py"
434 (("^(TTF(BOLD)? = ).*" _ prefix)
435 (string-append prefix "'" dejavu-font "'\n")))
436 (for-each (lambda (f) (delete-file f))
437 (find-files "lib/SPData" "DejaVu"))
438 #t)))
439 (delete 'build)
440 (replace 'install
441 (lambda* (#:key outputs #:allow-other-keys)
442 (let* ((out (assoc-ref outputs "out"))
443 (pixmaps (string-append out "/share/pixmaps"))
444 (share (string-append out "/share/childsplay"))
445 (doc (string-append out "/share/doc/" ,name "-",version)))
446 ;; Install icon.
447 (install-file "lib/SPData/themes/childsplay/logo_cp.svg" pixmaps)
448 ;; Install data.
449 (mkdir-p share)
450 (for-each (lambda (f)
451 (copy-recursively f (string-append share "/" f)))
452 '("alphabet-sounds" "lib" "locale" "SPWidgets"))
453 (for-each (lambda (f) (install-file f share))
454 (find-files "." "\\.(py|dev|db)$"))
455 ;; Install documentation.
456 (mkdir-p doc)
457 (copy-recursively "docs" doc)
458 #t)))
459 (add-after 'install 'create-executable
460 (lambda* (#:key outputs inputs #:allow-other-keys)
461 (let* ((python (string-append (assoc-ref inputs "python")
462 "/bin/python"))
463 (out (assoc-ref outputs "out"))
464 (bin (string-append out "/bin"))
465 (executable (string-append bin "/childsplay")))
466 (mkdir-p bin)
467 (call-with-output-file executable
468 (lambda (file)
469 (format file
470 "~a ~a"
471 python
472 (string-append out "/share/childsplay/childsplay.py"))))
473 (chmod executable #o555)
474 #t)))
475 (add-after 'install 'create-desktop-file
476 (lambda* (#:key outputs #:allow-other-keys)
477 (let* ((out (assoc-ref outputs "out"))
478 (applications (string-append out "/share/applications")))
479 (mkdir-p applications)
480 (call-with-output-file
481 (string-append applications "/childsplay.desktop")
482 (lambda (file)
483 (format file
484 "[Desktop Entry]~@
485 Name=Childsplay~@
486 Comment=Suite of educational games for young children~@
487 Comment[ca]=Conjunt de jocs educatius per a xiquets~@
488 Comment[es]=Conjunto de juegos educativos para niños~@
489 Comment[de]=Sammlung mit lehrreichen Spielen für kleine Kinder~@
73c81ae0 490 Exec=~a/bin/childsplay~@
4f963be0
NG
491 Terminal=false~@
492 Icon=logo_cp.svg~@
493 Type=Application~@
494 Categories=Application;Game;Education;KidsGame;~@
495 Keywords=suite;children;games;young;educational;~%"
496 out)))
497 #t))))))
498 (inputs
499 `(("font-dejavu" ,font-dejavu)
500 ("pygame" ,python2-pygame)
501 ("sqlalchemy" ,python2-sqlalchemy)))
502 (synopsis "Suite of educational games for young children")
503 (description "Childsplay is a collection of educational activities
504for young children. Childsplay can be used at home, kindergartens and
505pre-schools. Childsplay is a fun and safe way to let young children
506use the computer and at the same time teach them a little math,
507letters of the alphabet, spelling, eye-hand coordination, etc.")
508 (home-page "http://www.schoolsplay.org")
509 (license license:gpl3+)))
52e7295f 510
3450bb81
NG
511(define-public omnitux
512 (package
513 (name "omnitux")
514 (version "1.2.1")
515 (source
516 (origin
517 (method url-fetch)
518 (uri (string-append "mirror://sourceforge/omnitux/omnitux/"
519 "v" version "/omnitux-" version ".tar.bz2"))
520 (sha256
521 (base32 "1wmmmbzmxd0blhn00d4g91xwavnab143a31ca3i8hrqgzh6qz9w6"))
522 (modules '((guix build utils)))
523 (snippet
524 '(begin
525 ;; Remove pre-compiled .pyc files from source.
526 (for-each delete-file (find-files "bin" "\\.pyc$"))
527 #t))))
528 (build-system python-build-system)
529 (inputs
530 `(("python2-pygame" ,python2-pygame)
531 ("python2-pygtk" ,python2-pygtk)))
532 (arguments
533 `(#:tests? #f ;no test
534 #:python ,python-2
535 #:phases
536 (modify-phases %standard-phases
537 (delete 'build) ;no setup.py
538 (replace 'install
539 (lambda* (#:key outputs #:allow-other-keys)
540 (let* ((out (assoc-ref outputs "out"))
541 (share (string-append out "/share"))
542 (data (string-append share "/omnitux")))
543 ;; Install documentation.
544 (let ((doc (string-append share "/doc/" ,name "-" ,version)))
545 (for-each (lambda (f) (install-file f doc))
546 '("LICENSE.txt" "README.txt")))
547 ;; Install data.
548 (install-file "omnitux.sh" data)
549 (for-each (lambda (d)
550 (copy-recursively d (string-append data "/" d)))
551 '("bin" "data"))
552 ;; Install the launcher.
553 (let* ((bin (string-append out "/bin"))
554 (script (string-append bin "/omnitux"))
555 (bash (string-append (assoc-ref %build-inputs "bash")
556 "/bin/bash"))
557 (python (string-append (assoc-ref %build-inputs "python")
558 "/bin/python2")))
559 (mkdir-p bin)
560 (with-output-to-file script
561 (lambda ()
562 (format #t "#!~a~%" bash)
563 (format #t
564 "cd ~a; ~a menu.py~%"
565 (string-append data "/bin")
566 python)))
567 (chmod script #o755))
568 ;; Install icon and desktop file.
569 (let ((pixmaps (string-append share "/pixmaps")))
570 (install-file "data/default/icons/Omnitux_logo.svg" pixmaps))
571 (let ((apps (string-append out "/share/applications")))
572 (mkdir-p apps)
573 (with-output-to-file (string-append apps "/omnitux.desktop")
574 (lambda _
575 (format #t
576 "[Desktop Entry]~@
577 Name=Omnitux~@
578 GenericName=Omnitux
579 Comment=An educational game based on multimedia elements.~@
580 Comment[fr]=Un jeu ludo-éducatif basé sur des éléments multimédias.~@
581 Exec=~a/bin/omnitux~@
582 Type=Application~@
583 Categories=Game;Education;~@
584 Terminal=false~@
585 Icon=Omnitux_logo.svg~@"
586 out))))
587 #t))))))
588 (home-page "http://omnitux.sourceforge.net/")
589 (synopsis "Educational activities based on multimedia elements")
590 (description "The project aims to provide various educational
591activities around multimedia elements (images, sounds, texts). Types
592of activities include:
593@itemize
594@item associations,
595@item items to place on a map or a schema,
596@item counting activities,
597@item puzzles,
598@item card faces to remember,
599@item find differences between two pictures,
600@item ...
601@end itemize
602
603Activities are available in English, French, German, Polish,
604Portuguese, Spanish and Italian.")
605 ;; Project's license is GPL3+, but multimedia elements are
606 ;; released under various licenses.
607 (license (list license:gpl3+
608 license:gpl2+
609 license:cc-by-sa2.0
610 license:cc-by-sa3.0
611 license:public-domain))))
612
52e7295f
NG
613(define-public fet
614 (package
615 (name "fet")
c4d3eb56 616 (version "5.47.0")
3e4cf41b
NG
617 (source
618 (origin
619 (method url-fetch)
620 (uri (string-append "https://www.lalescu.ro/liviu/fet/download/"
621 "fet-" version ".tar.bz2"))
622 (sha256
c4d3eb56 623 (base32 "1a4mzzd6qy7hpb3yvmf922dbrqrzacz60ld8dsds78m018jf9gaj"))))
52e7295f
NG
624 (build-system gnu-build-system)
625 (arguments
626 `(#:phases
627 (modify-phases %standard-phases
628 (add-after 'unpack 'fix-hardcoded-directories
629 (lambda* (#:key outputs #:allow-other-keys)
630 (substitute* (list "fet.pro"
631 "src/src.pro"
632 "src/src-cl.pro"
633 "src/interface/fet.cpp")
634 (("/usr") (assoc-ref outputs "out")))
635 #t))
636 (replace 'configure
637 (lambda _ (invoke "qmake" "fet.pro"))))))
638 (inputs
639 `(("qtbase" ,qtbase)))
640 (home-page "https://www.lalescu.ro/liviu/fet/")
641 (synopsis "Timetabling software")
a5e47130
NG
642 (description
643 "FET is a program for automatically scheduling the timetable of a school,
644high-school or university. It uses a fast and efficient timetabling
645algorithm.
52e7295f 646
a5e47130
NG
647Usually, FET is able to solve a complicated timetable in maximum 5-20 minutes.
648For extremely difficult timetables, it may take a longer time, a matter of
649hours.")
52e7295f
NG
650 (license license:agpl3+)))
651
3f19b268
EF
652(define-public klavaro
653 (package
654 (name "klavaro")
492e07ea 655 (version "3.11")
3f19b268
EF
656 (source
657 (origin
658 (method url-fetch)
659 (uri (string-append "mirror://sourceforge/klavaro/klavaro-"
660 version ".tar.bz2"))
661 (sha256
492e07ea 662 (base32 "1rkxaqb62w4mv86fcnmr32lq6y0h4hh92wmsy5ddb9a8jnzx6r7w"))))
3f19b268
EF
663 (build-system gnu-build-system)
664 (native-inputs
665 `(("intltool" ,intltool)
666 ("pkg-config" ,pkg-config)))
667 (inputs
668 `(("cairo" ,cairo)
669 ("curl" ,curl)
670 ("gtk+" ,gtk+)
671 ("pango" ,pango)))
672 (home-page "https://klavaro.sourceforge.io/en/index.html")
673 (synopsis "Touch typing tutor")
674 (description
675 "Klavaro is a simple tutor to teach correct typing, almost independently of
676language and very flexible regarding to new or unknown keyboard layouts.")
677 (license license:gpl3+)))
d2c0a7a2
EF
678
679(define-public ktouch
680 (package
681 (name "ktouch")
15ffff8b 682 (version "19.08.3")
d2c0a7a2
EF
683 (source
684 (origin
685 (method url-fetch)
686 (uri (string-append "mirror://kde/stable/applications/"
687 version "/src/ktouch-" version ".tar.xz"))
688 (sha256
689 (base32
15ffff8b 690 "0dqxb3xsjc2rwc9779l5fnr4crhq51bc8ln4azbgnnkzldvq6a4a"))))
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")
62a7f3b8 959 (version "1.2.11")
7adf6f1b 960 (source
961 (origin
962 (method url-fetch)
62a7f3b8 963 (uri (string-append "mirror://gnu/mdk/v" version "/mdk-"
7adf6f1b 964 version ".tar.gz"))
965 (sha256
966 (base32
62a7f3b8 967 "0rrac91ynya4jrhv14j9vvn21c5z80hi1zmmdxjb0d9zz6i7kjgb"))))
7adf6f1b 968 (build-system gnu-build-system)
969 (arguments
970 `(#:configure-flags (list "--enable-gui=yes" "-with-readline=yes")))
971 (native-inputs
972 `(("flex" ,flex)
973 ("pkg-config" ,pkg-config)
62a7f3b8 974 ("intltool" ,intltool)))
7adf6f1b 975 (inputs
976 `(("readline" ,readline)
977 ("glib" ,glib)
978 ("gtk+" ,gtk+)
62a7f3b8 979 ("ncurses" ,ncurses)
7adf6f1b 980 ("pango" ,pango)
981 ("libglade" ,libglade)))
982 (home-page "https://www.gnu.org/software/mdk/")
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)))