diff options
Diffstat (limited to 'pkgs/applications/office/paperless-ng/default.nix')
-rw-r--r-- | pkgs/applications/office/paperless-ng/default.nix | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/pkgs/applications/office/paperless-ng/default.nix b/pkgs/applications/office/paperless-ng/default.nix new file mode 100644 index 00000000000..66a548545b3 --- /dev/null +++ b/pkgs/applications/office/paperless-ng/default.nix @@ -0,0 +1,197 @@ +{ lib +, fetchurl +, nixosTests +, python3 +, ghostscript +, imagemagick +, jbig2enc +, ocrmypdf +, optipng +, pngquant +, qpdf +, tesseract4 +, unpaper +, liberation_ttf +}: + +let + py = python3.override { + packageOverrides = self: super: { + django = super.django_3; + django-picklefield = super.django-picklefield.overrideAttrs (oldAttrs: { + # Checks do not pass with django 3 + doInstallCheck = false; + }); + # Avoid warning in django-q versions > 1.3.4 + # https://github.com/jonaswinkler/paperless-ng/issues/857 + # https://github.com/Koed00/django-q/issues/526 + django-q = super.django-q.overridePythonAttrs (oldAttrs: rec { + version = "1.3.4"; + src = super.fetchPypi { + inherit (oldAttrs) pname; + inherit version; + sha256 = "Uj1U3PG2YVLBtlj5FPAO07UYo0MqnezUiYc4yo274Q8="; + }; + }); + }; + }; + + path = lib.makeBinPath [ ghostscript imagemagick jbig2enc optipng pngquant qpdf tesseract4 unpaper ]; +in +py.pkgs.pythonPackages.buildPythonApplication rec { + pname = "paperless-ng"; + version = "1.4.5"; + + src = fetchurl { + url = "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-${version}/${pname}-${version}.tar.xz"; + sha256 = "2PJb8j3oimlfiJ3gqjK6uTemzFdtAP2Mlm5RH09bx/E="; + }; + + format = "other"; + + # Make bind address configurable + # Fix tests with Pillow 8.3.1: https://github.com/jonaswinkler/paperless-ng/pull/1183 + prePatch = '' + substituteInPlace gunicorn.conf.py --replace "bind = '0.0.0.0:8000'" "" + substituteInPlace src/paperless_tesseract/parsers.py --replace "return x" "return round(x)" + ''; + + propagatedBuildInputs = with py.pkgs.pythonPackages; [ + aioredis + arrow + asgiref + async-timeout + attrs + autobahn + automat + blessed + certifi + cffi + channels-redis + channels + chardet + click + coloredlogs + concurrent-log-handler + constantly + cryptography + daphne + dateparser + django-cors-headers + django_extensions + django-filter + django-picklefield + django-q + django + djangorestframework + filelock + fuzzywuzzy + gunicorn + h11 + hiredis + httptools + humanfriendly + hyperlink + idna + imap-tools + img2pdf + incremental + inotify-simple + inotifyrecursive + joblib + langdetect + lxml + msgpack + numpy + ocrmypdf + pathvalidate + pdfminer + pikepdf + pillow + pluggy + portalocker + psycopg2 + pyasn1-modules + pyasn1 + pycparser + pyopenssl + python-dateutil + python-dotenv + python-gnupg + python-Levenshtein + python_magic + pytz + pyyaml + redis + regex + reportlab + requests + scikit-learn + scipy + service-identity + six + sortedcontainers + sqlparse + threadpoolctl + tika + tqdm + twisted.extras.tls + txaio + tzlocal + urllib3 + uvicorn + uvloop + watchdog + watchgod + wcwidth + websockets + whitenoise + whoosh + zope_interface + ]; + + doCheck = true; + checkInputs = with py.pkgs.pythonPackages; [ + pytest + pytest-cov + pytest-django + pytest-env + pytest-sugar + pytest-xdist + factory_boy + ]; + + # The tests require: + # - PATH with runtime binaries + # - A temporary HOME directory for gnupg + # - XDG_DATA_DIRS with test-specific fonts + checkPhase = '' + pushd src + PATH="${path}:$PATH" HOME=$(mktemp -d) XDG_DATA_DIRS="${liberation_ttf}/share:$XDG_DATA_DIRS" pytest + popd + ''; + + installPhase = '' + mkdir -p $out/lib + cp -r . $out/lib/paperless-ng + chmod +x $out/lib/paperless-ng/src/manage.py + makeWrapper $out/lib/paperless-ng/src/manage.py $out/bin/paperless-ng \ + --prefix PYTHONPATH : "$PYTHONPATH" \ + --prefix PATH : "${path}" + ''; + + passthru = { + # PYTHONPATH of all dependencies used by the package + pythonPath = python3.pkgs.makePythonPath propagatedBuildInputs; + inherit path; + + tests = { inherit (nixosTests) paperless-ng; }; + }; + + meta = with lib; { + description = "A supercharged version of paperless: scan, index, and archive all of your physical documents"; + homepage = "https://paperless-ng.readthedocs.io/en/latest/"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ earvstedt Flakebi ]; + }; +} |