gnu: emacs-svg-icon: Fix grammar.
[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")
e559288c 617 (version "5.49.1")
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
e559288c 624 (base32 "1aa8xnhwvbhvp7yigcdk7qdwqh59yyfknqbpn3ybgjljc22m8w5n"))))
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")
b57f342a 656 (version "3.12")
3f19b268
EF
657 (source
658 (origin
659 (method url-fetch)
660 (uri (string-append "mirror://sourceforge/klavaro/klavaro-"
661 version ".tar.bz2"))
662 (sha256
b57f342a 663 (base32 "0ymrmgllyjk9wp1f1ayw51xc3myar8ld9a5531wdbrym0xzy4l64"))))
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+)
b57f342a 672 ("gtkdatabox" ,gtkdatabox)
3f19b268
EF
673 ("pango" ,pango)))
674 (home-page "https://klavaro.sourceforge.io/en/index.html")
675 (synopsis "Touch typing tutor")
676 (description
677 "Klavaro is a simple tutor to teach correct typing, almost independently of
678language and very flexible regarding to new or unknown keyboard layouts.")
679 (license license:gpl3+)))
d2c0a7a2
EF
680
681(define-public ktouch
682 (package
683 (name "ktouch")
a1093d73 684 (version "20.12.1")
d2c0a7a2
EF
685 (source
686 (origin
687 (method url-fetch)
224d30d0 688 (uri (string-append "mirror://kde/stable/release-service/"
d2c0a7a2
EF
689 version "/src/ktouch-" version ".tar.xz"))
690 (sha256
a1093d73 691 (base32 "10lm2p8w26c9n6lhvw3301myfss0dq7hl7rawzb3hsy1lqvmvdib"))))
7d796d80 692 (build-system qt-build-system)
d2c0a7a2
EF
693 (native-inputs
694 `(("extra-cmake-modules" ,extra-cmake-modules)
695 ("kdoctools" ,kdoctools)
696 ("pkg-config" ,pkg-config)))
697 (inputs
698 `(("kcmutils" ,kcmutils)
699 ("kcompletion" ,kcompletion)
700 ("kconfig" ,kconfig)
701 ("kconfigwidgets" ,kconfigwidgets)
702 ("kcoreaddons" ,kcoreaddons)
703 ("kdeclarative" ,kdeclarative)
704 ("ki18n" ,ki18n)
705 ("kiconthemes" ,kiconthemes)
706 ("kitemviews" ,kitemviews)
707 ("kqtquickcharts" ,kqtquickcharts)
708 ("ktextwidgets" ,ktextwidgets)
709 ("kwidgetsaddons" ,kwidgetsaddons)
710 ("kwindowsystem" ,kwindowsystem)
711 ("kxmlgui" ,kxmlgui)
712 ("libxcb" ,libxcb)
713 ("libxkbfile" ,libxkbfile)
714 ("qtbase" ,qtbase)
715 ("qtdeclarative" ,qtdeclarative)
716 ("qtgraphicaleffects" ,qtgraphicaleffects)
717 ("qtquickcontrols2" ,qtquickcontrols2)
718 ("qtx11extras" ,qtx11extras)
719 ("qtxmlpatterns" ,qtxmlpatterns)))
720 (home-page "https://edu.kde.org/ktouch/")
721 (synopsis "Touch typing tutor")
722 (description
723 "KTouch is an aid for learning how to type with speed and accuracy. It
724provides a sample text to type and indicates which fingers should be used for
725each key. A collection of lessons are included for a wide range of different
726languages and keyboard layouts, and typing statistics are used to dynamically
727adjust the level of difficulty.")
728 (license license:gpl2)))
34208bf5 729
8534c949
RS
730(define-public anki
731 (package
732 (name "anki")
733 ;; Later versions have dependencies on npm packages not yet in Guix.
734 (version "2.1.16")
735 (source
736 (origin
737 (method url-fetch)
738 (uri (string-append "https://apps.ankiweb.net/downloads/archive/anki-"
739 version "-source.tgz"))
740 (sha256
880a3165
RS
741 (base32 "1gfr51rnllkyzli73p4r51h5ypzfa3m7lic3m3rzpywmqwrxs07k"))
742 (patches (search-patches "anki-mpv-args.patch"))))
8534c949
RS
743 (build-system gnu-build-system)
744 (arguments
745 `(#:make-flags (list (string-append "PREFIX=" %output))
746 #:tests? #f ;no check target
747 #:modules ((guix build gnu-build-system)
748 (guix build utils)
749 (ice-9 match))
750 #:phases
751 (modify-phases %standard-phases
a81a6449
TGR
752 (add-after 'unpack 'disable-update-check
753 ;; Don't ‘phone home’ unasked to check for updates.
754 (lambda _
755 (substitute* "aqt/update.py"
756 (("requests\\.post")
757 "throw.an.exception.instead"))
758 #t))
8534c949
RS
759 (delete 'configure) ;no configure script
760 (add-after 'install 'wrap
761 (lambda* (#:key inputs outputs #:allow-other-keys)
762 (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
763 ;; List of paths to the site-packages directories of Python
764 ;; library inputs.
765 (site-packages
766 (map (lambda (pyinput)
767 (string-append
768 (cdr pyinput)
769 "/lib/python"
770 ;; Calculate the python version to avoid breaking
771 ;; with future 3.X releases.
772 ,(version-major+minor
773 (package-version python-wrapper))
774 "/site-packages"))
775 (filter (match-lambda
776 ((label . _)
777 (string-prefix? "python-" label)))
778 inputs)))
779 (qtwebengineprocess
780 (string-append (assoc-ref inputs "qtwebengine")
781 "/lib/qt5/libexec/QtWebEngineProcess")))
782 ;; The program fails to find the QtWebEngineProcess program, so
783 ;; we set QTWEBENGINEPROCESS_PATH to help it. PYTHONPATH is
784 ;; wrapped to avoid declaring Python libraries as propagated
785 ;; inputs.
786 (for-each (lambda (program)
787 (wrap-program program
788 `("QTWEBENGINEPROCESS_PATH" =
789 (,qtwebengineprocess))
880a3165
RS
790 `("PATH" prefix (,(string-append
791 (assoc-ref inputs "mpv")
792 "/bin")))
8534c949
RS
793 `("PYTHONPATH" = ,site-packages)))
794 (find-files bin ".")))
795 #t)))))
796 (native-inputs
797 `(("xdg-utils" ,xdg-utils)))
798 (inputs
799 `(("lame" ,lame)
800 ("mpv" ,mpv)
801 ("python" ,python-wrapper)
802 ("python-beautifulsoup4" ,python-beautifulsoup4)
803 ("python-decorator" ,python-decorator)
804 ("python-distro" ,python-distro)
805 ("python-jsonschema" ,python-jsonschema)
806 ("python-markdown" ,python-markdown)
807 ("python-pyaudio" ,python-pyaudio)
808 ;; `python-pyqtwebengine' must precede `python-pyqt' in PYTHONPATH.
809 ("python-pyqtwebengine" ,python-pyqtwebengine)
810 ("python-pyqt" ,python-pyqt)
811 ("python-requests" ,python-requests)
812 ("python-send2trash" ,python-send2trash)
813 ("python-sip" ,python-sip)
814 ;; `qtwebengine' is included in `pyqtwebengine', included here for easy
815 ;; wrapping.
816 ("qtwebengine" ,qtwebengine)))
817 (home-page "https://apps.ankiweb.net/")
818 (synopsis "Powerful, intelligent flash cards")
819 (description "Anki is a program which makes remembering things
820easy. Because it's a lot more efficient than traditional study
821methods, you can either greatly decrease your time spent studying, or
822greatly increase the amount you learn.
823
824Anyone who needs to remember things in their daily life can benefit
825from Anki. Since it is content-agnostic and supports images, audio,
826videos and scientific markup (via LaTeX), the possibilities are
827endless. For example:
828@itemize
829@item Learning a language
830@item Studying for medical and law exams
831@item Memorizing people's names and faces
832@item Brushing up on geography
833@item Mastering long poems
834@item Even practicing guitar chords!
835@end itemize")
836 (license license:agpl3+)))
837
34208bf5
NG
838(define-public t4k-common
839 (package
840 (name "t4k-common")
841 (version "0.1.1")
842 (source
843 (origin
844 (method git-fetch)
845 (uri (git-reference
846 (url "https://github.com/tux4kids/t4kcommon")
847 (commit (string-append "upstream/" version))))
848 (file-name (git-file-name name version))
849 (sha256
850 (base32 "13q02xpmps9qg8zrzzy2gzv4a6afgi28lxk4z242j780v0gphchp"))
851 (patches
852 (search-patches "t4k-common-libpng16.patch"))))
853 (build-system cmake-build-system)
854 (arguments
855 `(#:tests? #f ;FIXME: cannot find how to run tests
856 #:phases
857 (modify-phases %standard-phases
858 (add-after 'set-paths 'set-sdl-paths
859 (lambda* (#:key inputs #:allow-other-keys)
860 (setenv "CPATH" (string-append (assoc-ref inputs "sdl")
861 "/include/SDL:"
862 (or (getenv "CPATH") "")))))
863 (add-after 'unpack 'fix-andika-font-path
864 (lambda* (#:key inputs #:allow-other-keys)
865 (substitute* "src/t4k_sdl.c"
866 (("(/usr/share/.*?)/AndikaDesRevG\\.ttf")
867 (string-append (assoc-ref inputs "font-andika")
868 "/share/fonts/truetype")))
869 #t)))))
870 (native-inputs
871 `(("pkg-config" ,pkg-config)))
872 (inputs
873 `(("font-andika" ,font-sil-andika)
874 ("libpng" ,libpng)
875 ("librsvg" ,librsvg)
876 ("libxml2" ,libxml2)
877 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net sdl-pango)))))
878 (home-page "https://github.com/tux4kids/t4kcommon")
879 (synopsis "Library of code shared between TuxMath and TuxType")
880 (description "Tux4Kids-Common is a library of code shared between
881TuxMath and TuxType.")
882 (license license:gpl3+)))
8baaf51f
NG
883
884(define-public tuxmath
885 (package
886 (name "tuxmath")
887 (version "2.0.3")
888 (source
889 (origin
890 (method git-fetch)
891 (uri (git-reference
892 (url "https://github.com/tux4kids/tuxmath")
893 (commit (string-append "upstream/" version))))
894 (file-name (git-file-name name version))
895 (sha256
896 (base32 "1f1pz83w6d3mbik2h6xavfxmk5apxlngxbkh80x0m55lhniwkdxv"))
897 (modules '((guix build utils)))
898 ;; Unbundle fonts.
899 (snippet
900 `(begin
901 (for-each delete-file (find-files "data/fonts" "\\.ttf$"))
902 #t))))
903 (build-system gnu-build-system)
904 (arguments
905 `(#:tests? #f ;no test
906 #:phases
907 (modify-phases %standard-phases
908 (add-after 'set-paths 'set-sdl-paths
909 (lambda* (#:key inputs #:allow-other-keys)
910 (setenv "CPATH"
911 (string-append (assoc-ref inputs "sdl")
912 "/include/SDL:"
913 (or (getenv "CPATH") "")))
914 #t))
915 (add-after 'install 'install-desktop-file
916 (lambda* (#:key outputs #:allow-other-keys)
917 (let* ((out (assoc-ref outputs "out"))
918 (apps (string-append out "/share/applications"))
919 (pixmaps (string-append out "/share/pixmaps")))
920 (install-file "tuxmath.desktop" apps)
921 (for-each (lambda (f) (install-file f pixmaps))
922 (find-files "data/images/icons/"
923 "tuxmath\\.(png|ico|svg)$"))
924 #t))))))
925 (native-inputs
926 `(("pkg-config" ,pkg-config)))
927 (inputs
928 `(("librsvg" ,librsvg)
929 ("libxml2" ,libxml2)
930 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net sdl-pango)))
931 ("t4k-common" ,t4k-common)))
932 (home-page "https://github.com/tux4kids/tuxmath")
933 (synopsis "Educational math tutorial game")
934 (description "@emph{Tux, of Math Command} is an educational math
935tutorial game starring Tux, the Linux penguin, in which you play the
936part of Commander Tux, as he defends his friends from an attack of
937math equations. Comets are crashing towards the friendly penguins in
938their igloos, and you must destroy the comets by solving their
939equations.
940
941TuxMath also includes Factoroids, a game that gives practice in
942factoring numbers and simplifying fractions, as well as zapping rocks
943floating through space.")
944 (license license:gpl3+)))
7adf6f1b 945
946(define-public mdk
947 (package
948 (name "mdk")
1975baae 949 (version "1.3.0")
7adf6f1b 950 (source
40541eaa
EF
951 (origin
952 (method url-fetch)
953 (uri (string-append "mirror://gnu/mdk/v" version "/mdk-"
954 version ".tar.gz"))
955 (sha256
7adf6f1b 956 (base32
1975baae 957 "0bhk3c82kyp8167h71vdpbcr852h5blpnwggcswqqwvvykbms7lb"))))
40541eaa 958 (build-system gnu-build-system)
7adf6f1b 959 (arguments
960 `(#:configure-flags (list "--enable-gui=yes" "-with-readline=yes")))
961 (native-inputs
962 `(("flex" ,flex)
0ea23218
EF
963 ("intltool" ,intltool)
964 ("pkg-config" ,pkg-config)))
40541eaa 965 (inputs
0ea23218 966 `(("glib" ,glib)
40541eaa 967 ("gtk+" ,gtk+)
0ea23218 968 ("libglade" ,libglade)
40541eaa
EF
969 ("ncurses" ,ncurses)
970 ("pango" ,pango)
0ea23218 971 ("readline" ,readline)))
1975baae 972 (home-page "https://www.gnu.org/software/mdk/manual/")
7adf6f1b 973 (synopsis "Virtual development environment for Knuth's MIX")
974 (description
975 "GNU MDK is the Mix Development Kit, an emulation of the pedagogical
976computer MIX and its assembly language MIXAL. MIX has a virtual CPU with
977standard features such as registers, memory cells, an overflow toggle,
978comparison flags, input-output devices, and a set of binary instructions.
979The package includes a compiler, a virtual machine, a GUI for the virtual
980machine, and more.")
981 (license license:gpl3+)))
648ae621
JK
982
983(define-public exercism
984 (package
985 (name "exercism")
986 (version "3.0.13")
987 (source
988 (origin
989 (method git-fetch)
990 (uri (git-reference
991 (url "https://github.com/exercism/cli")
992 (commit (string-append "v" version))))
993 (file-name (git-file-name name version))
994 (sha256
995 (base32
996 "17gvz9a0sn4p36hf4l77bxhhfipf4x998iay31layqwbnzmb4xy7"))
997 (patches (search-patches "exercism-disable-self-update.patch"))))
998 (build-system go-build-system)
999 (arguments
1000 `(#:import-path "github.com/exercism/cli/exercism"
4bc71b4e
JK
1001 #:unpack-path "github.com/exercism/cli"
1002 #:install-source? #f))
648ae621
JK
1003 (inputs
1004 `(("github.com/blang/semver" ,go-github-com-blang-semver)
1005 ("github.com/spf13/cobra" ,go-github-com-spf13-cobra)
1006 ("github.com/spf13/pflag" ,go-github-com-spf13-pflag)
1007 ("github.com/spf13/viper" ,go-github-com-spf13-viper)
1008 ("golang.org/x/net" ,go-golang-org-x-net)
1009 ("golang.org/x/text" ,go-golang-org-x-text)))
1010 (home-page "https://exercism.io")
1011 (synopsis "Mentored learning for programming languages")
1012 (description "Commandline client for exercism.io, a free service providing
1013mentored learning for programming languages.")
1014 (license license:expat)))