2017-11-13 14:13:17 +01:00
|
|
|
|
{ stdenv
|
2017-11-13 14:19:36 +01:00
|
|
|
|
, buildPythonApplication
|
2017-11-13 14:13:17 +01:00
|
|
|
|
, lib
|
|
|
|
|
, python
|
|
|
|
|
, fetchurl
|
2019-01-13 06:52:39 +01:00
|
|
|
|
, fetchFromGitHub
|
2021-01-14 17:16:49 +01:00
|
|
|
|
, fetchpatch
|
2017-11-13 14:13:17 +01:00
|
|
|
|
, lame
|
2021-01-14 17:16:49 +01:00
|
|
|
|
, mpv-unwrapped
|
2016-10-18 17:59:01 +02:00
|
|
|
|
, libpulseaudio
|
2019-08-03 14:13:45 +02:00
|
|
|
|
, pyqtwebengine
|
2018-11-15 03:38:07 +01:00
|
|
|
|
, decorator
|
|
|
|
|
, beautifulsoup4
|
2017-11-13 14:13:17 +01:00
|
|
|
|
, sqlalchemy
|
|
|
|
|
, pyaudio
|
2018-11-15 03:38:07 +01:00
|
|
|
|
, requests
|
|
|
|
|
, markdown
|
2017-11-13 14:13:17 +01:00
|
|
|
|
, matplotlib
|
|
|
|
|
, pytest
|
|
|
|
|
, glibcLocales
|
|
|
|
|
, nose
|
2019-08-31 11:40:35 +02:00
|
|
|
|
, jsonschema
|
anki: fix startup
Related: #68314
This fixes startup of anki, which currently shows this in a dialog:
Error during startup:
Traceback (most recent call last):
File "/nix/store/0h395dwc6b80n5xg93p86ywaz6kpz6ck-anki-2.1.15/lib/python3.7/site-packages/aqt/main.py", line 46, in __init__
self.setupAddons()
File "/nix/store/0h395dwc6b80n5xg93p86ywaz6kpz6ck-anki-2.1.15/lib/python3.7/site-packages/aqt/main.py", line 657, in setupAddons
import aqt.addons
File "/nix/store/0h395dwc6b80n5xg93p86ywaz6kpz6ck-anki-2.1.15/lib/python3.7/site-packages/aqt/addons.py", line 9, in <module>
import markdown
File "/nix/store/knq8798kl0xzzr7ii4bchskg1c8mq6pj-python3.7-Markdown-3.1.1/lib/python3.7/site-packages/markdown/__init__.py", line 25, in <module>
from .core import Markdown, markdown, markdownFromFile
File "/nix/store/knq8798kl0xzzr7ii4bchskg1c8mq6pj-python3.7-Markdown-3.1.1/lib/python3.7/site-packages/markdown/core.py", line 29, in <module>
import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'
2019-09-12 19:15:22 +02:00
|
|
|
|
, setuptools
|
2018-10-19 20:20:35 +02:00
|
|
|
|
, send2trash
|
2019-01-06 00:51:25 +01:00
|
|
|
|
, CoreAudio
|
2020-06-07 05:59:51 +02:00
|
|
|
|
# This little flag adds a huge number of dependencies, but we assume that
|
|
|
|
|
# everyone wants Anki to draw plots with statistics by default.
|
2016-03-15 10:59:12 +01:00
|
|
|
|
, plotsSupport ? true
|
2020-06-07 05:59:51 +02:00
|
|
|
|
# manual
|
2019-01-13 06:52:39 +01:00
|
|
|
|
, asciidoc
|
2016-03-15 10:59:12 +01:00
|
|
|
|
}:
|
2013-01-04 04:48:47 +01:00
|
|
|
|
|
2019-01-13 06:52:39 +01:00
|
|
|
|
let
|
2020-06-07 05:59:51 +02:00
|
|
|
|
# when updating, also update rev-manual to a recent version of
|
2020-06-20 06:36:47 +02:00
|
|
|
|
# https://github.com/ankitects/anki-docs
|
2020-06-07 05:59:51 +02:00
|
|
|
|
# The manual is distributed independently of the software.
|
|
|
|
|
version = "2.1.15";
|
|
|
|
|
sha256-pkg = "12dvyf3j9df4nrhhnqbzd9b21rpzkh4i6yhhangn2zf7ch0pclss";
|
|
|
|
|
rev-manual = "8f6387867ac37ef3fe9d0b986e70f898d1a49139";
|
|
|
|
|
sha256-manual = "0pm5slxn78r44ggvbksz7rv9hmlnsvn9z811r6f63dsc8vm6mfml";
|
|
|
|
|
|
|
|
|
|
manual = stdenv.mkDerivation {
|
|
|
|
|
pname = "anki-manual";
|
|
|
|
|
inherit version;
|
|
|
|
|
src = fetchFromGitHub {
|
2020-06-20 06:36:47 +02:00
|
|
|
|
owner = "ankitects";
|
|
|
|
|
repo = "anki-docs";
|
2020-06-07 05:59:51 +02:00
|
|
|
|
rev = rev-manual;
|
|
|
|
|
sha256 = sha256-manual;
|
2019-01-13 06:52:39 +01:00
|
|
|
|
};
|
2020-06-07 05:59:51 +02:00
|
|
|
|
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
|
|
|
|
|
'';
|
|
|
|
|
};
|
2019-01-13 06:52:39 +01:00
|
|
|
|
|
|
|
|
|
in
|
|
|
|
|
buildPythonApplication rec {
|
2020-06-07 05:59:51 +02:00
|
|
|
|
pname = "anki";
|
|
|
|
|
inherit version;
|
|
|
|
|
|
|
|
|
|
src = fetchurl {
|
|
|
|
|
urls = [
|
|
|
|
|
"https://apps.ankiweb.net/downloads/current/${pname}-${version}-source.tgz"
|
|
|
|
|
# "https://apps.ankiweb.net/downloads/current/${name}-source.tgz"
|
|
|
|
|
# "http://ankisrs.net/download/mirror/${name}.tgz"
|
|
|
|
|
# "http://ankisrs.net/download/mirror/archive/${name}.tgz"
|
2015-12-27 15:01:04 +01:00
|
|
|
|
];
|
2020-06-07 05:59:51 +02:00
|
|
|
|
sha256 = sha256-pkg;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
outputs = [ "out" "doc" "man" ];
|
|
|
|
|
|
|
|
|
|
propagatedBuildInputs = [
|
|
|
|
|
pyqtwebengine
|
|
|
|
|
sqlalchemy
|
|
|
|
|
beautifulsoup4
|
|
|
|
|
send2trash
|
|
|
|
|
pyaudio
|
|
|
|
|
requests
|
|
|
|
|
decorator
|
|
|
|
|
markdown
|
|
|
|
|
jsonschema
|
|
|
|
|
setuptools
|
|
|
|
|
]
|
|
|
|
|
++ lib.optional plotsSupport matplotlib
|
|
|
|
|
++ lib.optional stdenv.isDarwin [ CoreAudio ]
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
checkInputs = [ pytest glibcLocales nose ];
|
|
|
|
|
|
|
|
|
|
nativeBuildInputs = [ pyqtwebengine.wrapQtAppsHook ];
|
2021-01-14 17:16:49 +01:00
|
|
|
|
buildInputs = [ lame mpv-unwrapped libpulseaudio ];
|
2020-06-07 05:59:51 +02:00
|
|
|
|
|
|
|
|
|
patches = [
|
|
|
|
|
# Disable updated version check.
|
|
|
|
|
./no-version-check.patch
|
2021-01-14 17:16:49 +01:00
|
|
|
|
(fetchpatch {
|
|
|
|
|
name = "fix-mpv-args.patch";
|
|
|
|
|
url = "https://sources.debian.org/data/main/a/anki/2.1.15+dfsg-3/debian/patches/fix-mpv-args.patch";
|
|
|
|
|
sha256 = "1dimnnawk64m5bbdbjrxw5k08q95l728n94cgkrrwxwavmmywaj2";
|
|
|
|
|
})
|
2020-06-07 05:59:51 +02:00
|
|
|
|
];
|
|
|
|
|
|
2020-06-20 06:37:43 +02:00
|
|
|
|
# Anki does not use setup.py
|
|
|
|
|
dontBuild = true;
|
2020-06-07 05:59:51 +02:00
|
|
|
|
|
|
|
|
|
postPatch = ''
|
|
|
|
|
# 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
|
|
|
|
|
LC_ALL = "en_US.UTF-8";
|
|
|
|
|
|
2021-01-06 13:54:35 +01:00
|
|
|
|
# tests fail with to many open files
|
|
|
|
|
doCheck = !stdenv.isDarwin;
|
|
|
|
|
|
2020-06-20 06:37:43 +02:00
|
|
|
|
# - Anki writes some files to $HOME during tests
|
|
|
|
|
# - Skip tests using network
|
2020-06-07 05:59:51 +02:00
|
|
|
|
checkPhase = ''
|
2020-06-20 06:37:43 +02:00
|
|
|
|
HOME=$TMP pytest --ignore tests/test_sync.py
|
2020-06-07 05:59:51 +02:00
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
|
pp=$out/lib/${python.libPrefix}/site-packages
|
|
|
|
|
|
|
|
|
|
mkdir -p $out/bin
|
|
|
|
|
mkdir -p $out/share/applications
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
cat > $out/bin/anki <<EOF
|
|
|
|
|
#!${python}/bin/python
|
|
|
|
|
import aqt
|
|
|
|
|
aqt.run()
|
|
|
|
|
EOF
|
|
|
|
|
chmod 755 $out/bin/anki
|
|
|
|
|
|
|
|
|
|
cp -v anki.desktop $out/share/applications/
|
|
|
|
|
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/
|
|
|
|
|
|
|
|
|
|
# copy the manual into $doc
|
|
|
|
|
cp -r ${manual}/share/doc/anki/html $doc/share/doc/anki
|
|
|
|
|
'';
|
|
|
|
|
|
2020-06-20 06:37:43 +02:00
|
|
|
|
# now wrapPythonPrograms from postFixup will add both python and qt env variables
|
2020-06-07 05:59:51 +02:00
|
|
|
|
dontWrapQtApps = true;
|
|
|
|
|
|
|
|
|
|
preFixup = ''
|
|
|
|
|
makeWrapperArgs+=(
|
|
|
|
|
"''${qtWrapperArgs[@]}"
|
2021-01-14 17:16:49 +01:00
|
|
|
|
--prefix PATH ':' "${lame}/bin:${mpv-unwrapped}/bin"
|
2020-06-07 05:59:51 +02:00
|
|
|
|
)
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
passthru = {
|
|
|
|
|
inherit manual;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
meta = with lib; {
|
|
|
|
|
homepage = "https://apps.ankiweb.net/";
|
|
|
|
|
description = "Spaced repetition flashcard program";
|
|
|
|
|
longDescription = ''
|
|
|
|
|
Anki is a program which makes remembering things easy. Because it is 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:
|
|
|
|
|
learning a language, studying for medical and law exams, memorizing
|
|
|
|
|
people's names and faces, brushing up on geography, mastering long poems,
|
|
|
|
|
or even practicing guitar chords!
|
2019-12-11 00:23:57 +01:00
|
|
|
|
'';
|
2020-06-07 05:59:51 +02:00
|
|
|
|
license = licenses.agpl3Plus;
|
|
|
|
|
platforms = platforms.mesaPlatforms;
|
2021-01-06 07:06:03 +01:00
|
|
|
|
maintainers = with maintainers; [ oxij Profpatsch ];
|
2020-06-07 05:59:51 +02:00
|
|
|
|
};
|
2013-01-04 04:48:47 +01:00
|
|
|
|
}
|