nix-packages/packages/bookwyrm/package.nix

214 lines
4.8 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 ;
mkDerivation {
pname = "bookwyrm" ;
version = "2025-02-14-ba1f180" ;
src = fetchFromGitHub {
owner = "bookwyrm-social" ;
repo = "bookwyrm" ;
rev = "ba1f180c834e1b84d33e565abc3d95f772e2cdd8" ;
hash = "sha256-8e1+pfURTvzsWumRpeBZGDyD8UW1C98Vv9/1GqECLD4=" ;
} ;
dontPatch = true ;
dontConfigure = true ;
buildPhase = ''
runHook preBuild
mkdir -p /build/lib/python3.11/site-packages
ln -s ${asgiref}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${certifi}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${django}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${environs}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${idna}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${libsass}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${marshmallow}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${packaging}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${python-dotenv}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${requests}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
ln -s ${urllib3}/lib/python3.11/site-packages/* /build/lib/python3.11/site-packages/
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
runHook postBuild
'' ;
2025-03-03 21:03:41 +01:00
installPhase = let
pythonDependencies = [
2025-03-03 21:03:41 +01:00
aiohappyeyeballs
aiohttp
aiosignal
amqp
asgiref
attrs
billiard
bleach
2025-03-08 14:36:12 +01:00
boto3
2025-03-08 14:44:20 +01:00
botocore
2025-03-03 21:03:41 +01:00
bw-file-resubmit
celery
certifi
cffi
chardet
2025-03-03 21:03:41 +01:00
click
colorthief
cron-descriptor
cryptography
deprecated
2025-03-03 21:03:41 +01:00
django
django-appconf
2025-03-03 21:03:41 +01:00
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
2025-03-03 21:03:41 +01:00
idna
importlib-metadata
2025-03-03 21:03:41 +01:00
jmespath
jwcrypto
kombu
2025-03-09 16:06:38 +01:00
libsass
2025-03-03 21:03:41 +01:00
markdown
marshmallow
multidict
oauthlib
opentelemetry-api
opentelemetry-exporter-otlp-proto-common
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-proto
opentelemetry-sdk
opentelemetry-semantic-conventions
packaging
2025-03-08 14:17:12 +01:00
pilkit
2025-03-03 21:03:41 +01:00
pillow
2025-03-08 15:28:34 +01:00
protobuf
2025-03-03 21:03:41 +01:00
psycopg2
pycryptodome
2025-03-07 15:03:51 +01:00
pyotp
2025-03-03 21:03:41 +01:00
python-crontab
python-dateutil
python-dotenv
2025-03-07 15:39:21 +01:00
qrcode # I.e. python311Packages . qrcode
redis # I.e. python311Packages . redis
2025-03-03 21:03:41 +01:00
requests
s3-tar
s3transfer
2025-03-03 21:03:41 +01:00
six
sqlparse
typing-extensions
urllib3
vine
webencodings
2025-03-07 16:33:21 +01:00
wrapt
2025-03-03 21:03:41 +01:00
yarl
] ;
in ''
runHook preInstall
mkdir -p $out/bin
2025-03-03 21:03:41 +01:00
mkdir -p $out/lib/python3.11/site-packages
mkdir -p $out/var/lib/bookwyrm
2025-03-03 21:03:41 +01:00
# Python dependencies
pythonDependencies="${ concatStringsSep " " pythonDependencies }"
2025-03-09 12:55:12 +01:00
for package in $pythonDependencies ; do
for directory in $( cd $package/lib/python3.11/site-packages ; find -mindepth 1 -type d -not -name __pycache__ ) ; do
mkdir -p $out/lib/python3.11/site-packages/$directory &
done
done
wait
for package in $pythonDependencies ; do
for file in $( cd $package/lib/python3.11/site-packages ; find -type f -not -path \*__pycache__\* ) ; do
ln -s $package/lib/python3.11/site-packages/$file $out/lib/python3.11/site-packages/$file &
done
done
2025-03-03 21:03:41 +01:00
wait
# Python packages
2025-03-03 21:03:41 +01:00
cp -r $src/bookwyrm $out/lib/python3.11/site-packages/
cp -r $src/celerywyrm $out/lib/python3.11/site-packages/
2025-03-09 14:43:48 +01:00
# Python scripts
cp $src/manage.py $out/lib/python3.11/
# Executables
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
2025-03-03 21:03:41 +01:00
export PYTHONPATH="$out/lib/python3.11/site-packages"
export DEBUG="false"
2025-03-09 12:55:12 +01:00
2025-03-03 21:03:41 +01:00
export DOMAIN=""
export EMAIL=""
export EMAIL_HOST=""
export EMAIL_HOST_USER=""
export EMAIL_HOST_PASSWORD=""
2025-03-09 12:55:12 +01:00
# The escape here is required in order to retrieve the key file contents at runtime
export SECRET_KEY="\$( cat /etc/nixos/assets/bookwyrm-secret-key )"
2025-03-09 12:55:12 +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
cp $src/VERSION $out/var/lib/bookwyrm/
2025-03-03 21:03:41 +01:00
runHook postInstall
'' ;
}