nix-packages/packages/bookwyrm/package.nix

200 lines
3.4 KiB
Nix
Raw Normal View History

2025-03-03 21:03:41 +01:00
{
fetchFromGitHub ,
pkgs ,
stdenv ,
} :
with builtins ;
with pkgs ;
2025-03-03 21:03:41 +01:00
with pkgs . kernelmaft . python ;
with pkgs . python311Packages ;
with stdenv ;
let
pythonDependencies = [
aiohappyeyeballs
aiohttp
aiosignal
amqp
asgiref
attrs
billiard
bleach
boto3
botocore
bw-file-resubmit
celery
certifi
cffi
chardet
click
colorthief
cron-descriptor
cryptography
deprecated
django
django-appconf
django-celery-beat
django-csp
django-imagekit
django-model-utils
django-oauth-toolkit
django-pgtrigger
django-sass-processor
django-storages
django-timezone-field
environs
frozenlist
googleapis-common-protos
grpcio
idna
importlib-metadata
jmespath
jwcrypto
kombu
libsass
markdown
marshmallow
multidict
oauthlib
packaging
pilkit
pillow
protobuf
psycopg2
pycryptodome
pyotp
python-crontab
python-dateutil
python-dotenv
qrcode
redis
requests
s3-tar
s3transfer
six
sqlparse
typing-extensions
urllib3
vine
webencodings
wrapt
yarl
] ;
in
2025-03-03 21:03:41 +01:00
mkDerivation {
pname = "bookwyrm" ;
version = "2025-02-14-ba1f180" ;
2025-03-10 18:00:59 +01:00
src = fetchFromGitea {
2025-03-10 17:58:28 +01:00
domain = "kernelmaft.com/forgejo" ;
owner = "zedfrigg" ;
2025-03-03 21:03:41 +01:00
repo = "bookwyrm" ;
rev = "229a035a2be1811123b5afcb035fab61d13f0a47" ;
hash = "sha256-0pwszQwx/RsCv3pxGifyAEpzXfTBiwOOt+h3pZuN3Bk=" ;
2025-03-03 21:03:41 +01:00
} ;
dontPatch = true ;
dontConfigure = true ;
buildPhase = ''
runHook preBuild
mkdir -p /build/lib/python3.11/site-packages
# Python dependencies
for dependency in ${ concatStringsSep " " pythonDependencies } ; do
ln -sf $dependency/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
done
export PYTHONPATH=/build/lib/python3.11/site-packages
export DOMAIN=""
export EMAIL=""
export EMAIL_HOST=""
export EMAIL_HOST_USER=""
export EMAIL_HOST_PASSWORD=""
export SECRET_KEY=""
${python311}/bin/python manage.py compile_themes
${python311}/bin/python manage.py collectstatic --no-input
runHook postBuild
'' ;
2025-03-03 21:03:41 +01:00
installPhase = ''
2025-03-03 21:03:41 +01:00
runHook preInstall
# Python packages
mkdir -p $out/lib/python3.11/site-packages
for dependency in ${ concatStringsSep " " pythonDependencies } ; do
ln -sf $dependency/lib/python3.11/site-packages/* $out/lib/python3.11/site-packages/
done
2025-03-03 21:03:41 +01:00
cp -r /build/source/bookwyrm $out/lib/python3.11/site-packages/
cp -r /build/source/celerywyrm $out/lib/python3.11/site-packages/
2025-03-03 21:03:41 +01:00
2025-03-09 14:43:48 +01:00
# Python scripts
cp /build/source/manage.py $out/lib/python3.11/
2025-03-09 14:43:48 +01:00
# Static web files
mkdir -p $out/srv/http
cp -r /build/source/static/* $out/srv/http/
ln -s \
${source-han-sans}/share/fonts/opentype/source-han-sans/SourceHanSans.ttc \
$out/srv/http/fonts/source_han_sans/SourceHanSans-VF.ttf.ttc
# Executables
mkdir -p $out/bin
cat <<- EOF > $out/bin/bookwyrm
#!${bash}/bin/sh
2025-03-03 21:03:41 +01:00
2025-03-09 12:55:12 +01:00
exec ${gunicorn}/bin/gunicorn bookwyrm.wsgi:application --bind=unix:/run/bookwyrm/http-socket
EOF
cat <<- EOF > $out/bin/bookwyrm-env
#!${bash}/bin/sh
PATH=${coreutils-full}/bin
if [ \$( id -un ) != "bookwyrm" -o \$( id -gn ) != "bookwyrm" ] ; then
2025-03-09 12:55:12 +01:00
echo "You are not running as the 'bookwyrm' user and group, quitting"
exit 1
fi
2025-03-09 12:55:12 +01:00
export PYTHONPATH=$out/lib/python3.11/site-packages
export DEBUG=false
export STATIC_ROOT_ABS=$out/srv/http
2025-03-03 21:03:41 +01:00
exec \$@
2025-03-03 21:03:41 +01:00
EOF
2025-03-09 12:55:12 +01:00
chmod +x $out/bin/*
2025-03-03 21:03:41 +01:00
# Working directory contents
mkdir -p $out/var/lib/bookwyrm
cp $src/VERSION $out/var/lib/bookwyrm/
2025-03-03 21:03:41 +01:00
runHook postInstall
'' ;
}