summary refs log tree commit diff
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2019-01-13 06:52:39 +0100
committerProfpatsch <mail@profpatsch.de>2019-01-13 13:06:23 +0100
commit14572e2a8c7a592e5f6880fcb46ac6f613b99d59 (patch)
treeecb9e15f6b5943b4dad0c73c4c73546616ec2b11
parentb5c6156062789adb83bf77e15b7bb28b3a6ab750 (diff)
downloadnixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.tar
nixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.tar.gz
nixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.tar.bz2
nixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.tar.lz
nixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.tar.xz
nixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.tar.zst
nixpkgs-14572e2a8c7a592e5f6880fcb46ac6f613b99d59.zip
anki: add manual output
The Anki manual is distibuted in a separate repository and has to be
patched a bit to work offline.
The in-program manual now points to our distributed offline version.
-rw-r--r--pkgs/games/anki/default.nix70
1 files changed, 63 insertions, 7 deletions
diff --git a/pkgs/games/anki/default.nix b/pkgs/games/anki/default.nix
index ad202c6ad8c..0f9b4efd61d 100644
--- a/pkgs/games/anki/default.nix
+++ b/pkgs/games/anki/default.nix
@@ -5,6 +5,7 @@
 , python
 , fetchurl
 , fetchpatch
+, fetchFromGitHub
 , lame
 , mplayer
 , libpulseaudio
@@ -24,10 +25,51 @@
 # This little flag adds a huge number of dependencies, but we assume that
 # everyone wants Anki to draw plots with statistics by default.
 , plotsSupport ? true
+# manual
+, asciidoc
 }:
 
-buildPythonApplication rec {
+let
+    # when updating, also update rev-manual to a recent version of
+    # https://github.com/dae/ankidocs
+    # The manual is distributed independently of the software.
     version = "2.1.8";
+    sha256-pkg = "08wb9hwpmbq7636h7sinim33qygdwwlh3frqqh2gfgm49f46di2p";
+    rev-manual = "3a3d32dd9bfee6f5a7f5bdad2d70938874c881fa";
+    sha256-manual = "1kz9ywbb6f42krxg8c5cwpjsnzm863vnkkn07szb3m1j85c10gjy";
+
+    manual = stdenv.mkDerivation {
+      name = "anki-manual-${version}";
+      src = fetchFromGitHub {
+        owner = "dae";
+        repo = "ankidocs";
+        rev = rev-manual;
+        sha256 = sha256-manual;
+      };
+      phases = [ "unpackPhase" "patchPhase" "buildPhase" ];
+      nativeBuildInputs = [ asciidoc ];
+      patchPhase = ''
+        # rsync isnt needed
+        # WEB is the PREFIX
+        # We remove any special ankiweb output generation
+        # and rename every .mako to .html
+        sed -e 's/rsync -a/cp -a/g' \
+            -e "s|\$(WEB)/docs|$out/share/doc/anki/html|" \
+            -e '/echo asciidoc/,/mv $@.tmp $@/c \\tasciidoc -b html5 -o $@ $<' \
+            -e 's/\.mako/.html/g' \
+            -i Makefile
+        # patch absolute links to the other language manuals
+        sed -e 's|https://apps.ankiweb.net/docs/|link:./|g' \
+            -i {manual.txt,manual.*.txt}
+        # there’s an artifact in most input files
+        sed -e '/<%def.*title.*/d' \
+            -i *.txt
+        mkdir -p $out/share/doc/anki/html
+      '';
+    };
+
+in
+buildPythonApplication rec {
     name = "anki-${version}";
 
     src = fetchurl {
@@ -37,9 +79,11 @@ buildPythonApplication rec {
         # "http://ankisrs.net/download/mirror/${name}.tgz"
         # "http://ankisrs.net/download/mirror/archive/${name}.tgz"
       ];
-      sha256 = "08wb9hwpmbq7636h7sinim33qygdwwlh3frqqh2gfgm49f46di2p";
+      sha256 = sha256-pkg;
     };
 
+    outputs = [ "out" "doc" "man" ];
+
     propagatedBuildInputs = [
       pyqt5 sqlalchemy beautifulsoup4 send2trash pyaudio requests decorator
       markdown
@@ -73,6 +117,11 @@ buildPythonApplication rec {
 
       # Remove QT translation files. We'll use the standard QT ones.
       rm "locale/"*.qm
+
+      # hitting F1 should open the local manual
+      substituteInPlace anki/consts.py \
+        --replace 'HELP_SITE="http://ankisrs.net/docs/manual.html"' \
+                  'HELP_SITE="${manual}/share/doc/anki/html/manual.html"'
     '';
 
     # UTF-8 locale needed for testing
@@ -89,8 +138,8 @@ buildPythonApplication rec {
 
       mkdir -p $out/bin
       mkdir -p $out/share/applications
-      mkdir -p $out/share/doc/anki
-      mkdir -p $out/share/man/man1
+      mkdir -p $doc/share/doc/anki
+      mkdir -p $man/share/man/man1
       mkdir -p $out/share/mime/packages
       mkdir -p $out/share/pixmaps
       mkdir -p $pp
@@ -103,16 +152,23 @@ buildPythonApplication rec {
       chmod 755 $out/bin/anki
 
       cp -v anki.desktop $out/share/applications/
-      cp -v README* LICENSE* $out/share/doc/anki/
-      cp -v anki.1 $out/share/man/man1/
+      cp -v README* LICENSE* $doc/share/doc/anki/
+      cp -v anki.1 $man/share/man/man1/
       cp -v anki.xml $out/share/mime/packages/
       cp -v anki.{png,xpm} $out/share/pixmaps/
       cp -rv locale $out/share/
       cp -rv anki aqt web $pp/
 
       wrapPythonPrograms
+
+      # copy the manual into $doc
+      cp -r ${manual}/share/doc/anki/html $doc/share/doc/anki
     '';
 
+    passthru = {
+      inherit manual;
+    };
+
     meta = with stdenv.lib; {
       homepage = "https://apps.ankiweb.net/";
       description = "Spaced repetition flashcard program";
@@ -131,6 +187,6 @@ buildPythonApplication rec {
       license = licenses.agpl3Plus;
       broken = stdenv.hostPlatform.isAarch64;
       platforms = platforms.mesaPlatforms;
-      maintainers = with maintainers; [ the-kenny ];
+      maintainers = with maintainers; [ the-kenny Profpatsch ];
     };
 }