Merge pull request #215750 from puppe/fix-paperless

nixos/paperless: download NLTK data

Changed files
+40 -8
nixos
modules
services
pkgs
applications
office
paperless-ngx
+39 -7
nixos/modules/services/misc/paperless.nix
···
pkg = cfg.package;
defaultUser = "paperless";
+
nltkDir = "/var/cache/paperless/nltk";
# Don't start a redis instance if the user sets a custom redis connection
enableRedis = !hasAttr "PAPERLESS_REDIS" cfg.extraConfig;
···
PAPERLESS_DATA_DIR = cfg.dataDir;
PAPERLESS_MEDIA_ROOT = cfg.mediaDir;
PAPERLESS_CONSUMPTION_DIR = cfg.consumptionDir;
+
PAPERLESS_NLTK_DIR = nltkDir;
GUNICORN_CMD_ARGS = "--bind=${cfg.address}:${toString cfg.port}";
} // optionalAttrs (config.time.timeZone != null) {
PAPERLESS_TIME_ZONE = config.time.timeZone;
···
lib.mapAttrs (_: toString) cfg.extraConfig
);
-
manage = let
-
setupEnv = lib.concatStringsSep "\n" (mapAttrsToList (name: val: "export ${name}=\"${val}\"") env);
-
in pkgs.writeShellScript "manage" ''
-
${setupEnv}
-
exec ${pkg}/bin/paperless-ngx "$@"
-
'';
+
manage =
+
let
+
setupEnv = lib.concatStringsSep "\n" (mapAttrsToList (name: val: "export ${name}=\"${val}\"") env);
+
in
+
pkgs.writeShellScript "manage" ''
+
${setupEnv}
+
exec ${pkg}/bin/paperless-ngx "$@"
+
'';
# Secure the services
defaultServiceConfig = {
···
cfg.dataDir
cfg.mediaDir
];
+
CacheDirectory = "paperless";
CapabilityBoundingSet = "";
# ProtectClock adds DeviceAllow=char-rtc r
DeviceAllow = "";
···
extraConfig = mkOption {
type = types.attrs;
-
default = {};
+
default = { };
description = lib.mdDoc ''
Extra paperless config options.
···
'${cfg.passwordFile}' '${cfg.dataDir}/superuser-password'
'';
Type = "oneshot";
+
};
+
};
+
+
# Download NLTK corpus data
+
systemd.services.paperless-download-nltk-data = {
+
wantedBy = [ "paperless-scheduler.service" ];
+
before = [ "paperless-scheduler.service" ];
+
after = [ "network-online.target" ];
+
serviceConfig = defaultServiceConfig // {
+
User = cfg.user;
+
Type = "oneshot";
+
# Enable internet access
+
PrivateNetwork = false;
+
# Restrict write access
+
BindPaths = [];
+
BindReadOnlyPaths = [
+
"/nix/store"
+
"-/etc/resolv.conf"
+
"-/etc/nsswitch.conf"
+
"-/etc/ssl/certs"
+
"-/etc/static/ssl/certs"
+
"-/etc/hosts"
+
"-/etc/localtime"
+
];
+
ExecStart = let pythonWithNltk = pkg.python.withPackages (ps: [ ps.nltk ]); in ''
+
${pythonWithNltk}/bin/python -m nltk.downloader -d '${nltkDir}' punkt snowball_data stopwords
+
'';
};
};
+1 -1
pkgs/applications/office/paperless-ngx/default.nix
···
meta = with lib; {
description = "Tool to scan, index, and archive all of your physical documents";
-
homepage = "https://paperless-ngx.readthedocs.io/";
+
homepage = "https://docs.paperless-ngx.com/";
changelog = "https://github.com/paperless-ngx/paperless-ngx/releases/tag/v${version}";
license = licenses.gpl3Only;
maintainers = with maintainers; [ lukegb gador erikarvstedt ];