127 lines
4.3 KiB
Nix
127 lines
4.3 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
backupDir = "/var/backups/paperless";
|
|
nixpkgs-master = builtins.fetchTarball {
|
|
url = "https://github.com/NixOS/nixpkgs/archive/8852da7e72ef9f41684d83925c2f428b06587a29.tar.gz";
|
|
sha256 = "sha256:0q2ww87kqn9bard90x8w5r30gbcyjk07zngfwr2ap3pbs4rzpjxi";
|
|
};
|
|
in
|
|
{
|
|
# Pull in early https://github.com/paperless-ngx/paperless-ngx/pull/9039
|
|
imports = [
|
|
(nixpkgs-master + "/nixos/modules/services/misc/paperless.nix")
|
|
];
|
|
|
|
disabledModules = [
|
|
"services/misc/paperless.nix"
|
|
];
|
|
|
|
options.momo-cloud.paperless = with lib; {
|
|
enable = mkEnableOption "Enable paperless instance";
|
|
setup = mkEnableOption "Setup config, e.g. enablign regular login";
|
|
|
|
dataDir = mkOption {
|
|
description = "Paperless data directory";
|
|
type = types.str;
|
|
default = "/var/lib/paperless";
|
|
};
|
|
|
|
consumptionDir = mkOption {
|
|
description = "Paperless consumption directory";
|
|
type = types.str;
|
|
default = "/var/lib/paperless/consume";
|
|
};
|
|
|
|
envFile = mkOption { type = types.str; };
|
|
oidcSecretFile = mkOption { type = types.str; };
|
|
superuserPasswordFile = mkOption { type = types.str; };
|
|
};
|
|
|
|
config = lib.mkIf config.momo-cloud.paperless.enable {
|
|
security.acme.certs."paperless.${config.momo-cloud.networking.domain}" = { };
|
|
|
|
services.nginx.virtualHosts = {
|
|
"paperless.${config.momo-cloud.networking.domain}" = {
|
|
forceSSL = true;
|
|
useACMEHost = "paperless.${config.momo-cloud.networking.domain}";
|
|
listenAddresses = [
|
|
config.momo-cloud.wireguard.ipv4.address
|
|
"[${config.momo-cloud.wireguard.ipv6.address}]"
|
|
];
|
|
locations."/".proxyPass = "http://127.0.0.1:${builtins.toString config.services.paperless.port}";
|
|
};
|
|
};
|
|
|
|
services.paperless = {
|
|
enable = true;
|
|
consumptionDir = config.momo-cloud.paperless.consumptionDir;
|
|
dataDir = config.momo-cloud.paperless.dataDir;
|
|
address = "127.0.0.1";
|
|
passwordFile = config.momo-cloud.paperless.superuserPasswordFile;
|
|
settings = {
|
|
PAPERLESS_ADMIN_USER = "admin";
|
|
PAPERLESS_OCR_LANGUAGE = "deu+eng";
|
|
PAPERLESS_OCR_USER_ARGS = ''{"invalidate_digital_signatures": true}'';
|
|
PAPERLESS_URL = "https://paperless.${config.momo-cloud.networking.domain}";
|
|
PAPERLESS_DISABLE_REGULAR_LOGIN = if config.momo-cloud.paperless.setup then "false" else "true";
|
|
PAPERLESS_APPS = "allauth.socialaccount.providers.openid_connect";
|
|
PAPERLESS_SOCIAL_ACCOUNT_SYNC_GROUPS = "true";
|
|
PAPERLESS_SOCIAL_ACCOUNT_DEFAULT_GROUPS = "paperless_users";
|
|
PAPERLESS_SOCIALACCOUNT_AUTO_SIGNUP = "true";
|
|
PAPERLESS_SOCIALACCOUNT_EMAIL_AUTHENTICATION_AUTO_CONNECT = "true";
|
|
PAPERLESS_ACCOUNT_SESSION_REMEMBER = "true";
|
|
PAPERLESS_EMAIL_TASK_CRON = "*/2 * * * *";
|
|
};
|
|
};
|
|
|
|
services.kanidm.provision = {
|
|
groups.paperless_users = {
|
|
memberless = true;
|
|
};
|
|
groups.paperless_admins = {
|
|
memberless = true;
|
|
};
|
|
|
|
systems.oauth2."paperless" = {
|
|
displayName = "paperless";
|
|
originUrl = "https://paperless.${config.momo-cloud.networking.domain}/accounts/oidc/kanidm/login/callback/";
|
|
basicSecretFile = config.momo-cloud.paperless.oidcSecretFile;
|
|
preferShortUsername = true;
|
|
scopeMaps.paperless_users = [
|
|
"email"
|
|
"profile"
|
|
"openid"
|
|
"groups"
|
|
];
|
|
originLanding = "https://paperless.${config.momo-cloud.networking.domain}/accounts/login/";
|
|
};
|
|
};
|
|
|
|
systemd.services.paperless-web.serviceConfig.EnvironmentFile = [
|
|
config.momo-cloud.paperless.envFile
|
|
];
|
|
|
|
#################################
|
|
# Backups
|
|
#################################
|
|
|
|
systemd.tmpfiles.rules = [
|
|
"d '${config.momo-cloud.paperless.dataDir}' 0700 paperless paperless - -"
|
|
"d '${backupDir}' 0700 paperless paperless - -"
|
|
"d '${config.momo-cloud.paperless.consumptionDir}' 0700 paperless paperless - -"
|
|
];
|
|
|
|
momo-cloud.backups.restic.paperless = {
|
|
paths = [ backupDir ];
|
|
initialize = true;
|
|
backupPrepareCommand = "${config.momo-cloud.paperless.dataDir}/paperless-manage document_exporter ${backupDir} -c -p";
|
|
backupCleanupCommand = ''
|
|
rm -rf ${backupDir}/*
|
|
'';
|
|
};
|
|
};
|
|
}
|