about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/office/paperless/withConfig.nix
blob: 652d1478c0caf6010aebd082d48ab23b84e3307d (plain) (blame)
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
{ paperless, lib, writers }:

## Usage
#
# nix-build --out-link ./paperless -E '
# (import <nixpkgs> {}).paperless.withConfig {
#   dataDir = /tmp/paperless-data;
#   config = {
#     PAPERLESS_DISABLE_LOGIN = "true";
#   };
# }'
#
# Setup DB
# ./paperless migrate
#
# Consume documents in ${dataDir}/consume
# ./paperless document_consumer --oneshot
#
# Start web interface
# ./paperless runserver --noreload localhost:8000

{ config ? {}, dataDir ? null, ocrLanguages ? null
, paperlessPkg ? paperless, extraCmds ? "" }:
with lib;
let
  paperless = if ocrLanguages == null then
    paperlessPkg
  else
    (paperlessPkg.override {
      tesseract = paperlessPkg.tesseract.override {
        enableLanguages = ocrLanguages;
      };
    }).overrideDerivation (_: {
      # `ocrLanguages` might be missing some languages required by the tests.
      doCheck = false;
    });

  envVars = (optionalAttrs (dataDir != null) {
    PAPERLESS_CONSUMPTION_DIR = "${dataDir}/consume";
    PAPERLESS_MEDIADIR = "${dataDir}/media";
    PAPERLESS_STATICDIR = "${dataDir}/static";
    PAPERLESS_DBDIR = dataDir;
  }) // config;

  envVarDefs = mapAttrsToList (n: v: ''export ${n}="${toString v}"'') envVars;
  setupEnvVars = builtins.concatStringsSep "\n" envVarDefs;

  setupEnv = ''
    source ${paperless}/share/paperless/setup-env.sh
    ${setupEnvVars}
    ${optionalString (dataDir != null) ''
      mkdir -p "$PAPERLESS_CONSUMPTION_DIR" \
               "$PAPERLESS_MEDIADIR" \
               "$PAPERLESS_STATICDIR" \
               "$PAPERLESS_DBDIR"
    ''}
  '';

  runPaperless = writers.writeBash "paperless" ''
    set -e
    ${setupEnv}
    ${extraCmds}
    exec python $paperlessSrc/manage.py "$@"
  '';
in
  runPaperless // {
    inherit paperless setupEnv;
  }