diff options
| -rw-r--r-- | .github/workflows/ci.yml | 48 | ||||
| -rw-r--r-- | docs/.gitignore | 2 | ||||
| -rw-r--r-- | docs/hooks/remove-must-fail.py | 19 | ||||
| -rw-r--r-- | docs/hooks/shortcodes.py | 44 | ||||
| -rw-r--r-- | docs/mkdocs.yaml | 107 | ||||
| -rw-r--r-- | docs/pyproject.toml | 14 | ||||
| -rw-r--r-- | docs/uv.lock | 511 | ||||
| -rw-r--r-- | docs/wiki/Application-Issues.md (renamed from wiki/Application-Issues.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Animations.md (renamed from wiki/Configuration:-Animations.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Debug-Options.md (renamed from wiki/Configuration:-Debug-Options.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Gestures.md (renamed from wiki/Configuration:-Gestures.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Input.md (renamed from wiki/Configuration:-Input.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Introduction.md (renamed from wiki/Configuration:-Introduction.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Key-Bindings.md (renamed from wiki/Configuration:-Key-Bindings.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Layer-Rules.md (renamed from wiki/Configuration:-Layer-Rules.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Layout.md (renamed from wiki/Configuration:-Layout.md) | 8 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Miscellaneous.md (renamed from wiki/Configuration:-Miscellaneous.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Named-Workspaces.md (renamed from wiki/Configuration:-Named-Workspaces.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Outputs.md (renamed from wiki/Configuration:-Outputs.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Overview.md (renamed from wiki/Configuration:-Overview.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Switch-Events.md (renamed from wiki/Configuration:-Switch-Events.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Configuration:-Window-Rules.md (renamed from wiki/Configuration:-Window-Rules.md) | 16 | ||||
| -rw-r--r-- | docs/wiki/Development:-Animation-Timing.md (renamed from wiki/Development:-Animation-Timing.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Development:-Design-Principles.md (renamed from wiki/Development:-Design-Principles.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Development:-Developing-niri.md (renamed from wiki/Development:-Developing-niri.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Development:-Documenting-niri.md | 85 | ||||
| -rw-r--r-- | docs/wiki/Development:-Fractional-Layout.md (renamed from wiki/Development:-Fractional-Layout.md) | 1 | ||||
| -rw-r--r-- | docs/wiki/Development:-Redraw-Loop.md (renamed from wiki/Development:-Redraw-Loop.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Example-systemd-Setup.md (renamed from wiki/Example-systemd-Setup.md) | 4 | ||||
| -rw-r--r-- | docs/wiki/FAQ.md (renamed from wiki/FAQ.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Floating-Windows.md (renamed from wiki/Floating-Windows.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Gestures.md (renamed from wiki/Gestures.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Getting-Started.md (renamed from wiki/Getting-Started.md) | 4 | ||||
| -rw-r--r-- | docs/wiki/IPC.md (renamed from wiki/IPC.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Important-Software.md (renamed from wiki/Important-Software.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Layer‐Shell-Components.md (renamed from wiki/Layer‐Shell-Components.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Nvidia.md (renamed from wiki/Nvidia.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Overview.md (renamed from wiki/Overview.md) | 12 | ||||
| -rw-r--r-- | docs/wiki/Packaging-niri.md (renamed from wiki/Packaging-niri.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Screencasting.md (renamed from wiki/Screencasting.md) | 4 | ||||
| -rw-r--r-- | docs/wiki/Tabs.md (renamed from wiki/Tabs.md) | 2 | ||||
| -rw-r--r-- | docs/wiki/Workspaces.md (renamed from wiki/Workspaces.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/Xwayland.md (renamed from wiki/Xwayland.md) | 0 | ||||
| -rw-r--r-- | docs/wiki/_Sidebar.md (renamed from wiki/_Sidebar.md) | 1 | ||||
| -rw-r--r-- | docs/wiki/_assets/icons/logo.svg | 412 | ||||
| -rw-r--r-- | docs/wiki/_assets/stylesheets/niri.css | 60 | ||||
| -rw-r--r-- | docs/wiki/examples/close_custom_shader.frag (renamed from wiki/examples/close_custom_shader.frag) | 0 | ||||
| -rw-r--r-- | docs/wiki/examples/open_custom_shader.frag (renamed from wiki/examples/open_custom_shader.frag) | 0 | ||||
| -rw-r--r-- | docs/wiki/examples/resize_custom_shader.frag (renamed from wiki/examples/resize_custom_shader.frag) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/RedrawState-dark.drawio.png (renamed from wiki/img/RedrawState-dark.drawio.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/RedrawState-light.drawio.png (renamed from wiki/img/RedrawState-light.drawio.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/block-out-from-screencast.png (renamed from wiki/img/block-out-from-screencast.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/border-radius-clip.png (renamed from wiki/img/border-radius-clip.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/border.png (renamed from wiki/img/border.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/clip-to-geometry.png (renamed from wiki/img/clip-to-geometry.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/different-corner-radius.png (renamed from wiki/img/different-corner-radius.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/focus-ring.png (renamed from wiki/img/focus-ring.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/geometry-corner-radius.png (renamed from wiki/img/geometry-corner-radius.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/gradients-default.png (renamed from wiki/img/gradients-default.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/gradients-oklch.png (renamed from wiki/img/gradients-oklch.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/gradients-relative-to-workspace-view.png (renamed from wiki/img/gradients-relative-to-workspace-view.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/layer-block-out-from-screencast.png (renamed from wiki/img/layer-block-out-from-screencast.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/opacity-popup.png (renamed from wiki/img/opacity-popup.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/simple-egl-border-with-background.png (renamed from wiki/img/simple-egl-border-with-background.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/simple-egl-border-without-background.png (renamed from wiki/img/simple-egl-border-without-background.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/struts.png (renamed from wiki/img/struts.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/workspaces-dark.drawio.svg (renamed from wiki/img/workspaces-dark.drawio.svg) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/workspaces-dark.png (renamed from wiki/img/workspaces-dark.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/workspaces-light.drawio.svg (renamed from wiki/img/workspaces-light.drawio.svg) | 0 | ||||
| -rw-r--r-- | docs/wiki/img/workspaces-light.png (renamed from wiki/img/workspaces-light.png) | 0 | ||||
| -rw-r--r-- | docs/wiki/index.md (renamed from wiki/Home.md) | 2 | ||||
| -rw-r--r-- | niri-config/tests/wiki-parses.rs | 2 |
72 files changed, 1317 insertions, 41 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93713dff..ff10b677 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -291,21 +291,10 @@ jobs: - run: nix flake check continue-on-error: true - check-links: - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - with: - show-progress: false - - uses: lycheeverse/lychee-action@v2.0.2 # later versions break fragment checks. don't bump until this is fixed: https://github.com/lycheeverse/lychee/issues/1574 - with: - args: --offline --include-fragments 'wiki/*.md' - publish-wiki: if: github.event_name == 'push' && github.ref == 'refs/heads/main' needs: - - build - - check-links + - publish-docs permissions: contents: write runs-on: ubuntu-24.04 @@ -315,28 +304,39 @@ jobs: lfs: true show-progress: false - uses: Andrew-Chen-Wang/github-wiki-action@b7e552d7cb0fa7f83e459012ffc6840fd87bcb83 + with: + path: docs/wiki/ - rustdoc: - needs: build - permissions: - contents: write + publish-docs: + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + needs: + - build runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: + lfs: true show-progress: false - + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + - name: Install the project + run: uv sync --locked --all-extras --dev + working-directory: docs/ + - name: Generate niri documentation + run: uv run mkdocs build + working-directory: docs/ - uses: dtolnay/rust-toolchain@stable - - - name: Generate documentation + - name: Generate rustdoc documentation run: cargo doc --no-deps -p niri-ipc - - - run: cp ./resources/rustdoc-index.html ./target/doc/index.html - + - run: mkdir -p publish/niri_ipc + - run: cp -r ./target/doc/* ./publish/ + - run: cp -r ./docs/site/* ./publish/ - name: Deploy documentation if: github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./target/doc - force_orphan: true + publish_dir: ./publish + force_orphan: true
\ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..6c3abe6c --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,2 @@ +site +__pycache__
\ No newline at end of file diff --git a/docs/hooks/remove-must-fail.py b/docs/hooks/remove-must-fail.py new file mode 100644 index 00000000..3284b10d --- /dev/null +++ b/docs/hooks/remove-must-fail.py @@ -0,0 +1,19 @@ +from __future__ import annotations +import re + +# todo: this could be done generically, so that any +# ```language,annotation,anything-else +# is reduced to +# ```language +# which is what's supported by mkdocs/pygments +# also note: mkdocs provides ways to highlight lines, add line numbers +# but these are added as +# ```language linenums="1" +# and not split by comma +def on_page_markdown( + markdown: str, *, page, config, files +): + return re.sub( + r",must-fail", + '', markdown, flags = re.I | re.M + )
\ No newline at end of file diff --git a/docs/hooks/shortcodes.py b/docs/hooks/shortcodes.py new file mode 100644 index 00000000..66f5c43e --- /dev/null +++ b/docs/hooks/shortcodes.py @@ -0,0 +1,44 @@ +# Copyright (c) 2016-2025 Martin Donath <martin.donath@squidfunk.com> + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +from __future__ import annotations +import re +from re import Match + +def on_page_markdown( + markdown: str, *, page, config, files +): + def replace(match: Match): + matches = match.groups() + preposition, version = matches[0], matches[1] + return _badge_for_version(preposition, version) + + return re.sub( + r"<sup>(Until|Since): (.*?)</sup>", + replace, markdown, flags = re.I | re.M + ) + +def _badge_for_version(preposition: str, version: str): + if version == "next release": + # we might fail to make real links to release notes on other cases too, but for now this is the one i've found + return f"<span class=\"badge\">{preposition}: {version}</span>" + else: + path = f"https://github.com/YaLTeR/niri/releases/tag/v{version}" + return f"<span class=\"badge\">[{preposition}: {version}]({path})</span>" diff --git a/docs/mkdocs.yaml b/docs/mkdocs.yaml new file mode 100644 index 00000000..cbd323ad --- /dev/null +++ b/docs/mkdocs.yaml @@ -0,0 +1,107 @@ +site_name: niri +docs_dir: wiki +site_url: https://yalter.github.io/niri +repo_url: https://github.com/YaLTeR/niri +edit_uri: edit/main/docs/wiki/ +use_directory_urls: false + +theme: + name: material + logo: _assets/icons/logo.svg + favicon: _assets/icons/logo.svg + features: + - navigation.instant + - search.suggest + - content.code.copy + - content.action.edit + palette: + - media: "(prefers-color-scheme)" + primary: custom + toggle: + icon: material/brightness-auto + name: Switch to light mode + - media: "(prefers-color-scheme: light)" + primary: custom + scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + primary: custom + scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to system preference +markdown_extensions: + - github-callouts + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.magiclink + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.keys +plugins: + - search +hooks: + - hooks/shortcodes.py + - hooks/remove-must-fail.py +extra_css: + - _assets/stylesheets/niri.css +strict: true +validation: + nav: + omitted_files: warn + not_found: warn + absolute_links: relative_to_docs + links: + not_found: warn + anchors: warn + absolute_links: relative_to_docs + unrecognized_links: warn +not_in_nav: | + _Sidebar.md + Configuration:-Overview.md + index.md +# ah, wouldn't it be nice if we could autogenerate this with wiki/_Sidebar.md +nav: + - Usage: + - Getting Started: Getting-Started.md + - Example systemd Setup: Example-systemd-Setup.md + - Important Software: Important-Software.md + - Workspaces: Workspaces.md + - Floating Windows: Floating-Windows.md + - Tabs: Tabs.md + - Overview: Overview.md + - Screencasting: Screencasting.md + - Layer‐Shell Components: Layer‐Shell-Components.md + - IPC, niri msg: IPC.md + - Application-Specific Issues: Application-Issues.md + - Nvidia: Nvidia.md + - Xwayland: Xwayland.md + - Gestures: Gestures.md + - Packaging niri: Packaging-niri.md + - FAQ: FAQ.md + - Configuration: + - Introduction: Configuration:-Introduction.md + - Input: Configuration:-Input.md + - Outputs: Configuration:-Outputs.md + - Key Bindings: Configuration:-Key-Bindings.md + - Switch Events: Configuration:-Switch-Events.md + - Layout: Configuration:-Layout.md + - Named Workspaces: Configuration:-Named-Workspaces.md + - Miscellaneous: Configuration:-Miscellaneous.md + - Window Rules: Configuration:-Window-Rules.md + - Layer Rules: Configuration:-Layer-Rules.md + - Animations: Configuration:-Animations.md + - Gestures: Configuration:-Gestures.md + - Debug Options: Configuration:-Debug-Options.md + - Development: + - Design Principles: Development:-Design-Principles.md + - Developing niri: Development:-Developing-niri.md + - Documenting niri: Development:-Documenting-niri.md + - Fractional Layout: Development:-Fractional-Layout.md + - Redraw Loop: Development:-Redraw-Loop.md + - Animation Timing: Development:-Animation-Timing.md diff --git a/docs/pyproject.toml b/docs/pyproject.toml new file mode 100644 index 00000000..d80a9c17 --- /dev/null +++ b/docs/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "niri-docs" +version = "0.1.0" +requires-python = ">=3.10" +dependencies = [ + "markdown-callouts>=0.4.0", + "mkdocs-material>=9.6.15", + "pygments", +] + +# for KDL highlighting support +# TODO: use the official pygments package once https://github.com/pygments/pygments/pull/2936 is merged +[tool.uv.sources] +pygments = { git = "https://github.com/chinatsu/pygments", rev = "0f0b0d4da2839e1285881389155bb4605a0a6dc4" } diff --git a/docs/uv.lock b/docs/uv.lock new file mode 100644 index 00000000..a4381a3c --- /dev/null +++ b/docs/uv.lock @@ -0,0 +1,511 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, +] + +[[package]] +name = "backrefs" +version = "5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" }, + { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload-time = "2025-06-22T19:34:09.68Z" }, + { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload-time = "2025-06-22T19:34:11.037Z" }, + { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" }, +] + +[[package]] +name = "certifi" +version = "2025.7.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/28/9901804da60055b406e1a1c5ba7aac1276fb77f1dde635aabfc7fd84b8ab/charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941", size = 201818, upload-time = "2025-05-02T08:31:46.725Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9b/892a8c8af9110935e5adcbb06d9c6fe741b6bb02608c6513983048ba1a18/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd", size = 144649, upload-time = "2025-05-02T08:31:48.889Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a5/4179abd063ff6414223575e008593861d62abfc22455b5d1a44995b7c101/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6", size = 155045, upload-time = "2025-05-02T08:31:50.757Z" }, + { url = "https://files.pythonhosted.org/packages/3b/95/bc08c7dfeddd26b4be8c8287b9bb055716f31077c8b0ea1cd09553794665/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d", size = 147356, upload-time = "2025-05-02T08:31:52.634Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2d/7a5b635aa65284bf3eab7653e8b4151ab420ecbae918d3e359d1947b4d61/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86", size = 149471, upload-time = "2025-05-02T08:31:56.207Z" }, + { url = "https://files.pythonhosted.org/packages/ae/38/51fc6ac74251fd331a8cfdb7ec57beba8c23fd5493f1050f71c87ef77ed0/charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c", size = 151317, upload-time = "2025-05-02T08:31:57.613Z" }, + { url = "https://files.pythonhosted.org/packages/b7/17/edee1e32215ee6e9e46c3e482645b46575a44a2d72c7dfd49e49f60ce6bf/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0", size = 146368, upload-time = "2025-05-02T08:31:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/26/2c/ea3e66f2b5f21fd00b2825c94cafb8c326ea6240cd80a91eb09e4a285830/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef", size = 154491, upload-time = "2025-05-02T08:32:01.219Z" }, + { url = "https://files.pythonhosted.org/packages/52/47/7be7fa972422ad062e909fd62460d45c3ef4c141805b7078dbab15904ff7/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6", size = 157695, upload-time = "2025-05-02T08:32:03.045Z" }, + { url = "https://files.pythonhosted.org/packages/2f/42/9f02c194da282b2b340f28e5fb60762de1151387a36842a92b533685c61e/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366", size = 154849, upload-time = "2025-05-02T08:32:04.651Z" }, + { url = "https://files.pythonhosted.org/packages/67/44/89cacd6628f31fb0b63201a618049be4be2a7435a31b55b5eb1c3674547a/charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db", size = 150091, upload-time = "2025-05-02T08:32:06.719Z" }, + { url = "https://files.pythonhosted.org/packages/1f/79/4b8da9f712bc079c0f16b6d67b099b0b8d808c2292c937f267d816ec5ecc/charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a", size = 98445, upload-time = "2025-05-02T08:32:08.66Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d7/96970afb4fb66497a40761cdf7bd4f6fca0fc7bafde3a84f836c1f57a926/charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509", size = 105782, upload-time = "2025-05-02T08:32:10.46Z" }, + { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13. |
