blob: e4c55bf45fbe93f703c561f02503083cca199d98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
{ lib
, stdenvNoCC
, writeShellScriptBin
, writeText
, source-han-sans-vf-ttf
, bookwyrm-unwrapped
, settings ? { }
}:
let
# set some dummy values to make the package build
settingsWithDefaults = {
DOMAIN = "localhost";
DEBUG = false;
USE_HTTPS = false;
EMAIL = "your@email.here";
PGPORT = 5432;
POSTGRES_USER = "bookwyrm";
POSTGRES_DB = "bookwyrm";
POSTGRES_HOST = "localhost";
REDIS_ACTIVITY_HOST = "localhost";
REDIS_ACTIVITY_PORT = 6379;
REDIS_BROKER_HOST = "localhost";
REDIS_BROKER_PORT = 6379;
EMAIL_HOST = "smtp.example.com";
EMAIL_PORT = 587;
EMAIL_HOST_USER = "mail@example.org";
EMAIL_HOST_PASSWORD = "blub";
MEDIA_ROOT = "/var/lib/bookwyrm/images";
} // settings;
# toShellVar produces "" for false, which bookwyrm rejects
toDjangoVar = name: value: lib.toShellVar name
(if value == false then "false" else
(if value == true then "true" else value));
envfile = writeText "bookwyrm.env"
(lib.strings.concatLines
(lib.mapAttrsToList toDjangoVar settingsWithDefaults));
in stdenvNoCC.mkDerivation (finalAttrs: {
pname = "bookwyrm";
inherit (bookwyrm-unwrapped) version;
src = bookwyrm-unwrapped;
dontConfigure = true;
buildPhase = ''
runHook preBuild
ln -s ${envfile} .env
# needed for the python settings.py file to not fail, but not
# used during the commands executed below, so this is safe
export SECRET_KEY=fnord
export PYTHONPATH=${bookwyrm-unwrapped.pythonPath}
./manage.py compile_themes
./manage.py collectstatic --no-input
ln -s ${source-han-sans-vf-ttf}/share/fonts/variable/SourceHanSans-VF.ttf.ttc static/fonts/source_han_sans/
substituteInPlace contrib/systemd/* \
--replace /opt/bookwyrm/venv/bin/gunicorn ${lib.getExe bookwyrm-unwrapped.gunicorn} \
--replace /opt/bookwyrm/venv/bin/celery ${lib.getExe' bookwyrm-unwrapped.celery "celery"} \
--replace /opt/bookwyrm $out
sed -i /BindPath/d contrib/systemd/*
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/lib/systemd/system
cp -r * .env $out
cp -r contrib/systemd/* $out/lib/systemd/system
runHook postInstall
'';
passthru = rec {
inherit (bookwyrm-unwrapped) celery gunicorn pythonPath;
manage = environmentFile: writeShellScriptBin "bookwyrm-manage.py" ''
set -a
${if environmentFile != null
then "source ${environmentFile}"
else ""}
export PYTHONPATH=${pythonPath}
cd ${finalAttrs.finalPackage.outPath}
exec ${finalAttrs.finalPackage.outPath}/manage.py "$@"
'';
};
})
|