158 lines
3.6 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
nix-update-script,
nixosTests,
python3Packages,
}:
python3Packages.buildPythonApplication rec {
pname = "calibre-web";
version = "0.6.24";
pyproject = true;
src = fetchFromGitHub {
owner = "janeczku";
repo = "calibre-web";
tag = version;
hash = "sha256-DYhlD3ly6U/e5cDlsubDyW1uKeCtB+HrpagJlNDJhyI=";
};
patches = [
# default-logger.patch switches default logger to /dev/stdout. Otherwise calibre-web tries to open a file relative
# to its location, which can't be done as the store is read-only. Log file location can later be configured using UI
# if needed.
./default-logger.patch
# DB migrations adds an env var __RUN_MIGRATIONS_ANDEXIT that, when set, instructs calibre-web to run DB migrations
# and exit. This is gonna be used to configure calibre-web declaratively, as most of its configuration parameters
# are stored in the DB.
./db-migrations.patch
];
# calibre-web doesn't follow setuptools directory structure.
postPatch = ''
mkdir -p src/calibreweb
mv cps.py src/calibreweb/__init__.py
mv cps src/calibreweb
substituteInPlace pyproject.toml \
--replace-fail 'cps = "calibreweb:main"' 'calibre-web = "calibreweb:main"'
'';
build-system = [ python3Packages.setuptools ];
dependencies = with python3Packages; [
apscheduler
babel
bleach
chardet
cryptography
flask
flask-babel
flask-httpauth
flask-limiter
flask-principal
flask-wtf
iso-639
lxml
netifaces-plus
pycountry
pypdf
python-magic
pytz
regex
requests
sqlalchemy
tornado
unidecode
urllib3
wand
];
optional-dependencies = {
comics = with python3Packages; [
comicapi
natsort
];
gdrive = with python3Packages; [
gevent
google-api-python-client
greenlet
httplib2
oauth2client
pyasn1-modules
# https://github.com/NixOS/nixpkgs/commit/bf28e24140352e2e8cb952097febff0e94ea6a1e
# pydrive2
pyyaml
rsa
uritemplate
];
gmail = with python3Packages; [
google-api-python-client
google-auth-oauthlib
];
# We don't support the goodreads feature, as the `goodreads` package is
# archived and depends on other long unmaintained packages (rauth & nose)
# goodreads = [ ];
kobo = with python3Packages; [ jsonschema ];
ldap = with python3Packages; [
flask-simpleldap
python-ldap
];
metadata = with python3Packages; [
faust-cchardet
html2text
markdown2
mutagen
py7zr
pycountry
python-dateutil
rarfile
scholarly
];
oauth = with python3Packages; [
flask-dance
sqlalchemy-utils
];
};
pythonRelaxDeps = [
"apscheduler"
"bleach"
"cryptography"
"flask"
"flask-limiter"
"lxml"
"pypdf"
"regex"
"tornado"
"unidecode"
];
nativeCheckInputs = lib.flatten (lib.attrValues optional-dependencies);
pythonImportsCheck = [ "calibreweb" ];
passthru = {
tests = lib.optionalAttrs stdenv.hostPlatform.isLinux { inherit (nixosTests) calibre-web; };
updateScript = nix-update-script { };
};
meta = {
description = "Web app for browsing, reading and downloading eBooks stored in a Calibre database";
homepage = "https://github.com/janeczku/calibre-web";
changelog = "https://github.com/janeczku/calibre-web/releases/tag/${src.tag}";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ pborzenkov ];
mainProgram = "calibre-web";
platforms = lib.platforms.all;
};
}