diff --git a/.devcontainer/vscode/tasks.json b/.devcontainer/vscode/tasks.json index f7cd18d48..bbc1684ce 100644 --- a/.devcontainer/vscode/tasks.json +++ b/.devcontainer/vscode/tasks.json @@ -116,9 +116,9 @@ }, { "label": "Maintenance: Build Documentation", - "description": "Build the documentation with MkDocs", + "description": "Build the documentation with Zensical", "type": "shell", - "command": "uv run mkdocs build --config-file mkdocs.yml && uv run mkdocs serve", + "command": "uv run zensical build && uv run zensical serve", "group": "none", "presentation": { "echo": true, diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 641126309..0cd9a445e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -46,7 +46,7 @@ updates: patterns: - "*pytest*" - "ruff" - - "mkdocs-material" + - "zensical" - "prek*" # Django & DRF Ecosystem django-ecosystem: diff --git a/.github/workflows/ci-docs.yml b/.github/workflows/ci-docs.yml index 4c7cf453c..213f6e409 100644 --- a/.github/workflows/ci-docs.yml +++ b/.github/workflows/ci-docs.yml @@ -6,17 +6,25 @@ on: - dev paths: - 'docs/**' - - 'mkdocs.yml' + - 'zensical.toml' + - 'pyproject.toml' + - 'uv.lock' - '.github/workflows/ci-docs.yml' pull_request: paths: - 'docs/**' - - 'mkdocs.yml' + - 'zensical.toml' + - 'pyproject.toml' + - 'uv.lock' - '.github/workflows/ci-docs.yml' workflow_dispatch: concurrency: group: docs-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true +permissions: + contents: read + pages: write + id-token: write env: DEFAULT_UV_VERSION: "0.9.x" DEFAULT_PYTHON_VERSION: "3.11" @@ -25,6 +33,7 @@ jobs: name: Build Documentation runs-on: ubuntu-24.04 steps: + - uses: actions/configure-pages@v5 - name: Checkout uses: actions/checkout@v6 - name: Set up Python @@ -47,42 +56,23 @@ jobs: --python ${{ steps.setup-python.outputs.python-version }} \ --dev \ --frozen \ - mkdocs build --config-file ./mkdocs.yml - - name: Upload artifact - uses: actions/upload-artifact@v6 + zensical build --clean + - name: Upload GitHub Pages artifact + uses: actions/upload-pages-artifact@v4 with: - name: documentation - path: site/ - retention-days: 7 + path: site + name: github-pages-${{ github.run_id }}-${{ github.run_attempt }} deploy: name: Deploy Documentation needs: build if: github.event_name == 'push' && github.ref == 'refs/heads/main' runs-on: ubuntu-24.04 + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Set up Python - id: setup-python - uses: actions/setup-python@v6 + - name: Deploy GitHub Pages + uses: actions/deploy-pages@v4 + id: deployment with: - python-version: ${{ env.DEFAULT_PYTHON_VERSION }} - - name: Install uv - uses: astral-sh/setup-uv@v7 - with: - version: ${{ env.DEFAULT_UV_VERSION }} - enable-cache: true - python-version: ${{ env.DEFAULT_PYTHON_VERSION }} - - name: Install Python dependencies - run: | - uv sync --python ${{ steps.setup-python.outputs.python-version }} --dev --frozen - - name: Deploy documentation - run: | - echo "docs.paperless-ngx.com" > "${{ github.workspace }}/docs/CNAME" - git config --global user.name "${{ github.actor }}" - git config --global user.email "${{ github.actor }}@users.noreply.github.com" - uv run \ - --python ${{ steps.setup-python.outputs.python-version }} \ - --dev \ - --frozen \ - mkdocs gh-deploy --force --no-history + artifact_name: github-pages-${{ github.run_id }}-${{ github.run_attempt }} diff --git a/.gitignore b/.gitignore index 715760b29..c607f922d 100644 --- a/.gitignore +++ b/.gitignore @@ -54,7 +54,7 @@ junit.xml # Django stuff: *.log -# MkDocs documentation +# Zensical documentation site/ # PyBuilder diff --git a/docs/api.md b/docs/api.md index ced8eb5b3..7db6bbc7e 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,4 +1,4 @@ -# The REST API +# REST API Paperless-ngx now ships with a fully-documented REST API and a browsable web interface to explore it. The API browsable interface is available at diff --git a/docs/assets/extra.css b/docs/assets/extra.css index 270c1a219..c93e467fd 100644 --- a/docs/assets/extra.css +++ b/docs/assets/extra.css @@ -1,13 +1,31 @@ -:root > * { - --md-primary-fg-color: #17541f; - --md-primary-fg-color--dark: #17541f; - --md-primary-fg-color--light: #17541f; - --md-accent-fg-color: #2b8a38; +:root>* { + --paperless-green: #17541f; + --paperless-green-accent: #2b8a38; + --md-primary-fg-color: var(--paperless-green); + --md-primary-fg-color--dark: var(--paperless-green); + --md-primary-fg-color--light: var(--paperless-green-accent); + --md-accent-fg-color: var(--paperless-green-accent); --md-typeset-a-color: #21652a; } +.md-header, +.md-tabs { + background-color: var(--paperless-green); + color: #fff; +} + +.md-tabs__link { + color: rgba(255, 255, 255, 0.82); +} + +.md-tabs__link:hover, +.md-tabs__link--active { + color: #fff; +} + [data-md-color-scheme="slate"] { --md-hue: 222; + --md-default-bg-color: hsla(var(--md-hue), 15%, 10%, 1); } @media (min-width: 768px) { @@ -69,8 +87,8 @@ h4 code { } /* Hide config vars from sidebar, toc and move the border on mobile case their hidden */ -.md-nav.md-nav--secondary .md-nav__item .md-nav__link[href*="PAPERLESS_"], -.md-nav.md-nav--secondary .md-nav__item .md-nav__link[href*="USERMAP_"] { +.md-nav.md-nav--secondary .md-nav__item:has(> .md-nav__link[href*="PAPERLESS_"]), +.md-nav.md-nav--secondary .md-nav__item:has(> .md-nav__link[href*="USERMAP_"]) { display: none; } @@ -83,18 +101,3 @@ h4 code { border-top: .05rem solid var(--md-default-fg-color--lightest); } } - -/* Show search shortcut key */ -[data-md-toggle="search"]:not(:checked) ~ .md-header .md-search__form::after { - position: absolute; - top: .3rem; - right: .3rem; - display: block; - padding: .1rem .4rem; - color: var(--md-default-fg-color--lighter); - font-weight: bold; - font-size: .8rem; - border: .05rem solid var(--md-default-fg-color--lighter); - border-radius: .1rem; - content: "/"; - } diff --git a/docs/development.md b/docs/development.md index f17d02d02..9f14f1d9e 100644 --- a/docs/development.md +++ b/docs/development.md @@ -338,13 +338,13 @@ LANGUAGES = [ ## Building the documentation -The documentation is built using material-mkdocs, see their [documentation](https://squidfunk.github.io/mkdocs-material/reference/). +The documentation is built using Zensical, see their [documentation](https://zensical.org/docs/). If you want to build the documentation locally, this is how you do it: 1. Build the documentation ```bash - $ uv run mkdocs build --config-file mkdocs.yml + $ uv run zensical build ``` _alternatively..._ @@ -355,7 +355,7 @@ If you want to build the documentation locally, this is how you do it: something. ```bash - $ uv run mkdocs serve + $ uv run zensical serve ``` ## Building the Docker image diff --git a/docs/faq.md b/docs/faq.md index 7db8d9dd7..2f6c0ea57 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,3 +1,7 @@ +--- +title: FAQs +--- + # Frequently Asked Questions ## _What's the general plan for Paperless-ngx?_ diff --git a/docs/index.md b/docs/index.md index 1d72f8f6c..2e3a311df 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,7 @@ +--- +title: Home +--- +
![image](assets/logo_full_black.svg#only-light){.index-logo} ![image](assets/logo_full_white.svg#only-dark){.index-logo} diff --git a/docs/setup.md b/docs/setup.md index f0381f076..13cf6a63d 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -1,4 +1,8 @@ -## Installation +--- +title: Setup +--- + +# Installation You can go multiple routes to setup and run Paperless: diff --git a/docs/usage.md b/docs/usage.md index 1e339b61e..ca57e9018 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,4 +1,8 @@ -# Usage Overview +--- +title: Basic Usage +--- + +# Usage Paperless-ngx is an application that manages your personal documents. With the (optional) help of a document scanner (see [the scanners wiki](https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations)), Paperless-ngx transforms your unwieldy diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 69a15193a..000000000 --- a/mkdocs.yml +++ /dev/null @@ -1,87 +0,0 @@ -site_name: Paperless-ngx -theme: - name: material - logo: assets/logo.svg - font: - text: Roboto - code: Roboto Mono - palette: - # Palette toggle for automatic mode - - media: "(prefers-color-scheme)" - toggle: - icon: material/brightness-auto - name: Switch to light mode - # Palette toggle for light mode - - media: "(prefers-color-scheme: light)" - scheme: default - toggle: - icon: material/brightness-7 - name: Switch to dark mode - # Palette toggle for dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - toggle: - icon: material/brightness-4 - name: Switch to system preference - features: - - navigation.tabs - - navigation.top - - toc.integrate - - content.code.annotate - icon: - repo: fontawesome/brands/github - favicon: assets/favicon.png -repo_url: https://github.com/paperless-ngx/paperless-ngx -repo_name: paperless-ngx/paperless-ngx -edit_uri: blob/main/docs/ -extra_css: - - assets/extra.css -markdown_extensions: - - attr_list - - md_in_html - - def_list - - admonition - - tables - - pymdownx.highlight: - anchor_linenums: true - - pymdownx.superfences - - pymdownx.inlinehilite - - pymdownx.snippets - - pymdownx.tilde - - footnotes - - pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:material.extensions.emoji.to_svg -strict: true -nav: - - index.md - - setup.md - - 'Basic Usage': usage.md - - configuration.md - - administration.md - - advanced_usage.md - - 'REST API': api.md - - development.md - - 'FAQs': faq.md - - troubleshooting.md - - 'Migration to v3': migration.md - - changelog.md -copyright: Copyright © 2016 - 2026 Daniel Quinn, Jonas Winkler, and the Paperless-ngx team -extra: - social: - - icon: fontawesome/brands/github - link: https://github.com/paperless-ngx/paperless-ngx - - icon: fontawesome/brands/docker - link: https://hub.docker.com/r/paperlessngx/paperless-ngx - - icon: material/chat - link: https://matrix.to/#/#paperless:matrix.org -plugins: - - search - - glightbox: - skip_classes: - - no-lightbox diff --git a/pyproject.toml b/pyproject.toml index cc5750e9b..eaa917a6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -106,8 +106,7 @@ dev = [ ] docs = [ - "mkdocs-glightbox~=0.5.1", - "mkdocs-material~=9.7.0", + "zensical>=0.0.21", ] testing = [ diff --git a/uv.lock b/uv.lock index 18b784b8e..d18953832 100644 --- a/uv.lock +++ b/uv.lock @@ -935,6 +935,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9a/c7/95349670e193b2891176e1b8e5f43e12b31bff6d9994f70e74ab385047f6/dateparser-1.3.0-py3-none-any.whl", hash = "sha256:8dc678b0a526e103379f02ae44337d424bd366aac727d3c6cf52ce1b01efbb5a", size = 318688, upload-time = "2026-02-04T16:00:04.652Z" }, ] +[[package]] +name = "deepmerge" +version = "2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/3a/b0ba594708f1ad0bc735884b3ad854d3ca3bdc1d741e56e40bbda6263499/deepmerge-2.0.tar.gz", hash = "sha256:5c3d86081fbebd04dd5de03626a0607b809a98fb6ccba5770b62466fe940ff20", size = 19890, upload-time = "2024-08-30T05:31:50.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/82/e5d2c1c67d19841e9edc74954c827444ae826978499bde3dfc1d007c8c11/deepmerge-2.0-py3-none-any.whl", hash = "sha256:6de9ce507115cff0bed95ff0ce9ecc31088ef50cbdf09bc90a09349a318b3d00", size = 13475, upload-time = "2024-08-30T05:31:48.659Z" }, +] + + [[package]] name = "deprecated" version = "1.3.1" @@ -2562,86 +2572,6 @@ name = "microsoft-python-type-stubs" version = "0" source = { git = "https://github.com/microsoft/python-type-stubs.git#692c37c3969d22612b295ddf7e7af5907204a386" } -[[package]] -name = "mkdocs" -version = "1.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "ghp-import", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "markdown", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mergedeep", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mkdocs-get-deps", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "pathspec", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "pyyaml-env-tag", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "watchdog", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, -] - -[[package]] -name = "mkdocs-get-deps" -version = "0.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mergedeep", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "platformdirs", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, -] - -[[package]] -name = "mkdocs-glightbox" -version = "0.5.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "selectolax", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8d/26/c793459622da8e31f954c6f5fb51e8f098143fdfc147b1e3c25bf686f4aa/mkdocs_glightbox-0.5.2.tar.gz", hash = "sha256:c7622799347c32310878e01ccf14f70648445561010911c80590cec0353370ac", size = 510586, upload-time = "2025-10-23T14:55:18.909Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/ca/03624e017e5ee2d7ce8a08d89f81c1e535eb3c30d7b2dc4a435ea3fbbeae/mkdocs_glightbox-0.5.2-py3-none-any.whl", hash = "sha256:23a431ea802b60b1030c73323db2eed6ba859df1a0822ce575afa43e0ea3f47e", size = 26458, upload-time = "2025-10-23T14:55:17.43Z" }, -] - -[[package]] -name = "mkdocs-material" -version = "9.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "backrefs", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "colorama", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "markdown", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mkdocs", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mkdocs-material-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "paginate", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "pygments", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "pymdown-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/27/e2/2ffc356cd72f1473d07c7719d82a8f2cbd261666828614ecb95b12169f41/mkdocs_material-9.7.1.tar.gz", hash = "sha256:89601b8f2c3e6c6ee0a918cc3566cb201d40bf37c3cd3c2067e26fadb8cce2b8", size = 4094392, upload-time = "2025-12-18T09:49:00.308Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/32/ed071cb721aca8c227718cffcf7bd539620e9799bbf2619e90c757bfd030/mkdocs_material-9.7.1-py3-none-any.whl", hash = "sha256:3f6100937d7d731f87f1e3e3b021c97f7239666b9ba1151ab476cabb96c60d5c", size = 9297166, upload-time = "2025-12-18T09:48:56.664Z" }, -] - -[[package]] -name = "mkdocs-material-extensions" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, -] - [[package]] name = "mpmath" version = "1.3.0" @@ -3227,8 +3157,6 @@ dev = [ { name = "daphne", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "factory-boy", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "imagehash", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mkdocs-glightbox", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mkdocs-material", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "prek", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "pytest-cov", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -3240,10 +3168,10 @@ dev = [ { name = "pytest-sugar", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "pytest-xdist", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "ruff", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "zensical", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, ] docs = [ - { name = "mkdocs-glightbox", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "mkdocs-material", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "zensical", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, ] lint = [ { name = "prek", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -3369,8 +3297,6 @@ dev = [ { name = "daphne" }, { name = "factory-boy", specifier = "~=3.3.1" }, { name = "imagehash" }, - { name = "mkdocs-glightbox", specifier = "~=0.5.1" }, - { name = "mkdocs-material", specifier = "~=9.7.0" }, { name = "prek", specifier = "~=0.3.0" }, { name = "pytest", specifier = "~=9.0.0" }, { name = "pytest-cov", specifier = "~=7.0.0" }, @@ -3382,10 +3308,10 @@ dev = [ { name = "pytest-sugar" }, { name = "pytest-xdist", specifier = "~=3.8.0" }, { name = "ruff", specifier = "~=0.15.0" }, + { name = "zensical", specifier = ">=0.0.21" }, ] docs = [ - { name = "mkdocs-glightbox", specifier = "~=0.5.1" }, - { name = "mkdocs-material", specifier = "~=9.7.0" }, + { name = "zensical", specifier = ">=0.0.21" }, ] lint = [ { name = "prek", specifier = "~=0.3.0" }, @@ -6342,6 +6268,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/fb/5f5e7b40a2f4efd873fe173624795ca47eaa22e29051270c981361b45209/zope_interface-8.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05a0e42d6d830f547e114de2e7cd15750dc6c0c78f8138e6c5035e51ddfff37c", size = 264390, upload-time = "2026-01-09T08:05:42.936Z" }, ] +[[package]] +name = "zensical" +version = "0.0.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "deepmerge", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "markdown", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "pygments", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "pymdown-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, + { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/50/2655b5f72d0c72f4366be580f5e2354ff05280d047ea986fe89570e44589/zensical-0.0.21.tar.gz", hash = "sha256:c13563836fa63a3cabeffd83fe3a770ca740cfa5ae7b85df85d89837e31b3b4a", size = 3819731, upload-time = "2026-02-04T17:47:59.396Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/98/90710d232cb35b633815fa7b493da542391b89283b6103a5bb4ae9fc0dd9/zensical-0.0.21-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:67404cc70c330246dfb7269bcdb60a25be0bb60a212a09c9c50229a1341b1f84", size = 12237120, upload-time = "2026-02-04T17:47:28.615Z" }, + { url = "https://files.pythonhosted.org/packages/97/fb/4280b3781157e8f051711732192f949bf29beeafd0df3e33c1c8bf9b7a1a/zensical-0.0.21-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:d4fd253ccfbf5af56434124f13bac01344e456c020148369b18d8836b6537c3c", size = 12118047, upload-time = "2026-02-04T17:47:31.369Z" }, + { url = "https://files.pythonhosted.org/packages/74/b3/b7f85ae9cf920cf9f17bf157ae6c274919477148feb7716bf735636caa0e/zensical-0.0.21-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:440e40cdc30a29bf7466bcd6f43ed7bd1c54ea3f1a0fefca65619358b481a5bc", size = 12473440, upload-time = "2026-02-04T17:47:33.577Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ac/1dc6e98f79ed19b9f103c88a0bd271f9140565d7d26b64bc1542b3ef6d91/zensical-0.0.21-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:368e832fc8068e75dc45cab59379db4cefcd81eb116f48d058db8fb7b7aa8d14", size = 12412588, upload-time = "2026-02-04T17:47:36.491Z" }, + { url = "https://files.pythonhosted.org/packages/bd/76/16a580f6dd32b387caa4a41615451e7dddd1917a2ff2e5b08744f41b4e11/zensical-0.0.21-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4ab962d47f9dd73510eed168469326c7a452554dfbfdb9cdf85efc7140244df", size = 12749438, upload-time = "2026-02-04T17:47:38.969Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/4baaa1c910eee61db5f49d0d45f2e550a0027218c618f3dd7f8da966a019/zensical-0.0.21-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b846d53dfce007f056ff31848f87f3f2a388228e24d4851c0cafdce0fa204c9b", size = 12514504, upload-time = "2026-02-04T17:47:41.31Z" }, + { url = "https://files.pythonhosted.org/packages/76/77/931fccae5580b94409a0448a26106f922dcfa7822e7b93cacd2876dd63a8/zensical-0.0.21-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:daac1075552d230d52d621d2e4754ba24d5afcaa201a7a991f1a8d57e320c9de", size = 12647832, upload-time = "2026-02-04T17:47:44.073Z" }, + { url = "https://files.pythonhosted.org/packages/5b/82/3cf75de64340829d55c87c36704f4d1d8c952bd2cdc8a7bc48cbfb8ab333/zensical-0.0.21-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:7b380f545adb6d40896f9bd698eb0e1540ed4258d35b83f55f91658d0fdae312", size = 12678537, upload-time = "2026-02-04T17:47:46.899Z" }, + { url = "https://files.pythonhosted.org/packages/77/91/6f4938dceeaa241f78bbfaf58a94acef10ba18be3468795173e3087abeb6/zensical-0.0.21-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:5c2227fdab64616bea94b40b8340bafe00e2e23631cc58eeea1e7267167e6ac5", size = 12822164, upload-time = "2026-02-04T17:47:49.231Z" }, + { url = "https://files.pythonhosted.org/packages/a2/4e/a9c9d25ef0766f767db7b4f09da68da9b3d8a28c3d68cfae01f8e3f9e297/zensical-0.0.21-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2e0f5154d236ed0f98662ee68785b67e8cd2138ea9d5e26070649e93c22eeee0", size = 12785632, upload-time = "2026-02-04T17:47:52.613Z" }, +] + + [[package]] name = "zstandard" version = "0.25.0" diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 000000000..4dbd2bf2e --- /dev/null +++ b/zensical.toml @@ -0,0 +1,128 @@ +[project] + +site_name = "Paperless-ngx" +site_description = "Documentation for the Paperless-ngx document management system software." +site_author = "the Paperless-ngx team" + +site_url = "https://docs.paperless-ngx.com/" + +copyright = """ +Copyright © 2016 - 2026 Daniel Quinn, Jonas Winkler, and the Paperless-ngx team +""" + +repo_url = "https://github.com/paperless-ngx/paperless-ngx" +repo_name = "paperless-ngx/paperless-ngx" + +nav = [ + "index.md", + "setup.md", + "usage.md", + "configuration.md", + "administration.md", + "advanced_usage.md", + "api.md", + "development.md", + "faq.md", + "troubleshooting.md", + "changelog.md", +] + +edit_uri = "blob/main/docs/" + +extra_css = ["assets/extra.css"] + +[project.theme] + +logo = "assets/logo.svg" +favicon = "assets/favicon.png" + +language = "en" + +features = [ + "announce.dismiss", + "content.code.annotate", + "content.code.copy", + "content.code.select", + "content.footnote.tooltips", + "navigation.footer", + "navigation.instant", + "navigation.instant.prefetch", + "navigation.path", + "navigation.sections", + "navigation.tabs", + "navigation.top", + "navigation.tracking", + "search.highlight", + "toc.integrate", +] + +# Palette toggle for automatic mode +[[project.theme.palette]] +media = "(prefers-color-scheme)" +primary = "green" +accent = "green" +toggle.icon = "lucide/sun-moon" +toggle.name = "Switch to light mode" + +# Palette toggle for light mode +[[project.theme.palette]] +media = "(prefers-color-scheme: light)" +scheme = "default" +primary = "green" +accent = "green" +toggle.icon = "lucide/sun" +toggle.name = "Switch to dark mode" + +# Palette toggle for dark mode +[[project.theme.palette]] +media = "(prefers-color-scheme: dark)" +scheme = "slate" +primary = "green" +accent = "green" +toggle.icon = "lucide/moon" +toggle.name = "Switch to system preference" + +[project.theme.font] +text = "Roboto" +code = "Roboto Mono" + +# Extras +[[project.extra.social]] +icon = "fontawesome/brands/github" +link = "https://github.com/paperless-ngx/paperless-ngx" + +[[project.extra.social]] +icon = "fontawesome/brands/docker" +link = "https://hub.docker.com/r/paperlessngx/paperless-ngx" + +[[project.extra.social]] +icon = "material/chat" +link = "https://matrix.to/#/#paperless:matrix.org" + +# Extensions +[project.markdown_extensions.attr_list] +[project.markdown_extensions.md_in_html] +[project.markdown_extensions.pymdownx.blocks.caption] +[project.markdown_extensions.def_list] + +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true + +[project.markdown_extensions.pymdownx.inlinehilite] + +[project.markdown_extensions.pymdownx.tilde] + +[project.markdown_extensions.pymdownx.snippets] + +[project.markdown_extensions.admonition] + +[project.markdown_extensions.pymdownx.details] + +[project.markdown_extensions.pymdownx.superfences] +custom_fences = [ + { name = "mermaid", class = "mermaid", format = "pymdownx.superfences.fence_code_format" } +] + +[project.markdown_extensions.pymdownx.emoji] +emoji_index = "zensical.extensions.emoji.twemoji" +emoji_generator = "zensical.extensions.emoji.to_svg"