2017-11-13 13:13:17 +00:00
|
|
|
{ stdenv
|
2017-11-13 13:19:36 +00:00
|
|
|
, buildPythonApplication
|
2017-11-13 13:13:17 +00:00
|
|
|
, callPackage
|
|
|
|
, lib
|
|
|
|
, python
|
|
|
|
, fetchurl
|
2018-12-01 10:05:28 +00:00
|
|
|
, fetchpatch
|
2017-11-13 13:13:17 +00:00
|
|
|
, lame
|
|
|
|
, mplayer
|
2016-10-18 16:59:01 +01:00
|
|
|
, libpulseaudio
|
2018-11-15 02:38:07 +00:00
|
|
|
, pyqt5
|
|
|
|
, decorator
|
|
|
|
, beautifulsoup4
|
2017-11-13 13:13:17 +00:00
|
|
|
, sqlalchemy
|
|
|
|
, pyaudio
|
2018-11-15 02:38:07 +00:00
|
|
|
, requests
|
|
|
|
, markdown
|
2017-11-13 13:13:17 +00:00
|
|
|
, matplotlib
|
|
|
|
, pytest
|
|
|
|
, glibcLocales
|
|
|
|
, nose
|
2018-10-19 19:20:35 +01:00
|
|
|
, send2trash
|
2019-01-05 23:51:25 +00:00
|
|
|
, CoreAudio
|
2013-01-04 03:48:47 +00: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 09:59:12 +00:00
|
|
|
, plotsSupport ? true
|
|
|
|
}:
|
2013-01-04 03:48:47 +00:00
|
|
|
|
2018-11-15 02:38:07 +00:00
|
|
|
buildPythonApplication rec {
|
2019-01-05 23:09:10 +00:00
|
|
|
version = "2.1.8";
|
2014-02-08 18:17:18 +00:00
|
|
|
name = "anki-${version}";
|
2017-11-13 13:13:17 +00:00
|
|
|
|
2013-01-04 03:48:47 +00:00
|
|
|
src = fetchurl {
|
2014-10-23 11:54:15 +01:00
|
|
|
urls = [
|
2019-01-02 08:58:53 +00:00
|
|
|
"https://apps.ankiweb.net/downloads/current/${name}-source.tgz"
|
2018-11-15 02:38:07 +00:00
|
|
|
# "https://apps.ankiweb.net/downloads/current/${name}-source.tgz"
|
2017-08-06 14:33:50 +01:00
|
|
|
# "http://ankisrs.net/download/mirror/${name}.tgz"
|
|
|
|
# "http://ankisrs.net/download/mirror/archive/${name}.tgz"
|
2014-10-23 11:54:15 +01:00
|
|
|
];
|
2019-01-05 23:09:10 +00:00
|
|
|
sha256 = "08wb9hwpmbq7636h7sinim33qygdwwlh3frqqh2gfgm49f46di2p";
|
2013-01-04 03:48:47 +00:00
|
|
|
};
|
|
|
|
|
2019-01-05 23:51:25 +00:00
|
|
|
propagatedBuildInputs = [
|
|
|
|
pyqt5 sqlalchemy beautifulsoup4 send2trash pyaudio requests decorator
|
|
|
|
markdown
|
|
|
|
]
|
|
|
|
++ lib.optional plotsSupport matplotlib
|
|
|
|
++ lib.optional stdenv.isDarwin [ CoreAudio ]
|
|
|
|
;
|
2013-01-04 03:48:47 +00:00
|
|
|
|
2017-11-13 13:13:17 +00:00
|
|
|
checkInputs = [ pytest glibcLocales nose ];
|
2013-01-04 03:48:47 +00:00
|
|
|
|
2017-11-13 13:13:17 +00:00
|
|
|
buildInputs = [ lame mplayer libpulseaudio ];
|
2015-12-27 14:01:04 +00:00
|
|
|
|
2018-11-15 02:38:07 +00:00
|
|
|
makeWrapperArgs = [
|
|
|
|
''--prefix PATH ':' "${lame}/bin:${mplayer}/bin"''
|
|
|
|
];
|
|
|
|
|
2015-12-27 14:01:04 +00:00
|
|
|
patches = [
|
2016-01-05 20:42:31 +00:00
|
|
|
# Disable updated version check.
|
|
|
|
./no-version-check.patch
|
2015-12-27 14:01:04 +00:00
|
|
|
];
|
2015-12-22 19:31:34 +00:00
|
|
|
|
2017-11-13 13:13:17 +00:00
|
|
|
buildPhase = ''
|
|
|
|
# Dummy build phase
|
|
|
|
# Anki does not use setup.py
|
|
|
|
'';
|
|
|
|
|
2015-12-27 14:01:04 +00:00
|
|
|
postPatch = ''
|
|
|
|
# Remove unused starter. We'll create our own, minimalistic,
|
|
|
|
# starter.
|
2018-11-15 02:38:07 +00:00
|
|
|
# rm anki/anki
|
2013-01-04 03:48:47 +00:00
|
|
|
|
2015-12-27 14:01:04 +00:00
|
|
|
# Remove QT translation files. We'll use the standard QT ones.
|
|
|
|
rm "locale/"*.qm
|
2013-01-04 03:48:47 +00:00
|
|
|
'';
|
|
|
|
|
2017-11-13 13:13:17 +00:00
|
|
|
# UTF-8 locale needed for testing
|
|
|
|
LC_ALL = "en_US.UTF-8";
|
|
|
|
|
|
|
|
checkPhase = ''
|
|
|
|
# - Anki writes some files to $HOME during tests
|
|
|
|
# - Skip tests using network
|
|
|
|
env HOME=$TMP pytest --ignore tests/test_sync.py
|
|
|
|
'';
|
|
|
|
|
2015-12-27 14:01:04 +00:00
|
|
|
installPhase = ''
|
|
|
|
pp=$out/lib/${python.libPrefix}/site-packages
|
|
|
|
|
2013-01-04 03:48:47 +00:00
|
|
|
mkdir -p $out/bin
|
|
|
|
mkdir -p $out/share/applications
|
2015-12-27 14:01:04 +00:00
|
|
|
mkdir -p $out/share/doc/anki
|
2013-01-04 03:48:47 +00:00
|
|
|
mkdir -p $out/share/man/man1
|
2015-12-27 14:01:04 +00:00
|
|
|
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* $out/share/doc/anki/
|
|
|
|
cp -v anki.1 $out/share/man/man1/
|
|
|
|
cp -v anki.xml $out/share/mime/packages/
|
|
|
|
cp -v anki.{png,xpm} $out/share/pixmaps/
|
|
|
|
cp -rv locale $out/share/
|
2018-11-15 02:38:07 +00:00
|
|
|
cp -rv anki aqt web $pp/
|
2013-01-04 03:48:47 +00:00
|
|
|
|
|
|
|
wrapPythonPrograms
|
|
|
|
'';
|
|
|
|
|
2017-11-13 13:13:17 +00:00
|
|
|
meta = with stdenv.lib; {
|
2018-10-19 22:59:47 +01:00
|
|
|
homepage = "https://apps.ankiweb.net/";
|
2013-01-04 03:48:47 +00:00
|
|
|
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
|
2014-02-08 18:17:18 +00:00
|
|
|
Anki. Since it is content-agnostic and supports images, audio, videos and
|
2013-01-04 03:48:47 +00:00
|
|
|
scientific markup (via LaTeX), the possibilities are endless. For example:
|
2015-05-11 22:30:50 +01:00
|
|
|
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!
|
2013-01-04 03:48:47 +00:00
|
|
|
'';
|
2018-10-19 22:59:47 +01:00
|
|
|
license = licenses.agpl3Plus;
|
|
|
|
broken = stdenv.hostPlatform.isAarch64;
|
2017-11-13 13:13:17 +00:00
|
|
|
platforms = platforms.mesaPlatforms;
|
2018-10-19 22:59:47 +01:00
|
|
|
maintainers = with maintainers; [ the-kenny ];
|
2013-01-04 03:48:47 +00:00
|
|
|
};
|
|
|
|
}
|