diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 0c4f4cdf..d0874b63 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,6 +1,5 @@ # .readthedocs.yaml # Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 @@ -10,13 +9,12 @@ build: os: ubuntu-24.04 tools: python: '3.13' - -mkdocs: - configuration: mkdocs.yml - -# Optionally declare the Python requirements required to build your docs -python: - install: - - requirements: docs/requirements.txt - -formats: all + jobs: + install: + - pip install -r docs/requirements.txt + build: + html: + - zensical build + post_build: + - mkdir -p $READTHEDOCS_OUTPUT/html/ + - cp --recursive site/* $READTHEDOCS_OUTPUT/html/ diff --git a/docs/requirements.txt b/docs/requirements.txt index 608881b6..f2dafaac 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ jinja2 python-markdown-math -mkdocs +zensical mkdocs-material \ No newline at end of file diff --git a/docs/css/extra.css b/docs/stylesheets/extra.css similarity index 78% rename from docs/css/extra.css rename to docs/stylesheets/extra.css index 70447427..e333e1de 100644 --- a/docs/css/extra.css +++ b/docs/stylesheets/extra.css @@ -1,3 +1,11 @@ +[data-md-color-primary='custom'] { + --md-primary-fg-color: #ff3166; + --md-primary-fg-color--light: #ff3166; + --md-primary-fg-color--dark: #ff3166; + --md-primary-bg-color: #fff; + --md-primary-bg-color--light: #ffffffb3; +} + @media screen and (max-width: 768px) { img { width: auto; diff --git a/justfile b/justfile index 3e71d55b..8ca7dcf6 100644 --- a/justfile +++ b/justfile @@ -161,12 +161,12 @@ python-test: # Serve documentation locally [group('Documentation')] docs: - uv run mkdocs serve + uv run zensical serve # Build documentation [group('Documentation')] docs-build: - uv run mkdocs build + uv run zensical build # Install pre-commit hooks [group('Pre-commit & CI')] diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index 4d04cb66..00000000 --- a/mkdocs.yml +++ /dev/null @@ -1,89 +0,0 @@ -site_name: 'CocktailBerry: Open Source Cocktail Machine Software' -site_description: 'Official CocktailBerry Documentation: Open Source Software to easily build your own automated cocktail machine.' -site_author: Andre Wohnsland -copyright: © Copyright 2026, Andre Wohnsland & contributors -repo_url: https://github.com/AndreWohnsland/CocktailBerry -repo_name: 'GitHub Cocktailberry' -nav: - - Home: index.md - - About: about.md - - Quickstart: quickstart.md - - Installation: installation.md - - Hardware: hardware.md - - Setup / Usage: setup.md - - CocktailBerry Web: web.md - - Supported Languages: languages.md - - CLI commands: commands.md - - Payment Feature: payment.md - - Advanced Topics: advanced.md - - Addons: addons.md - - Troubleshooting: troubleshooting.md - - FAQ: faq.md - - Feature Timetable: features.md - - Development: development.md - - How to Support: support.md -markdown_extensions: - - toc: - permalink: '#' - - attr_list - - md_in_html - - admonition - - pymdownx.details - - pymdownx.highlight: - anchor_linenums: true - - pymdownx.inlinehilite - - pymdownx.snippets - - pymdownx.superfences: - custom_fences: - - name: mermaid - class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - - pymdownx.arithmatex: - generic: true - - pymdownx.emoji: - emoji_index: !!python/name:material.extensions.emoji.twemoji - emoji_generator: !!python/name:materialx.emoji.to_svg - - pymdownx.tabbed: - alternate_style: true - combine_header_slug: true - slugify: !!python/object/apply:pymdownx.slugs.slugify - kwds: - case: lower -theme: - features: - - navigation.footer - - content.code.copy - - content.code.annotate - - announce.dismiss - - content.tabs.link - name: material - custom_dir: docs/overrides - logo: img/berry.svg - palette: - - media: '(prefers-color-scheme: light)' - scheme: default - primary: pink - toggle: - icon: material/weather-sunny - name: Switch to dark mode - - # Palette toggle for dark mode - - media: '(prefers-color-scheme: dark)' - scheme: slate - primary: pink - toggle: - icon: material/weather-night - name: Switch to light mode - # logo: pictures/CocktailBerry.svg - favicon: img/favicon.ico -# extra: -# version: 1.8.0 -plugins: - - search: - separator: '[\s\-\.]+' -extra_css: - - css/extra.css -extra_javascript: - # - javascripts/mathjax.js - - https://polyfill.io/v3/polyfill.min.js?features=es6 - - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js diff --git a/pyproject.toml b/pyproject.toml index 8fb0a727..b9162f01 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,13 +36,13 @@ dependencies = [ [dependency-groups] dev = [ "mkdocs-material>=9.5.49", - "mkdocs>=1.6.1", "ipykernel>=6.29.5", "pytest>=8.3.4", "pytest-cov>=6.0.0", "pre-commit>=4.2.0", "ty==0.0.16", "ruff>=0.15.1", + "zensical>=0.0.24", ] [project.optional-dependencies] diff --git a/uv.lock b/uv.lock index 8eb76ca5..5fc5da56 100644 --- a/uv.lock +++ b/uv.lock @@ -326,13 +326,13 @@ v1 = [ [package.dev-dependencies] dev = [ { name = "ipykernel" }, - { name = "mkdocs" }, { name = "mkdocs-material" }, { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "ruff" }, { name = "ty" }, + { name = "zensical" }, ] [package.metadata] @@ -372,13 +372,13 @@ provides-extras = ["v1", "nfc"] [package.metadata.requires-dev] dev = [ { name = "ipykernel", specifier = ">=6.29.5" }, - { name = "mkdocs", specifier = ">=1.6.1" }, { name = "mkdocs-material", specifier = ">=9.5.49" }, { name = "pre-commit", specifier = ">=4.2.0" }, { name = "pytest", specifier = ">=8.3.4" }, { name = "pytest-cov", specifier = ">=6.0.0" }, { name = "ruff", specifier = ">=0.15.1" }, { name = "ty", specifier = "==0.0.16" }, + { name = "zensical", specifier = ">=0.0.24" }, ] [[package]] @@ -465,6 +465,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073, upload-time = "2022-01-07T08:20:03.734Z" }, ] +[[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 = "distlib" version = "0.3.9" @@ -1377,15 +1386,15 @@ wheels = [ [[package]] name = "pymdown-extensions" -version = "10.12" +version = "10.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d8/0b/32f05854cfd432e9286bb41a870e0d1a926b72df5f5cdb6dec962b2e369e/pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7", size = 840790, upload-time = "2024-10-29T02:22:12.433Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/63/06673d1eb6d8f83c0ea1f677d770e12565fb516928b4109c9e2055656a9e/pymdown_extensions-10.21.tar.gz", hash = "sha256:39f4a020f40773f6b2ff31d2cd2546c2c04d0a6498c31d9c688d2be07e1767d5", size = 853363, upload-time = "2026-02-15T20:44:06.748Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/32/95a164ddf533bd676cbbe878e36e89b4ade3efde8dd61d0148c90cbbe57e/pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77", size = 263448, upload-time = "2024-10-29T02:22:10.396Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.whl", hash = "sha256:91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f", size = 268877, upload-time = "2026-02-15T20:44:05.464Z" }, ] [[package]] @@ -2215,3 +2224,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6c/fd/ab6b7676ba712f2fc89d1347a4b5bdc6aa130de10404071f2b2606450209/websockets-14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0", size = 163277, upload-time = "2024-11-13T07:10:50.561Z" }, { url = "https://files.pythonhosted.org/packages/b0/0b/c7e5d11020242984d9d37990310520ed663b942333b83a033c2f20191113/websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e", size = 156277, upload-time = "2024-11-13T07:11:27.848Z" }, ] + +[[package]] +name = "zensical" +version = "0.0.24" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "deepmerge" }, + { name = "markdown" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/96/9c6cbdd7b351d1023cdbbcf7872d4cb118b0334cfe5821b99e0dd18e3f00/zensical-0.0.24.tar.gz", hash = "sha256:b5d99e225329bf4f98c8022bdf0a0ee9588c2fada7b4df1b7b896fcc62b37ec3", size = 3840688, upload-time = "2026-02-26T09:43:44.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/aa/b8201af30e376a67566f044a1c56210edac5ae923fd986a836d2cf593c9c/zensical-0.0.24-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d390c5453a5541ca35d4f9e1796df942b6612c546e3153dd928236d3b758409a", size = 12263407, upload-time = "2026-02-26T09:43:14.716Z" }, + { url = "https://files.pythonhosted.org/packages/78/8e/3d910214471ade604fd39b080db3696864acc23678b5b4b8475c7dbfd2ce/zensical-0.0.24-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:81ac072869cf4d280853765b2bfb688653da0dfb9408f3ab15aca96455ab8223", size = 12142610, upload-time = "2026-02-26T09:43:17.546Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d7/eb0983640aa0419ddf670298cfbcf8b75629b6484925429b857851e00784/zensical-0.0.24-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5eb1dfa84cae8e960bfa2c6851d2bc8e9710c4c4c683bd3aaf23185f646ae46", size = 12508380, upload-time = "2026-02-26T09:43:20.114Z" }, + { url = "https://files.pythonhosted.org/packages/a3/04/4405b9e6f937a75db19f0d875798a7eb70817d6a3bec2a2d289a2d5e8aea/zensical-0.0.24-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:57d7c9e589da99c1879a1c703e67c85eaa6be4661cdc6ce6534f7bb3575983f4", size = 12440807, upload-time = "2026-02-26T09:43:22.679Z" }, + { url = "https://files.pythonhosted.org/packages/12/dc/a7ca2a4224b3072a2c2998b6611ad7fd4f8f131ceae7aa23238d97d26e22/zensical-0.0.24-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42fcc121c3095734b078a95a0dae4d4924fb8fbf16bf730456146ad6cab48ad0", size = 12782727, upload-time = "2026-02-26T09:43:25.347Z" }, + { url = "https://files.pythonhosted.org/packages/42/37/22f1727da356ed3fcbd31f68d4a477f15c232997c87e270cfffb927459ac/zensical-0.0.24-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:832d4a2a051b9f49561031a2986ace502326f82d9a401ddf125530d30025fdd4", size = 12547616, upload-time = "2026-02-26T09:43:28.031Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ff/c75ff111b8e12157901d00752beef9d691dbb5a034b6a77359972262416a/zensical-0.0.24-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e5fea3bb61238dba9f930f52669db67b0c26be98e1c8386a05eb2b1e3cb875dc", size = 12684883, upload-time = "2026-02-26T09:43:30.642Z" }, + { url = "https://files.pythonhosted.org/packages/b9/92/4f6ea066382e3d068d3cadbed99e9a71af25e46c84a403e0f747960472a2/zensical-0.0.24-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:75eef0428eec2958590633fdc82dc2a58af124879e29573aa7e153b662978073", size = 12713825, upload-time = "2026-02-26T09:43:33.273Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fb/bf735b19bce0034b1f3b8e1c50b2896ebbd0c5d92d462777e759e78bb083/zensical-0.0.24-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:3c6b39659156394ff805b4831dac108c839483d9efa4c9b901eaa913efee1ac7", size = 12854318, upload-time = "2026-02-26T09:43:35.632Z" }, + { url = "https://files.pythonhosted.org/packages/7e/28/0ddab6c1237e3625e7763ff666806f31e5760bb36d18624135a6bb6e8643/zensical-0.0.24-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9eef82865a18b3ca4c3cd13e245dff09a865d1da3c861e2fc86eaa9253a90f02", size = 12818270, upload-time = "2026-02-26T09:43:37.749Z" }, + { url = "https://files.pythonhosted.org/packages/2a/93/d2cef3705d4434896feadffb5b3e44744ef9f1204bc41202c1b84a4eeef6/zensical-0.0.24-cp310-abi3-win32.whl", hash = "sha256:f4d0ff47d505c786a26c9332317aa3e9ad58d1382f55212a10dc5bafcca97864", size = 11857695, upload-time = "2026-02-26T09:43:39.906Z" }, + { url = "https://files.pythonhosted.org/packages/f1/26/9707587c0f6044dd1e1cc5bc3b9fa5fed81ce6c7bcdb09c21a9795e802d9/zensical-0.0.24-cp310-abi3-win_amd64.whl", hash = "sha256:e00a62cf04526dbed665e989b8f448eb976247f077a76dfdd84699ace4aa3ac3", size = 12057762, upload-time = "2026-02-26T09:43:42.627Z" }, +] diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 00000000..416ef575 --- /dev/null +++ b/zensical.toml @@ -0,0 +1,93 @@ +[project] +site_name = "CocktailBerry: Open Source Cocktail Machine Software" +site_description = "Official CocktailBerry Documentation: Open Source Software to easily build your own automated cocktail machine." +site_author = "Andre Wohnsland" +copyright = "© Copyright 2026, Andre Wohnsland & contributors" +repo_url = "https://github.com/AndreWohnsland/CocktailBerry" +repo_name = "GitHub Cocktailberry" + +nav = [ + { "Home" = "index.md" }, + { "About" = "about.md" }, + { "Quickstart" = "quickstart.md" }, + { "Installation" = "installation.md" }, + { "Hardware" = "hardware.md" }, + { "Setup / Usage" = "setup.md" }, + { "CocktailBerry Web" = "web.md" }, + { "Supported Languages" = "languages.md" }, + { "CLI commands" = "commands.md" }, + { "Payment Feature" = "payment.md" }, + { "Service Personnel" = "waiter.md" }, + { "Advanced Topics" = "advanced.md" }, + { "Addons" = "addons.md" }, + { "Troubleshooting" = "troubleshooting.md" }, + { "FAQ" = "faq.md" }, + { "Feature Timetable" = "features.md" }, + { "Development" = "development.md" }, + { "How to Support" = "support.md" }, +] + +extra_css = ["stylesheets/extra.css"] + +[project.theme] +variant = "classic" +custom_dir = "docs/overrides" +logo = "img/berry.svg" +favicon = "img/favicon.ico" +features = [ + "navigation.footer", + "content.code.copy", + "content.code.annotate", + "announce.dismiss", + "content.tabs.link", +] + +[[project.theme.palette]] +scheme = "default" +primary = "custom" +toggle.icon = "material/weather-sunny" +toggle.name = "Switch to dark mode" + +[[project.theme.palette]] +scheme = "slate" +primary = "custom" +toggle.icon = "material/weather-night" +toggle.name = "Switch to light mode" + +# Since we customize superfences and tabbed, we must explicitly define all extensions +# https://zensical.org/docs/setup/extensions/#default-configuration-zensicaltoml +[project.markdown_extensions.abbr] +[project.markdown_extensions.admonition] +[project.markdown_extensions.attr_list] +[project.markdown_extensions.def_list] +[project.markdown_extensions.footnotes] +[project.markdown_extensions.md_in_html] +[project.markdown_extensions.toc] +permalink = "#" +[project.markdown_extensions.pymdownx.arithmatex] +generic = true +[project.markdown_extensions.pymdownx.betterem] +smart_enable = "all" +[project.markdown_extensions.pymdownx.caret] +[project.markdown_extensions.pymdownx.details] +[project.markdown_extensions.pymdownx.emoji] +emoji_index = "zensical.extensions.emoji.twemoji" +emoji_generator = "zensical.extensions.emoji.to_svg" +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true +[project.markdown_extensions.pymdownx.inlinehilite] +[project.markdown_extensions.pymdownx.keys] +[project.markdown_extensions.pymdownx.mark] +[project.markdown_extensions.pymdownx.smartsymbols] +[project.markdown_extensions.pymdownx.snippets] +[project.markdown_extensions.pymdownx.superfences] +custom_fences = [ + { name = "mermaid", class = "mermaid", format = "pymdownx.superfences.fence_code_format" }, +] +[project.markdown_extensions.pymdownx.tabbed] +alternate_style = true +combine_header_slug = true +slugify = { function = "pymdownx.slugs.slugify", kwds = { case = "lower" } } +[project.markdown_extensions.pymdownx.tasklist] +custom_checkbox = true +[project.markdown_extensions.pymdownx.tilde]