summaryrefslogtreecommitdiff
path: root/pkgs/bookwyrm/default.nix
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 "$@"
    '';
  };
})