File paperless-ngx.spec of Package paperless-ngx

#
# spec file for package paperless-ngx
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

%if 0%{?sle_version} && 0%{?sle_version} < 160000
%{?sle15_python_module_pythons}
%elif %{defined primary_python}
%define pythons %{primary_python}
%else
%define pythons python3
%endif
%global mypython %pythons
%global mypython_sitelib %{expand:%%{%{mypython}_sitelib}}
%define plainpython python

# Python dependency versions
%global babel_min_version 2.17.0
%global bleach_min_version 6.3.0
%global celery_min_version 5.5.1
%global channels_min_version 4.2
%global channels_redis_min_version 4.2
%global concurrent_log_handler_min_version 0.9.25
%global dateparser_min_version 1.2
%global django_min_version 5.2.7
%global django_allauth_min_version 65.12.1
%global django_auditlog_min_version 3.3.0
%global django_cachalot_min_version 2.8.0
%global django_celery_results_min_version 2.6.0
%global django_compression_middleware_min_version 0.5.0
%global django_cors_headers_min_version 4.9.0
%global django_extensions_min_version 4.1
%global django_filter_min_version 25.1
%global django_guardian_min_version 3.2.0
%global django_multiselectfield_min_version 1.0.1
%global django_soft_delete_min_version 1.0.18
%global django_treenode_min_version 0.23.2
%global djangorestframework_min_version 3.16.1
%global djangorestframework_guardian_min_version 0.4.0
%global drf_spectacular_min_version 0.28
%global drf_spectacular_sidecar_min_version 2025.10.1
%global drf_writable_nested_min_version 0.7.1
%global filelock_min_version 3.20.0
%global flower_min_version 2.0.1
%global gotenberg_client_min_version 0.12.0
%global httpx_oauth_min_version 0.16
%global imap_tools_min_version 1.11.0
%global inotifyrecursive_min_version 0.3
%global jinja2_min_version 3.1.5
%global langdetect_min_version 1.0.9
%global nltk_min_version 3.9.1
%global ocrmypdf_min_version 16.12.0
%global pathvalidate_min_version 3.3.1
%global pdf2image_min_version 1.17.0
%global dateutil_min_version 2.9.0
%global python_dotenv_min_version 1.2.1
%global gnupg_min_version 0.5.4
%global python_ipware_min_version 3.0.0
%global python_magic_min_version 0.4.27
%global pyzbar_min_version 0.1.9
%global rapidfuzz_min_version 3.14.0
%global redis_min_version 5.2.1
%global hiredis_min_version 3.2.1
%global scikit_learn_min_version 1.7.0
%global setproctitle_min_version 1.3.4
%global tika_client_min_version 0.10.0
%global tqdm_min_version 4.67.1
%global watchdog_min_version 6.0
%global whitenoise_min_version 6.9
%global whoosh_reloaded_min_version 2.7.5
%global zxing_cpp_min_version 2.3.0

%global mysqlclient_min_version 2.2.7

%global psycopg_min_version 3.2.12

%global granian_min_version 2.5.1

%global humanize_min_version 4.12

Name:           paperless-ngx
Version:        2.20.0
Release:        0
Summary:        A community-supported supercharged version of paperless
License:        GPL-3.0
URL:            https://docs.paperless-ngx.com/
Source0:        https://github.com/%{name}/%{name}/releases/download/v%{version}/%{name}-v%{version}.tar.xz
Source1:        %{name}-user.conf
Source3:        %{name}.conf
Source4:        %{name}-defaults.conf
Source5:        %{name}-webserver.service
Source6:        %{name}-worker.service
Source7:        %{name}-scheduler.service
Source8:        %{name}-consumer.service
Source9:        %{name}-nltk.timer
Source10:       %{name}-nltk.service
Source11:       nltk-download.py
Source12:       %{name}-backup.service
Source13:       %{name}-backup.timer
Source14:       %{name}-backup-clean.service
Source15:       %{name}-backup-clean.timer
Source16:       %{name}-backup.sh
Source17:       %{name}-backup-clean.sh
Source18:       restic.pw
Source19:       %{name}-flower.service
Source20:       %{name}-flower.conf
Source21:       %{name}.target
# PATCH-FIX-UPSTREAM: https://github.com/paperless-ngx/paperless-ngx/pull/12239
Patch0:         paperless-ngx-fix-redis-passwords.patch
BuildRequires:  python-rpm-macros
BuildRequires:  %{mypython}
BuildRequires:  sysuser-tools
BuildRequires:  fdupes
BuildRequires:  %{python_module Babel >= %{babel_min_version}}
BuildRequires:  %{python_module bleach >= %{bleach_min_version}}
BuildRequires:  %{python_module celery >= %{celery_min_version}}
BuildRequires:  %{python_module channels >= %{channels_min_version}}
BuildRequires:  %{python_module channels-redis >= %{channels_redis_min_version}}
BuildRequires:  %{python_module concurrent-log-handler >= %{concurrent_log_handler_min_version}}
BuildRequires:  %{python_module dateparser >= %{dateparser_min_version}}
BuildRequires:  %{python_module Django >= %{django_min_version}}
BuildRequires:  %{python_module django-allauth >= %{django_allauth_min_version}}
BuildRequires:  %{python_module django-allauth-socialaccount >= %{django_allauth_min_version}}
BuildRequires:  %{python_module django-allauth-mfa >= %{django_allauth_min_version}}
BuildRequires:  %{python_module django-auditlog >= %{django_auditlog_min_version}}
BuildRequires:  %{python_module django-cachalot >= %{django_cachalot_min_version}}
BuildRequires:  %{python_module django-celery-results >= %{django_celery_results_min_version}}
BuildRequires:  %{python_module django-compression-middleware >= %{django_compression_middleware_min_version}}
BuildRequires:  %{python_module django-cors-headers >= %{django_cors_headers_min_version}}
BuildRequires:  %{python_module django-extensions >= %{django_extensions_min_version}}
BuildRequires:  %{python_module django-filter >= %{django_filter_min_version}}
BuildRequires:  %{python_module django-guardian >= %{django_guardian_min_version}}
BuildRequires:  %{python_module django-multiselectfield >= %{django_multiselectfield_min_version}}
BuildRequires:  %{python_module django-soft-delete >= %{django_soft_delete_min_version}}
BuildRequires:  %{python_module django-treenode >= %{django_treenode_min_version}}
BuildRequires:  %{python_module djangorestframework >= %{djangorestframework_min_version}}
BuildRequires:  %{python_module djangorestframework-guardian >= %{djangorestframework_guardian_min_version}}
BuildRequires:  %{python_module drf-spectacular >= %{drf_spectacular_min_version}}
BuildRequires:  %{python_module drf-spectacular-sidecar >= %{drf_spectacular_sidecar_min_version}}
BuildRequires:  %{python_module drf-writable-nested >= %{drf_writable_nested_min_version}}
BuildRequires:  %{python_module filelock >= %{filelock_min_version}}
BuildRequires:  %{python_module flower >= %{flower_min_version}}
BuildRequires:  %{python_module gotenberg-client >= %{gotenberg_client_min_version}}
BuildRequires:  %{python_module httpx-oauth >= %{httpx_oauth_min_version}}
BuildRequires:  %{python_module humanize >= %{humanize_min_version}}
BuildRequires:  %{python_module imap-tools >= %{imap_tools_min_version}}
BuildRequires:  %{python_module inotifyrecursive >= %{inotifyrecursive_min_version}}
BuildRequires:  %{python_module jinja2 >= %{jinja2_min_version}}
BuildRequires:  %{python_module langdetect >= %{langdetect_min_version}}
BuildRequires:  %{python_module mysqlclient >= %{mysqlclient_min_version}}
BuildRequires:  %{python_module nltk >= %{nltk_min_version}}
BuildRequires:  %{python_module ocrmypdf >= %{ocrmypdf_min_version}}
BuildRequires:  %{python_module pathvalidate >= %{pathvalidate_min_version}}
BuildRequires:  %{python_module pdf2image >= %{pdf2image_min_version}}
BuildRequires:  %{python_module dateutil >= %{dateutil_min_version}}
BuildRequires:  %{python_module python-dotenv >= %{python_dotenv_min_version}}
BuildRequires:  %{python_module gnupg >= %{gnupg_min_version}}
BuildRequires:  %{python_module python-ipware >= %{python_ipware_min_version}}
BuildRequires:  %{python_module python-magic >= %{python_magic_min_version}}
BuildRequires:  %{python_module psycopg >= %{psycopg_min_version}}
BuildRequires:  %{python_module psycopg-c >= %{psycopg_min_version}}
BuildRequires:  %{python_module psycopg-pool}
BuildRequires:  %{python_module pyzbar >= %{pyzbar_min_version}}
BuildRequires:  %{python_module rapidfuzz >= %{rapidfuzz_min_version}}
BuildRequires:  %{python_module redis >= %{redis_min_version}}
BuildRequires:  %{python_module hiredis >= %{hiredis_min_version}}
BuildRequires:  %{python_module scikit-learn >= %{scikit_learn_min_version}}
BuildRequires:  %{python_module setproctitle >= %{setproctitle_min_version}}
BuildRequires:  %{python_module tika-client >= %{tika_client_min_version}}
BuildRequires:  %{python_module tqdm >= %{tqdm_min_version}}
BuildRequires:  %{python_module watchdog >= %{watchdog_min_version}}
BuildRequires:  %{python_module whitenoise >= %{whitenoise_min_version}}
BuildRequires:  %{python_module Whoosh-Reloaded >= %{whoosh_reloaded_min_version}}
BuildRequires:  %{python_module zxing-cpp >= %{zxing_cpp_min_version}}
BuildRequires:  %{python_module granian >= %{granian_min_version}}
BuildRequires:  %{python_module granian-uvloop >= %{granian_min_version}}
Requires:       %{mypython}-Babel >= %{babel_min_version}
Requires:       %{mypython}-bleach >= %{bleach_min_version}
Requires:       %{mypython}-celery >= %{celery_min_version}
Requires:       %{mypython}-channels >= %{channels_min_version}
Requires:       %{mypython}-channels-redis >= %{channels_redis_min_version}
Requires:       %{mypython}-concurrent-log-handler >= %{concurrent_log_handler_min_version}
Requires:       %{mypython}-dateparser >= %{dateparser_min_version}
Requires:       %{mypython}-Django >= %{django_min_version}
Requires:       %{mypython}-django-allauth >= %{django_allauth_min_version}
Requires:       %{mypython}-django-allauth-socialaccount >= %{django_allauth_min_version}
Requires:       %{mypython}-django-allauth-mfa >= %{django_allauth_min_version}
Requires:       %{mypython}-django-auditlog >= %{django_auditlog_min_version}
Requires:       %{mypython}-django-cachalot >= %{django_cachalot_min_version}
Requires:       %{mypython}-django-celery-results >= %{django_celery_results_min_version}
Requires:       %{mypython}-django-compression-middleware >= %{django_compression_middleware_min_version}
Requires:       %{mypython}-django-cors-headers >= %{django_cors_headers_min_version}
Requires:       %{mypython}-django-extensions >= %{django_extensions_min_version}
Requires:       %{mypython}-django-filter >= %{django_filter_min_version}
Requires:       %{mypython}-django-guardian >= %{django_guardian_min_version}
Requires:       %{mypython}-django-multiselectfield >= %{django_multiselectfield_min_version}
Requires:       %{mypython}-django-soft-delete >= %{django_soft_delete_min_version}
Requires:       %{mypython}-django-treenode >= %{django_treenode_min_version}
Requires:       %{mypython}-djangorestframework >= %{djangorestframework_min_version}
Requires:       %{mypython}-djangorestframework-guardian >= %{djangorestframework_guardian_min_version}
Requires:       %{mypython}-drf-spectacular >= %{drf_spectacular_min_version}
Requires:       %{mypython}-drf-spectacular-sidecar >= %{drf_spectacular_sidecar_min_version}
Requires:       %{mypython}-drf-writable-nested >= %{drf_writable_nested_min_version}
Requires:       %{mypython}-filelock >= %{filelock_min_version}
Requires:       %{mypython}-gotenberg-client >= %{gotenberg_client_min_version}
Requires:       %{mypython}-httpx-oauth >= %{httpx_oauth_min_version}
Requires:       %{mypython}-humanize >= %{humanize_min_version}
Requires:       %{mypython}-imap-tools >= %{imap_tools_min_version}
Requires:       %{mypython}-inotifyrecursive >= %{inotifyrecursive_min_version}
Requires:       %{mypython}-jinja2 >= %{jinja2_min_version}
Requires:       %{mypython}-langdetect >= %{langdetect_min_version}
Requires:       %{mypython}-nltk >= %{nltk_min_version}
Requires:       %{mypython}-ocrmypdf >= %{ocrmypdf_min_version}
Requires:       %{mypython}-pathvalidate >= %{pathvalidate_min_version}
Requires:       %{mypython}-pdf2image >= %{pdf2image_min_version}
Requires:       %{mypython}-dateutil >= %{dateutil_min_version}
Requires:       %{mypython}-python-dotenv >= %{python_dotenv_min_version}
Requires:       %{mypython}-gnupg >= %{gnupg_min_version}
Requires:       %{mypython}-python-ipware >= %{python_ipware_min_version}
Requires:       %{mypython}-python-magic >= %{python_magic_min_version}
Requires:       %{mypython}-pyzbar >= %{pyzbar_min_version}
Requires:       %{mypython}-rapidfuzz >= %{rapidfuzz_min_version}
Requires:       %{mypython}-redis >= %{redis_min_version}
Requires:       %{mypython}-hiredis >= %{hiredis_min_version}
Requires:       %{mypython}-scikit-learn >= %{scikit_learn_min_version}
Requires:       %{mypython}-setproctitle >= %{setproctitle_min_version}
Requires:       %{mypython}-tika-client >= %{tika_client_min_version}
Requires:       %{mypython}-tqdm >= %{tqdm_min_version}
Requires:       %{mypython}-watchdog >= %{watchdog_min_version}
Requires:       %{mypython}-whitenoise >= %{whitenoise_min_version}
Requires:       %{mypython}-Whoosh-Reloaded >= %{whoosh_reloaded_min_version}
Requires:       %{mypython}-zxing-cpp >= %{zxing_cpp_min_version}
Requires:       %{mypython}-granian >= %{granian_min_version}
Requires:       %{mypython}-granian-uvloop >= %{granian_min_version}
Requires:       qpdf
Requires:       ImageMagick
Requires:       poppler-tools
Requires:       redis
Requires:       nginx
Provides:       %{name} = %{version}-%{release}
Obsoletes:      %{name} < %{version}-%{release}
Requires(pre):  system-user-paperless
BuildArch:      noarch
%{?systemd_ordering}

%description
Paperless-ngx is a document management system that transforms your
physical documents into a searchable online archive so you can keep,
well, less paper.

%package flower
Summary:        Paperless-ngx flower frontend for celery
Requires:       %{name} = %{version}-%{release}
Requires:       %{mypython}-flower >= %{flower_min_version}

%description flower
Paperless-ngx flower provides a frontend for the celery tasks and
workers.

%package backup
Summary:        Paperless-ngx backup
Requires:       %{name} = %{version}-%{release}
Requires:       restic

%description backup
Paperless-ngx backup uses the document_exporter command and restic to
create backups.

%package postgresql
Summary:        Paperless-ngx with PosgreSQL
Requires:       %{name} = %{version}-%{release}
Requires:       postgresql-server
Requires:       %{mypython}-psycopg >= %{psycopg_min_version}
Requires:       %{mypython}-psycopg-c >= %{psycopg_min_version}
Requires:       %{mypython}-psycopg-pool

%description postgresql
Run paperless-ngx with postgresql

%package mariadb
Summary:        Paperless-ngx with mariadb
Requires:       %{name} = %{version}-%{release}
Requires:       mariadb
Requires:       %{mypython}-mysqlclient >= %{mysqlclient_min_version}

%description mariadb
Run paperless-ngx with mariadb

%package -n system-user-paperless
Summary:        System user and group paperless
BuildArch:      noarch
%{?sysusers_requires}

%description -n system-user-paperless
System user and group used for paperless-ngx.

%prep
%autosetup -p1 -n %{name}

%sysusers_generate_pre %{SOURCE1} %{name}

%build
sed -i '1s|^#!/usr/bin/env python3|#!/usr/bin/python3|' src/manage.py

%install
# Users
install -Dpm0644 %{SOURCE1} %{buildroot}%{_sysusersdir}/system-user-paperless.conf

# Scripts
install -Dpm0755 %{SOURCE11} %{buildroot}%{_libexecdir}/paperless/download-nltk-corpus

# Configuration
install -Dpm0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/paperless/paperless.conf
install -Dpm0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/default/paperless
install -Dpm0644 %{SOURCE20} %{buildroot}%{_sysconfdir}/paperless/flowerconfig.py

# Services
install -Dpm0644 %{SOURCE5} %{buildroot}%{_unitdir}/paperless-webserver.service
install -Dpm0644 %{SOURCE6} %{buildroot}%{_unitdir}/paperless-worker.service
install -Dpm0644 %{SOURCE7} %{buildroot}%{_unitdir}/paperless-scheduler.service
install -Dpm0644 %{SOURCE8} %{buildroot}%{_unitdir}/paperless-consumer.service
install -Dpm0644 %{SOURCE9} %{buildroot}%{_unitdir}/paperless-nltk.timer
install -Dpm0644 %{SOURCE10} %{buildroot}%{_unitdir}/paperless-nltk.service
install -Dpm0644 %{SOURCE19} %{buildroot}%{_unitdir}/paperless-flower.service
install -Dpm0644 %{SOURCE21} %{buildroot}%{_unitdir}/paperless.target
install -d %{buildroot}%{_sbindir}
ln -s service %{buildroot}%{_sbindir}/rcpaperless-webserver
ln -s service %{buildroot}%{_sbindir}/rcpaperless-worker
ln -s service %{buildroot}%{_sbindir}/rcpaperless-scheduler
ln -s service %{buildroot}%{_sbindir}/rcpaperless-consumer
ln -s service %{buildroot}%{_sbindir}/rcpaperless-nltk
ln -s service %{buildroot}%{_sbindir}/rcpaperless-flower
ln -s service %{buildroot}%{_sbindir}/rcpaperless

# Data
mkdir -p %{buildroot}%{_sharedstatedir}/paperless/{data,flower,media,nltk,trash,.gnupg,tmp,consume}

# Code
mkdir -p %{buildroot}%{_usrsrc}/paperless
cp -rf src/* %{buildroot}%{_usrsrc}/paperless/

# Static files
mkdir -p %{buildroot}%{_datadir}/paperless
cp -rf static/* %{buildroot}%{_datadir}/paperless/

# Logs
mkdir -p %{buildroot}%{_var}/log/paperless

# Backup
install -Dpm0644 %{SOURCE12} %{buildroot}%{_unitdir}/paperless-backup.service
install -Dpm0644 %{SOURCE13} %{buildroot}%{_unitdir}/paperless-backup.timer
install -Dpm0644 %{SOURCE14} %{buildroot}%{_unitdir}/paperless-backup-clean.service
install -Dpm0644 %{SOURCE15} %{buildroot}%{_unitdir}/paperless-backup-clean.timer
install -Dpm0755 %{SOURCE16} %{buildroot}%{_sbindir}/paperless-backup
install -Dpm0755 %{SOURCE17} %{buildroot}%{_sbindir}/paperless-backup-clean
install -Dpm0600 %{SOURCE18} %{buildroot}%{_sysconfdir}/paperless/.restic
ln -s service %{buildroot}%{_sbindir}/rcpaperless-backup
ln -s service %{buildroot}%{_sbindir}/rcpaperless-backup-clean
mkdir -p %{buildroot}%{_sharedstatedir}/paperless/{export,backup}

pushd %{buildroot}%{_usrsrc}/paperless
find . -name '*.pyc' -exec rm -f '{}' ';'
python%python_bin_suffix -m compileall *.py ';'
popd

# Reduce dupes
%fdupes %{buildroot}%{_usrsrc}/paperless/
%fdupes %{buildroot}%{_datadir}/paperless/

%pre -n system-user-paperless -f %{name}.pre

%pre
%service_add_pre paperless.target
%service_add_pre paperless-webserver.service
%service_add_pre paperless-worker.service
%service_add_pre paperless-scheduler.service
%service_add_pre paperless-consumer.service
%service_add_pre paperless-nltk.timer
%service_add_pre paperless-nltk.service

%pre backup
%service_add_pre paperless-backup.service
%service_add_pre paperless-backup.timer
%service_add_pre paperless-backup-clean.service
%service_add_pre paperless-backup-clean.timer

%pre flower
%service_add_pre paperless-flower.service

%post
%service_add_post paperless.target
%service_add_post paperless-webserver.service
%service_add_post paperless-worker.service
%service_add_post paperless-scheduler.service
%service_add_post paperless-consumer.service
%service_add_post paperless-nltk.timer
%service_add_post paperless-nltk.service

%post backup
%service_add_post paperless-backup.service
%service_add_post paperless-backup.timer
%service_add_post paperless-backup-clean.service
%service_add_post paperless-backup-clean.timer

%post flower
%service_add_post paperless-flower.service

%preun
%service_del_preun paperless.target
%service_del_preun paperless-webserver.service
%service_del_preun paperless-worker.service
%service_del_preun paperless-scheduler.service
%service_del_preun paperless-consumer.service
%service_del_preun paperless-nltk.timer
%service_del_preun paperless-nltk.service

%preun backup
%service_del_preun paperless-backup.service
%service_del_preun paperless-backup.timer
%service_del_preun paperless-backup-clean.service
%service_del_preun paperless-backup-clean.timer

%preun flower
%service_del_preun paperless-flower.service

%postun
%service_del_postun paperless.target
%service_del_postun paperless-webserver.service
%service_del_postun paperless-worker.service
%service_del_postun paperless-scheduler.service
%service_del_postun paperless-consumer.service
%service_del_postun paperless-nltk.timer
%service_del_postun paperless-nltk.service

%postun backup
%service_del_postun paperless-backup.service
%service_del_postun paperless-backup.timer
%service_del_postun paperless-backup-clean.service
%service_del_postun paperless-backup-clean.timer

%postun flower
%service_del_postun paperless-flower.service

%files -n system-user-paperless
%{_sysusersdir}/system-user-paperless.conf

%files
%license LICENSE
%doc README.md
%dir %{_libexecdir}/paperless
%{_libexecdir}/paperless/download-nltk-corpus
%dir %{_sysconfdir}/paperless
%config(noreplace) %attr(660,root,paperless) %{_sysconfdir}/paperless/paperless.conf
%config(noreplace) %attr(640,root,root) %{_sysconfdir}/default/paperless
%{_unitdir}/paperless.target
%{_unitdir}/paperless-webserver.service
%{_unitdir}/paperless-worker.service
%{_unitdir}/paperless-scheduler.service
%{_unitdir}/paperless-consumer.service
%{_unitdir}/paperless-nltk.service
%{_unitdir}/paperless-nltk.timer
%dir %attr(750,paperless,paperless-users) %{_sharedstatedir}/paperless/
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/data
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/media
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/nltk
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/trash
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/tmp
%dir %attr(750,paperless,paperless-users) %{_sharedstatedir}/paperless/consume
%dir %attr(750,paperless,paperless) %{_var}/log/paperless
%dir %{_usrsrc}/paperless
%dir %{_datadir}/paperless
%{_usrsrc}/paperless/*
%{_datadir}/paperless/*
%{_sbindir}/rcpaperless-webserver
%{_sbindir}/rcpaperless-worker
%{_sbindir}/rcpaperless-scheduler
%{_sbindir}/rcpaperless-consumer
%{_sbindir}/rcpaperless-nltk
%{_sbindir}/rcpaperless

%files backup
%{_sbindir}/paperless-backup
%{_sbindir}/paperless-backup-clean
%{_unitdir}/paperless-backup*.service
%{_unitdir}/paperless-backup*.timer
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/export
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/backup
%config(noreplace) %attr(640,root,paperless) %{_sysconfdir}/paperless/.restic
%{_sbindir}/rcpaperless-backup
%{_sbindir}/rcpaperless-backup-clean

%files flower
%config(noreplace) %attr(660,root,paperless) %{_sysconfdir}/paperless/flowerconfig.py
%{_unitdir}/paperless-flower.service
%{_sbindir}/rcpaperless-flower
%dir %attr(750,paperless,paperless) %{_sharedstatedir}/paperless/flower

%files postgresql
%files mariadb

%changelog

openSUSE Build Service is sponsored by