{ fetchFromGitHub , pkgs , stdenv , } : with builtins ; with pkgs ; 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 ${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 ${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/ export PYTHONPATH=/build/lib/python3.11/site-packages ${python311}/bin/python manage.py compile_themes runHook postBuild '' ; installPhase = 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 opentelemetry-api opentelemetry-exporter-otlp-proto-common opentelemetry-exporter-otlp-proto-grpc opentelemetry-proto opentelemetry-sdk opentelemetry-semantic-conventions packaging pilkit pillow protobuf psycopg2 pycryptodome pyotp python-crontab python-dateutil python-dotenv qrcode # I.e. python311Packages . qrcode redis # I.e. python311Packages . redis requests s3-tar s3transfer six sqlparse typing-extensions urllib3 vine webencodings wrapt yarl ] ; in '' runHook preInstall mkdir -p $out/bin mkdir -p $out/lib/python3.11/site-packages mkdir -p $out/var/lib/bookwyrm # Python dependencies pythonDependencies="${ concatStringsSep " " pythonDependencies }" 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 wait # Python packages cp -r $src/bookwyrm $out/lib/python3.11/site-packages/ cp -r $src/celerywyrm $out/lib/python3.11/site-packages/ # Python scripts cp $src/manage.py $out/lib/python3.11/ # Executables cat <<- EOF > $out/bin/bookwyrm #!${bash}/bin/sh 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 echo "You are not running as the 'bookwyrm' user and group, quitting" exit 1 fi export PYTHONPATH="$out/lib/python3.11/site-packages" export DEBUG="false" export DOMAIN="" export EMAIL="" export EMAIL_HOST="" export EMAIL_HOST_USER="" export EMAIL_HOST_PASSWORD="" # 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 )" exec \$@ EOF chmod +x $out/bin/* # Working directory contents cp $src/VERSION $out/var/lib/bookwyrm/ runHook postInstall '' ; }