nixpkgs/pkgs/by-name/we/weblate/package.nix

182 lines
3.9 KiB
Nix

{
lib,
python3,
fetchFromGitHub,
gettext,
pango,
harfbuzz,
librsvg,
gdk-pixbuf,
glib,
borgbackup,
writeText,
nixosTests,
}:
let
python = python3.override {
packageOverrides = final: prev: {
django = prev.django_5_2;
};
};
in
python.pkgs.buildPythonApplication rec {
pname = "weblate";
version = "5.14.3";
pyproject = true;
outputs = [
"out"
"static"
];
src = fetchFromGitHub {
owner = "WeblateOrg";
repo = "weblate";
tag = "weblate-${version}";
hash = "sha256-DwoJ24yGLJt+bItN/9SW0ruf+Lz3A9JxvD4QjlKaqzw=";
};
build-system = with python.pkgs; [ setuptools ];
nativeBuildInputs = [ gettext ];
# Build static files into a separate output
postBuild =
let
staticSettings = writeText "static_settings.py" ''
DEBUG = False
STATIC_ROOT = os.environ["static"]
COMPRESS_OFFLINE = True
# So we don't need postgres dependencies
DATABASES = {}
'';
in
''
mkdir $static
cat weblate/settings_example.py ${staticSettings} > weblate/settings_static.py
export DJANGO_SETTINGS_MODULE="weblate.settings_static"
${python.pythonOnBuildForHost.interpreter} manage.py compilemessages
${python.pythonOnBuildForHost.interpreter} manage.py collectstatic --no-input
${python.pythonOnBuildForHost.interpreter} manage.py compress
'';
pythonRelaxDeps = [
"certifi"
];
dependencies =
with python.pkgs;
[
aeidon
ahocorasick-rs
altcha
(toPythonModule (borgbackup.override { python3 = python; }))
celery
certifi
charset-normalizer
crispy-bootstrap3
crispy-bootstrap5
cryptography
cssselect
cython
cyrtranslit
dateparser
diff-match-patch
disposable-email-domains
django-appconf
django-celery-beat
django-compressor
django-cors-headers
django-crispy-forms
django-filter
django-redis
django-otp
django-otp-webauthn
django
djangorestframework-csv
djangorestframework
docutils
drf-spectacular
drf-standardized-errors
filelock
fluent-syntax
gitpython
hiredis
html2text
iniparse
jsonschema
lxml
mistletoe
nh3
openpyxl
packaging
phply
pillow
pycairo
pygments
pygobject3
pyicumessageformat
pyparsing
python-dateutil
qrcode
rapidfuzz
redis
requests
ruamel-yaml
sentry-sdk
siphashc
social-auth-app-django
social-auth-core
standardwebhooks
tesserocr
translate-toolkit
translation-finder
unidecode
user-agents
weblate-language-data
weblate-schemas
]
++ django.optional-dependencies.argon2
++ celery.optional-dependencies.redis
++ drf-spectacular.optional-dependencies.sidecar
++ drf-standardized-errors.optional-dependencies.openapi;
optional-dependencies = {
postgres = with python.pkgs; [ psycopg ];
};
# We don't just use wrapGAppsNoGuiHook because we need to expose GI_TYPELIB_PATH
GI_TYPELIB_PATH = lib.makeSearchPathOutput "out" "lib/girepository-1.0" [
pango
harfbuzz
librsvg
gdk-pixbuf
glib
];
makeWrapperArgs = [ "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" ];
passthru = {
inherit python;
# We need to expose this so weblate can work outside of calling its bin output
inherit GI_TYPELIB_PATH;
tests = {
inherit (nixosTests) weblate;
};
};
meta = {
description = "Web based translation tool with tight version control integration";
homepage = "https://weblate.org/";
changelog = "https://github.com/WeblateOrg/weblate/releases/tag/${src.tag}";
license = with lib.licenses; [
gpl3Plus
mit
];
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ erictapen ];
mainProgram = "weblate";
};
}