diff options
Diffstat (limited to 'gnu/packages/sugar.scm')
-rw-r--r-- | gnu/packages/sugar.scm | 602 |
1 files changed, 574 insertions, 28 deletions
diff --git a/gnu/packages/sugar.scm b/gnu/packages/sugar.scm index c9b8433f01..4a0de1b55a 100644 --- a/gnu/packages/sugar.scm +++ b/gnu/packages/sugar.scm @@ -18,8 +18,10 @@ (define-module (gnu packages sugar) #:use-module (gnu packages) + #:use-module (gnu packages abiword) #:use-module (gnu packages autotools) #:use-module (gnu packages base) + #:use-module (gnu packages bash) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gettext) #:use-module (gnu packages glib) @@ -27,11 +29,14 @@ #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) #:use-module (gnu packages linux) + #:use-module (gnu packages networking) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages search) + #:use-module (gnu packages sphinx) + #:use-module (gnu packages ssh) #:use-module (gnu packages time) #:use-module (gnu packages webkit) #:use-module (gnu packages xorg) @@ -80,6 +85,17 @@ (substitute* "bin/sugar.in" (("exec python3") (string-append "exec " (which "python3")))) + (substitute* "src/jarabe/main.py" + (("'metacity'") + (string-append "'" (search-input-file inputs "/bin/metacity") "'")) + (("'metacity-message") + (string-append "'" (search-input-file inputs "/bin/metacity-message")))) + (substitute* "src/jarabe/intro/window.py" + (("ssh-keygen") + (search-input-file inputs "/bin/ssh-keygen"))) + (substitute* "src/jarabe/journal/model.py" + (("xdg-user-dir") + (search-input-file inputs "/bin/xdg-user-dir"))) (substitute* "extensions/cpsection/datetime/model.py" (("/usr/share/zoneinfo/zone.tab") (search-input-file inputs "/share/zoneinfo/zone.tab"))) @@ -90,16 +106,32 @@ (dirname (search-input-file inputs "/share/mobile-broadband-provider-info/serviceproviders.xml")))) + ;; XXX: spawn_command_line_sync is not used correctly here, so + ;; we need to patch invocations. + (substitute* '("extensions/cpsection/aboutcomputer/model.py" + "src/jarabe/model/brightness.py") + (("spawn_command_line_sync\\(cmd\\)") + "spawn_command_line_sync(cmd, 0)")) + (substitute* "extensions/cpsection/aboutcomputer/model.py" + (("ethtool") + (search-input-file inputs "/sbin/ethtool"))) + (substitute* "extensions/cpsection/language/model.py" + (("'locale'") + (string-append "'" + (search-input-file inputs "/bin/locale") + "'"))) + ;; XXX: The brightness component crashes, so we disable it here. + (substitute* "src/jarabe/main.py" + (("brightness.get_instance\\(\\)") "")) ;; TODO: these locations should be set to places that exist on ;; Guix System. #; (substitute* "extensions/cpsection/background/model.py" (("\\('/usr', 'share', 'backgrounds'\\)") "('TODO')")) - #; (substitute* "src/jarabe/view/viewhelp.py" - (("/usr/share/sugar/activities/Help.activity") - "TODO")))) + (("/usr/share/sugar/activities/") + "/run/current-system/profile/share/sugar/activities/")))) (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap (lambda* (#:key inputs outputs #:allow-other-keys) (for-each @@ -107,27 +139,43 @@ (wrap-program executable `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") ,(python:site-packages inputs outputs))) - `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))) + `("GI_TYPELIB_PATH" prefix + (,(getenv "GI_TYPELIB_PATH"))))) (find-files (string-append #$output "/bin") "^sugar.*"))))))) (inputs - (list gtk+ + (list bash-minimal + ethtool + gtk+ + metacity mobile-broadband-provider-info + openssh ;for ssh-keygen python - sugar-artwork - sugar-datastore sugar-toolkit-gtk3 - tzdata)) + tzdata + xdg-user-dirs)) + ;; Some packages are propagated so that they can be used with gobject + ;; introspection at runtime; others are propagated for their dbus + ;; services. (propagated-inputs - (list gstreamer + (list gsettings-desktop-schemas + gstreamer gtk+ gtksourceview-3 libsoup-minimal-2 libwnck libxklavier network-manager + python-gwebsockets + sugar-artwork ;for cursor theme + sugar-datastore ;for org.laptop.sugar.DataStore + telepathy-gabble ;for link-local XMPP telepathy-glib - webkitgtk-with-libsoup2 - python-gwebsockets)) + ;; This is for org.freedesktop.Telepathy.AccountManager at runtime + telepathy-mission-control + telepathy-salut ;for XMPP neighborhood + ;; This is for the UPowerGlib namespace + upower + webkitgtk-with-libsoup2)) (native-inputs (list autoconf automake gettext-minimal @@ -215,10 +263,15 @@ activities and other Sugar components.") (substitute* "autogen.sh" (("^\"\\$srcdir/configure" m) (string-append "#" m))))) - (add-after 'unpack 'patch-reference-to-du - (lambda _ + (add-after 'unpack 'patch-tool-references + (lambda* (#:key inputs #:allow-other-keys) (substitute* "src/carquinyol/datastore.py" - (("/usr/bin/du") (which "du"))))) + (("/usr/bin/du") (which "du"))) + (substitute* "src/carquinyol/optimizer.py" + (("'md5sum'") + (string-append "'" + (search-input-file inputs "/bin/md5sum") + "'"))))) (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap (lambda* (#:key inputs outputs #:allow-other-keys) (for-each @@ -231,7 +284,9 @@ activities and other Sugar components.") (search-input-file outputs "bin/copy-to-journal") (search-input-file outputs "bin/datastore-service")))))))) (inputs - (list python + (list bash-minimal + coreutils + python sugar-toolkit-gtk3)) (propagated-inputs (list python-dbus @@ -271,20 +326,23 @@ and metadata, and the journal with querying and full text search.") ((guix build python-build-system) #:prefix python:) (guix build utils)) #:phases - '(modify-phases %standard-phases - (add-after 'unpack 'patch-build-system - (lambda _ - (substitute* "autogen.sh" - (("^\"\\$srcdir/configure" m) - (string-append "#" m))))) - (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap - (lambda* (#:key inputs outputs #:allow-other-keys) - (wrap-program (search-input-file outputs "bin/sugar-activity3") - `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") - ,(python:site-packages inputs outputs))) - `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))) + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-build-system + (lambda _ + (substitute* "autogen.sh" + (("^\"\\$srcdir/configure" m) + (string-append "#" m))))) + (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap + (lambda* (#:key inputs outputs #:allow-other-keys) + (wrap-program (search-input-file outputs "bin/sugar-activity3") + `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH") + ,(python:site-packages inputs outputs))) + `("GI_TYPELIB_PATH" prefix + (,(getenv "GI_TYPELIB_PATH") + ,(string-append #$output "/lib/girepository-1.0"))))))))) (inputs (list alsa-lib + bash-minimal libice libsm libx11 @@ -295,6 +353,8 @@ and metadata, and the journal with querying and full text search.") ;; The gi typelib files are needed by users of this library. (list gdk-pixbuf gobject-introspection + gstreamer ;for speech + gst-plugins-espeak gtk+ (librsvg-for-system) @@ -305,7 +365,10 @@ and metadata, and the journal with querying and full text search.") python-dbus python-decorator python-pygobject - python-six)) + python-six + + telepathy-glib + webkitgtk-with-libsoup2)) (native-inputs (list autoconf automake gettext-minimal @@ -320,3 +383,486 @@ and metadata, and the journal with querying and full text search.") build activities and other Sugar components. This is the GTK+ 3 binding of the Sugar Toolkit.") (license license:lgpl2.1+))) + + +(define-public sugar-block-party-activity + (let ((commit "a49e68ec00e647af712d8e284622722f2f78b6bf") + (revision "1")) + (package + (name "sugar-block-party-activity") + (version (git-version "11" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/block-party-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0hy82c0gn1hr34arhnh9k6mx2789ki85fkgvga4sw6gwh31278pl")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + (propagated-inputs + (list gtk+ + gstreamer + gst-plugins-base + sugar-toolkit-gtk3)) + (home-page "https://github.com/sugarlabs/block-party-activity") + (synopsis "Tetris-like game for Sugar desktop environment") + (description "Block Party is an activity for the Sugar desktop providing +a Tetris-like game.") + (license license:expat)))) + +(define-public sugar-browse-activity + (package + (name "sugar-browse-activity") + (version "207") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/browse-activity") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "01p1gfdw9fhn92didc9sq23n6a3krs6findbbmicijz91kx8kfb2")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-reference-to-gschema-compiler + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "browser.py" + (("glib-compile-schemas") + (search-input-file inputs "/bin/glib-compile-schemas"))))) + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list evince + gobject-introspection + gtk+ + (librsvg-for-system) + libsoup-minimal-2 + python-pygobject + sugar-toolkit-gtk3 + telepathy-glib + webkitgtk-with-libsoup2)) + (inputs + (list (list glib "bin"))) + (native-inputs + (list gettext-minimal)) + (home-page "https://help.sugarlabs.org/browse.html") + (synopsis "Sugar activity to browse the internet") + (description "Browse is a web browser activity for the Sugar desktop.") + (license (list license:cc0 ;metadata + license:lgpl2.0+ + license:gpl2+ + license:gpl3+)))) + +(define-public sugar-help-activity + (let ((commit "492531e95a4c60af9b85c79c59c24c06c2cd4bb3") + (revision "1")) + (package + (name "sugar-help-activity") + (version (git-version "20" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/help-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0awjbqyc9f74dx0d7fgjk42vfsygxr8jhwqiv4hpggqcawc02xv8")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'build + (lambda _ (invoke "make" "html"))) + (replace 'install + (lambda _ + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + (native-inputs + (list sugar-toolkit-gtk3 + python-sphinx)) + (home-page "https://github.com/sugarlabs/help-activity") + (synopsis "Sugar activity for accessing documentation and manuals") + (description "This is an activity for the Sugar environment which aims +to provide users with easy access to documentation and manuals.") + (license license:gpl3+)))) + +(define-public sugar-jukebox-activity + (let ((commit "e11f40c94c1c6302d3e36ddf4dc8101732ffb9d9") + (revision "1")) + (package + (name "sugar-jukebox-activity") + (version (git-version "36" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/jukebox-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0gm1cj4vrwwdriyshd27w6vc0palwpg9pnnab5axinrnkzczyk1v")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list gtk+ + gstreamer + gst-plugins-base + sugar-toolkit-gtk3)) + (inputs + (list gettext-minimal)) + (home-page "https://help.sugarlabs.org/jukebox.html") + (synopsis "Media player for the Sugar learning environment") + (description "Jukebox is the media player to play different kinds of +audio and video files including online streams. It also supports playlists +like @file{.m3u} and @file{.pls}.") + (license license:gpl2+)))) + +(define-public sugar-log-activity + (let ((commit "0c45118958be14a1844456703f0b392de250bc88") + (revision "1")) + (package + (name "sugar-log-activity") + (version (git-version "42" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/log-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0pacd677gfhyym153x5grwimk8wgm4c9k0a463pq6fdrhm1g5wpc")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-locations + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "logcollect.py" + (("'/sbin/ifconfig'") + (string-append "'" (search-input-file inputs "/bin/ifconfig") "'")) + (("'/sbin/route") + (string-append "'" (search-input-file inputs "/bin/route"))) + (("'/bin/df") + (string-append "'" (search-input-file inputs "/bin/df"))) + (("'/bin/ps") + (string-append "'" (search-input-file inputs "/bin/ps"))) + (("'/usr/bin/free") + (string-append "'" (search-input-file inputs "/bin/free"))) + (("'/usr/bin/top") + (string-append "'" (search-input-file inputs "/bin/top"))) + (("'/usr/share/sugar/activities") + "'/run/current-system/profile/share/sugar/activities")))) + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list gtk+ + sugar-toolkit-gtk3)) + (inputs + (list coreutils net-tools procps)) + (native-inputs + (list gettext-minimal)) + (home-page "https://help.sugarlabs.org/log.html") + (synopsis "Log activity for the Sugar learning environment") + (description "Log is part of the Sugar desktop. Log is used when +looking for why an activity or Sugar is not working properly.") + (license license:gpl2+)))) + +(define-public sugar-maze-activity + (package + (name "sugar-maze-activity") + (version "31") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/maze-activity") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0ai2ws3mqkxi13chy0hidd1gxiv97862r9lg8qgxb7qkxqyh6afr")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list gtk+ + telepathy-glib)) + (inputs + (list sugar-toolkit-gtk3 gettext-minimal)) + (home-page "https://github.com/sugarlabs/maze-activity") + (synopsis "Simple maze game for the Sugar learning environment") + (description "Try to make your way through an increasingly difficult path, +or you can also play with a friend!") + (license license:gpl3+))) + +(define-public sugar-read-activity + (let ((commit "25f69e41a4fa69d93c73c0c9367b4777a014b1cd") + (revision "1")) + (package + (name "sugar-read-activity") + (version (git-version "123" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/read-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "03piap3r6j58s38cza55bm16g5icrmnhl0s6kpy5hj46vaa5x4fh")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list evince + gtk+ + sugar-toolkit-gtk3 + webkitgtk-with-libsoup2)) + (inputs + (list gettext-minimal)) + (home-page "https://help.sugarlabs.org/read.html") + (synopsis "Read PDF and TXT files in the Sugar learning environment") + (description "The Read activity allows the laptop to act as a book +reader. It has a simple interface, and will view many kinds of text and +image-based book-like materials. It will have particular strengths in +handheld mode, with extremely low power consumption and simple navigation +controls.") + (license license:gpl2+)))) + +(define-public sugar-terminal-activity + (let ((commit "a1f92b9da6121bc9a6fbba2c3f3b885dd26d4617") + (revision "1")) + (package + (name "sugar-terminal-activity") + (version (git-version "47" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/terminal-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "11p7rrnlaw374h3qravhp915vdblvn07i2mnrzn7mhapkwvkg4h5")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list gtk+ + vte + sugar-toolkit-gtk3)) + (inputs + (list gettext-minimal)) + (home-page "https://help.sugarlabs.org/terminal.html") + (synopsis "Terminal activity for the Sugar learning environment") + (description "Terminal is a full-screen text mode program that provides +a Command-Line Interface (CLI) to the system.") + (license (list license:gpl2+ license:gpl3+))))) + +(define-public sugar-typing-turtle-activity + (package + (name "sugar-typing-turtle-activity") + (version "32") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/typing-turtle-activity") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0shadv9wgddjvl97kvsqb8iw1wmmfw5lzcqk78hd70pzvh4c1hmd")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-reference-to-executables + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "keyboard.py" + (("setxkbmap") + (search-input-file inputs "/bin/setxkbmap"))))) + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + (native-inputs + (list gettext-minimal sugar-toolkit-gtk3)) + (inputs + (list setxkbmap)) + (home-page "https://help.sugarlabs.org/en/typing_turtle.html") + (synopsis "Learn typing") + (description "Need some help typing? In this activity for the Sugar +environment you will learn the best way to hold your hands in order for you to +become a faster typist.") + (license license:gpl3+))) + +(define-public sugar-write-activity + (let ((commit "dd854c06378cabf0d064d8dc87b5789d2a1a7746") + (revision "1")) + (package + (name "sugar-write-activity") + (version (git-version "101" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sugarlabs/write-activity") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0lw34hf31fyfvqilzlmcz3c7zki0iqkn1zp2sv3dih016gwqg5pw")))) + (build-system python-build-system) + (arguments + (list + #:test-target "check" + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-launcher + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "activity/activity.info" + (("exec = sugar-activity3") + (string-append "exec = " + (search-input-file inputs "/bin/sugar-activity3")))))) + (replace 'install + (lambda _ + (setenv "HOME" "/tmp") + (invoke "python" "setup.py" "install" + (string-append "--prefix=" #$output))))))) + ;; All these libraries are accessed via gobject introspection. + (propagated-inputs + (list abiword + gdk-pixbuf + gtk+ + libgsf + telepathy-glib)) + (inputs + (list sugar-toolkit-gtk3 + gettext-minimal)) + (home-page "https://help.sugarlabs.org/write.html") + (synopsis "Word processor for Sugar desktop") + (description "Write is a word processor activity for the Sugar desktop. +Write embeds the AbiWord word processor, and can be used to write and edit +text documents.") + (license license:gpl2+)))) |