diff mbox series

[bug#39367] gnu: Add anki.

Message ID 20200131120112.4532-1-robertsmith@posteo.net
State Accepted
Headers show
Series [bug#39367] gnu: Add anki. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job

Commit Message

Robert Smith Jan. 31, 2020, 12:01 p.m. UTC
* gnu/packages/education.scm (anki): New variable.
---
Add package anki to guix, using a slightly outdated version to avoid NPM
dependencies
 gnu/packages/education.scm | 80 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

Comments

Nicolas Goaziou Feb. 2, 2020, 1:01 p.m. UTC | #1
Hello,

Robert Smith <robertsmith@posteo.net> writes:

> * gnu/packages/education.scm (anki): New variable.

Thank you! Some comments follow.

> +     '(#:make-flags (list (string-append "PREFIX=" %output))

OOC, isn't it automatic in gnu-build-system?

> +    (inputs
> +     `(("python" ,python-wrapper)
> +       ("qtwebengine" ,qtwebengine)
> +       ("mpv" ,mpv)
> +       ("lame" ,lame)))
> +    (propagated-inputs
> +     `(("python-pyqtwebengine" ,python-pyqtwebengine)
> +       ("python-pyqt" ,python-pyqt)
> +       ("python-beautifulsoup4" ,python-beautifulsoup4)
> +       ("python-decorator" ,python-decorator)
> +       ("python-distro" ,python-distro)
> +       ("python-markdown" ,python-markdown)
> +       ("python-jsonschema" ,python-jsonschema)
> +       ("python-pyaudio" ,python-pyaudio)
> +       ("python-requests" ,python-requests)
> +       ("python-send2trash" ,python-send2trash)
> +       ("python-sip" ,python-sip)))

Please order inputs and propagated-inputs alphabetically.

The package builds fine, but when trying to run "anki", I get the
following error:

  ModuleNotFoundError: No module named 'decorator'

It looks like you also need to wrap PYTHONPATH around the executable. WDYT?

Regards,
Robert Smith Feb. 3, 2020, 4:11 p.m. UTC | #2
On Sun Feb 2, 2020 at 2:01 PM Nicolas Goaziou wrote:
> > +     '(#:make-flags (list (string-append "PREFIX=" %output))
> 
> OOC, isn't it automatic in gnu-build-system?

For some reason I thought that this usually happened in the configure
stage, which I deleted. You're probably right, I'll double-check and fix
if necessary.

> Please order inputs and propagated-inputs alphabetically.

Will fix!
 
> The package builds fine, but when trying to run "anki", I get the
> following error:
> 
>   ModuleNotFoundError: No module named 'decorator'
> 
> It looks like you also need to wrap PYTHONPATH around the executable. WDYT?

Since Anki uses python at run time, is the proper action to wrap the
executable with the desired pythonpath, or to declare python as a
propagated input? Propagating python sounds simpler, but would likely be
inconvienent for users who need custom python versions. I'll look into
wrapping PYTHONPATH and I will resubmit. Thank you for reviewing my
patch!

Best,

Robert
Nicolas Goaziou Feb. 3, 2020, 4:18 p.m. UTC | #3
Hello,

"Robert Smith" <robertsmith@posteo.net> writes:

> Since Anki uses python at run time, is the proper action to wrap the
> executable with the desired pythonpath, or to declare python as a
> propagated input? Propagating python sounds simpler, but would likely be
> inconvienent for users who need custom python versions. I'll look into
> wrapping PYTHONPATH and I will resubmit.

As a rule of thumb, with a few exceptions—notably in
emacs-build-system—, propagated-inputs should ideally be used as a last
resort, when nothing else works.

Regards,
diff mbox series

Patch

diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 4f8d7582c7..3f1fa2ca52 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -5,6 +5,7 @@ 
 ;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@ 
 (define-module (gnu packages education)
   #:use-module (ice-9 regex)
   #:use-module (gnu packages)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
@@ -39,14 +41,18 @@ 
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages kde)
   #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages perl)
   #: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 qt)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
@@ -714,3 +720,77 @@  each key.  A collection of lessons are included for a wide range of different
 languages and keyboard layouts, and typing statistics are used to dynamically
 adjust the level of difficulty.")
     (license license:gpl2)))
+
+(define-public anki
+  (package
+    (name "anki")
+   ;; Later versions have dependencies on npm packages not yet in guix
+    (version "2.1.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://apps.ankiweb.net/downloads/archive/anki-"
+                           version "-source.tgz"))
+       (sha256
+        (base32 "1gfr51rnllkyzli73p4r51h5ypzfa3m7lic3m3rzpywmqwrxs07k"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags (list (string-append "PREFIX=" %output))
+       #:tests? #f ;no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'install 'wrap
+           ;; The program fails to find the QtWebEngineProcess program,
+           ;; so we set QTWEBENGINEPROCESS_PATH to help it.
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                   (qtwebengineprocess (string-append
+                                        (assoc-ref inputs "qtwebengine")
+                                        "/lib/qt5/libexec/QtWebEngineProcess")))
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("QTWEBENGINEPROCESS_PATH" =
+                               (,qtwebengineprocess))))
+                         (find-files bin ".*")))
+             #t)))))
+    (native-inputs
+     `(("perl" ,perl)
+       ("xdg-utils" ,xdg-utils)))
+    (inputs
+     `(("python" ,python-wrapper)
+       ("qtwebengine" ,qtwebengine)
+       ("mpv" ,mpv)
+       ("lame" ,lame)))
+    (propagated-inputs
+     `(("python-pyqtwebengine" ,python-pyqtwebengine)
+       ("python-pyqt" ,python-pyqt)
+       ("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-decorator" ,python-decorator)
+       ("python-distro" ,python-distro)
+       ("python-markdown" ,python-markdown)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-pyaudio" ,python-pyaudio)
+       ("python-requests" ,python-requests)
+       ("python-send2trash" ,python-send2trash)
+       ("python-sip" ,python-sip)))
+    (home-page "https://apps.ankiweb.net/")
+    (synopsis "Powerful, intelligent flash cards")
+    (description "Anki is a program which makes remembering things
+easy.  Because it's a lot more efficient than traditional study
+methods, you can either greatly decrease your time spent studying, or
+greatly increase the amount you learn.
+
+Anyone who needs to remember things in their daily life can benefit
+from Anki.  Since it is content-agnostic and supports images, audio,
+videos and scientific markup (via LaTeX), the possibilities are
+endless.  For example:
+@itemize
+@item Learning a language
+@item Studying for medical and law exams
+@item Memorizing people's names and faces
+@item Brushing up on geography
+@item Mastering long poems
+@item Even practicing guitar chords!
+@end itemize")
+    (license license:agpl3+)))