Repository: LGUG2Z/komorebi Branch: master Commit: 5f629e1f1af2 Files: 336 Total size: 2.3 MB Directory structure: gitextract_6y14ka6j/ ├── .czrc ├── .envrc ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── feature-check.yaml │ └── windows.yaml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cargo.toml ├── LICENSE.md ├── PRIVACY.md ├── README.md ├── check_schema_docs.py ├── deny.toml ├── dependencies.json ├── docs/ │ ├── cli/ │ │ ├── adjust-container-padding.md │ │ ├── adjust-workspace-padding.md │ │ ├── ahk-app-specific-configuration.md │ │ ├── animation-duration.md │ │ ├── animation-fps.md │ │ ├── animation-style.md │ │ ├── animation.md │ │ ├── application-specific-configuration-schema.md │ │ ├── bar-configuration.md │ │ ├── border-colour.md │ │ ├── border-implementation.md │ │ ├── border-offset.md │ │ ├── border-style.md │ │ ├── border-width.md │ │ ├── border.md │ │ ├── cancel-preselect.md │ │ ├── change-layout.md │ │ ├── check.md │ │ ├── clear-all-workspace-rules.md │ │ ├── clear-named-workspace-layout-rules.md │ │ ├── clear-named-workspace-rules.md │ │ ├── clear-session-float-rules.md │ │ ├── clear-workspace-layout-rules.md │ │ ├── clear-workspace-rules.md │ │ ├── close-workspace.md │ │ ├── close.md │ │ ├── complete-configuration.md │ │ ├── configuration.md │ │ ├── container-padding.md │ │ ├── convert-app-specific-configuration.md │ │ ├── cross-monitor-move-behaviour.md │ │ ├── cycle-empty-workspace.md │ │ ├── cycle-focus.md │ │ ├── cycle-layout.md │ │ ├── cycle-monitor.md │ │ ├── cycle-move-to-monitor.md │ │ ├── cycle-move-to-workspace.md │ │ ├── cycle-move-workspace-to-monitor.md │ │ ├── cycle-move.md │ │ ├── cycle-send-to-monitor.md │ │ ├── cycle-send-to-workspace.md │ │ ├── cycle-stack-index.md │ │ ├── cycle-stack.md │ │ ├── cycle-workspace.md │ │ ├── data-directory.md │ │ ├── disable-autostart.md │ │ ├── display-index-preference.md │ │ ├── eager-focus.md │ │ ├── enable-autostart.md │ │ ├── enforce-workspace-rules.md │ │ ├── ensure-named-workspaces.md │ │ ├── ensure-workspaces.md │ │ ├── fetch-app-specific-configuration.md │ │ ├── flip-layout.md │ │ ├── focus-last-workspace.md │ │ ├── focus-monitor-at-cursor.md │ │ ├── focus-monitor-workspace.md │ │ ├── focus-monitor.md │ │ ├── focus-named-workspace.md │ │ ├── focus-stack-window.md │ │ ├── focus-workspace.md │ │ ├── focus-workspaces.md │ │ ├── focus.md │ │ ├── focused-workspace-container-padding.md │ │ ├── focused-workspace-padding.md │ │ ├── force-focus.md │ │ ├── generate-static-config.md │ │ ├── global-state.md │ │ ├── global-work-area-offset.md │ │ ├── gui.md │ │ ├── identify-layered-application.md │ │ ├── identify-object-name-change-application.md │ │ ├── identify-tray-application.md │ │ ├── ignore-rule.md │ │ ├── initial-named-workspace-rule.md │ │ ├── initial-workspace-rule.md │ │ ├── invisible-borders.md │ │ ├── kill.md │ │ ├── license.md │ │ ├── load-resize.md │ │ ├── log.md │ │ ├── manage-rule.md │ │ ├── manage.md │ │ ├── minimize.md │ │ ├── monitor-index-preference.md │ │ ├── monitor-information.md │ │ ├── monitor-work-area-offset.md │ │ ├── mouse-follows-focus.md │ │ ├── move-to-last-workspace.md │ │ ├── move-to-monitor-workspace.md │ │ ├── move-to-monitor.md │ │ ├── move-to-named-workspace.md │ │ ├── move-to-workspace.md │ │ ├── move-workspace-to-monitor.md │ │ ├── move.md │ │ ├── named-workspace-container-padding.md │ │ ├── named-workspace-layout-rule.md │ │ ├── named-workspace-layout.md │ │ ├── named-workspace-padding.md │ │ ├── named-workspace-rule.md │ │ ├── named-workspace-tiling.md │ │ ├── new-workspace.md │ │ ├── notification-schema.md │ │ ├── preselect-direction.md │ │ ├── promote-focus.md │ │ ├── promote-swap.md │ │ ├── promote-window.md │ │ ├── promote.md │ │ ├── pwsh-app-specific-configuration.md │ │ ├── query.md │ │ ├── quick-load-resize.md │ │ ├── quick-save-resize.md │ │ ├── quickstart.md │ │ ├── reload-configuration.md │ │ ├── remove-title-bar.md │ │ ├── replace-configuration.md │ │ ├── resize-axis.md │ │ ├── resize-delta.md │ │ ├── resize-edge.md │ │ ├── restore-windows.md │ │ ├── retile.md │ │ ├── save-resize.md │ │ ├── scrolling-layout-columns.md │ │ ├── send-to-last-workspace.md │ │ ├── send-to-monitor-workspace.md │ │ ├── send-to-monitor.md │ │ ├── send-to-named-workspace.md │ │ ├── send-to-workspace.md │ │ ├── session-float-rule.md │ │ ├── session-float-rules.md │ │ ├── socket-schema.md │ │ ├── stack-all.md │ │ ├── stack.md │ │ ├── stackbar-mode.md │ │ ├── start.md │ │ ├── state.md │ │ ├── static-config-schema.md │ │ ├── stop.md │ │ ├── subscribe-pipe.md │ │ ├── subscribe-socket.md │ │ ├── swap-workspaces-with-monitor.md │ │ ├── toggle-cross-monitor-move-behaviour.md │ │ ├── toggle-float-override.md │ │ ├── toggle-float.md │ │ ├── toggle-lock.md │ │ ├── toggle-maximize.md │ │ ├── toggle-monocle.md │ │ ├── toggle-mouse-follows-focus.md │ │ ├── toggle-pause.md │ │ ├── toggle-shortcuts.md │ │ ├── toggle-tiling.md │ │ ├── toggle-title-bars.md │ │ ├── toggle-transparency.md │ │ ├── toggle-window-based-work-area-offset.md │ │ ├── toggle-window-container-behaviour.md │ │ ├── toggle-workspace-float-override.md │ │ ├── toggle-workspace-layer.md │ │ ├── toggle-workspace-window-container-behaviour.md │ │ ├── transparency-alpha.md │ │ ├── transparency.md │ │ ├── unmanage.md │ │ ├── unmanaged-window-operation-behaviour.md │ │ ├── unstack-all.md │ │ ├── unstack.md │ │ ├── unsubscribe-pipe.md │ │ ├── unsubscribe-socket.md │ │ ├── visible-windows.md │ │ ├── watch-configuration.md │ │ ├── whkdrc.md │ │ ├── window-hiding-behaviour.md │ │ ├── workspace-layout-rule.md │ │ ├── workspace-layout.md │ │ ├── workspace-name.md │ │ ├── workspace-padding.md │ │ ├── workspace-rule.md │ │ ├── workspace-tiling.md │ │ └── workspace-work-area-offset.md │ ├── common-workflows/ │ │ ├── animations.md │ │ ├── autohotkey.md │ │ ├── autostart.md │ │ ├── borders.md │ │ ├── dynamic-layout-switching.md │ │ ├── floating-applications.md │ │ ├── force-manage-windows.md │ │ ├── ignore-windows.md │ │ ├── komorebi-config-home.md │ │ ├── layout-ratios.md │ │ ├── mouse-follows-focus.md │ │ ├── multi-monitor-setup.md │ │ ├── multiple-bar-instances.md │ │ ├── remove-gaps.md │ │ ├── stackbar.md │ │ └── tray-and-multi-window-applications.md │ ├── design.md │ ├── example-configurations.md │ ├── index.md │ ├── installation.md │ ├── komorebi.ahk.txt │ ├── komorebi.bar.example.json │ ├── komorebi.example.json │ ├── troubleshooting.md │ ├── usage/ │ │ ├── focusing-windows.md │ │ ├── focusing-workspaces.md │ │ ├── moving-windows-across-workspaces.md │ │ ├── moving-windows.md │ │ └── stacking-windows.md │ └── whkdrc.sample ├── flake.nix ├── justfile ├── komorebi/ │ ├── Cargo.toml │ ├── build.rs │ └── src/ │ ├── animation/ │ │ ├── animation_manager.rs │ │ ├── engine.rs │ │ ├── lerp.rs │ │ ├── mod.rs │ │ ├── prefix.rs │ │ ├── render_dispatcher.rs │ │ └── style.rs │ ├── border_manager/ │ │ ├── border.rs │ │ └── mod.rs │ ├── com/ │ │ ├── interfaces.rs │ │ └── mod.rs │ ├── container.rs │ ├── core/ │ │ ├── animation.rs │ │ ├── asc.rs │ │ ├── config_generation.rs │ │ ├── mod.rs │ │ └── pathext.rs │ ├── focus_manager.rs │ ├── lib.rs │ ├── lockable_sequence.rs │ ├── main.rs │ ├── monitor.rs │ ├── monitor_reconciliator/ │ │ ├── hidden.rs │ │ └── mod.rs │ ├── process_command.rs │ ├── process_event.rs │ ├── process_movement.rs │ ├── reaper.rs │ ├── ring.rs │ ├── set_window_position.rs │ ├── splash.rs │ ├── stackbar_manager/ │ │ ├── mod.rs │ │ └── stackbar.rs │ ├── state.rs │ ├── static_config.rs │ ├── styles.rs │ ├── theme_manager.rs │ ├── transparency_manager.rs │ ├── window.rs │ ├── window_manager.rs │ ├── window_manager_event.rs │ ├── windows_api.rs │ ├── windows_callbacks.rs │ ├── winevent.rs │ ├── winevent_listener.rs │ └── workspace.rs ├── komorebi-bar/ │ ├── Cargo.toml │ └── src/ │ ├── bar.rs │ ├── config.rs │ ├── main.rs │ ├── render.rs │ ├── selected_frame.rs │ ├── ui.rs │ └── widgets/ │ ├── applications.rs │ ├── battery.rs │ ├── cpu.rs │ ├── date.rs │ ├── keyboard.rs │ ├── komorebi.rs │ ├── komorebi_layout.rs │ ├── media.rs │ ├── memory.rs │ ├── mod.rs │ ├── network.rs │ ├── storage.rs │ ├── time.rs │ ├── update.rs │ └── widget.rs ├── komorebi-client/ │ ├── Cargo.toml │ └── src/ │ └── lib.rs ├── komorebi-gui/ │ ├── Cargo.toml │ └── src/ │ └── main.rs ├── komorebi-layouts/ │ ├── Cargo.toml │ └── src/ │ ├── arrangement.rs │ ├── arrangement_tests.rs │ ├── custom_layout.rs │ ├── cycle_direction.rs │ ├── default_layout.rs │ ├── direction.rs │ ├── layout.rs │ ├── lib.rs │ ├── operation_direction.rs │ ├── rect.rs │ └── sizing.rs ├── komorebi-shortcuts/ │ ├── Cargo.toml │ └── src/ │ └── main.rs ├── komorebi-themes/ │ ├── Cargo.toml │ └── src/ │ ├── colour.rs │ ├── generator.rs │ └── lib.rs ├── komorebic/ │ ├── Cargo.toml │ ├── build.rs │ └── src/ │ └── main.rs ├── komorebic-no-console/ │ ├── Cargo.toml │ └── src/ │ └── main.rs ├── komorebic.lib.ahk ├── mkdocs.yml ├── rust-toolchain.toml ├── rustfmt.toml ├── schema.asc.json ├── schema.bar.json ├── schema.json └── wix/ ├── License.rtf └── main.wxs ================================================ FILE CONTENTS ================================================ ================================================ FILE: .czrc ================================================ { "path": "cz-conventional-changelog" } ================================================ FILE: .envrc ================================================ use flake ================================================ FILE: .gitattributes ================================================ *.json text diff ================================================ FILE: .github/FUNDING.yml ================================================ github: LGUG2Z ko_fi: lgug2z ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: Bug report description: File a bug report labels: [bug] title: "[BUG]: " body: - type: markdown attributes: value: | Please **do not** open an issue for applications with invisible windows leaving ghost tiles. You can run `komorebic visible-windows` when the ghost tile is present on your workspace to retrieve the invisible window's exe, class name and title, and then use that information to [ignore the window](https://lgug2z.github.io/komorebi/common-workflows/ignore-windows.html) responsible for the ghost tile. If it is not possible to uniquely identify the invisible window resulting in a ghost tile through a mixture of exe, title and class identifiers, then this is not a bug with komorebi but a bug with the application you are using, and you should open an issue with the developer(s) of that application. - type: textarea validations: required: true attributes: label: Summary description: > Please provide a short summary of the bug, along with any information you feel is relevant to replicating the bug. You may include screenshots and videos in this section. - type: textarea validations: required: true attributes: label: Version Information description: > Please provide information about the versions of Windows and komorebi running on your machine. Do not submit a bug if you are not using an official version of Windows such as AtlasOS; only official versions of Windows are supported. ``` systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version" ``` ``` komorebic --version ``` - type: textarea validations: required: true attributes: label: Komorebi Configuration description: > Please provide your configuration file (komorebi.json or komorebi.bar.json) render: json - type: textarea validations: required: true attributes: label: Hotkey Configuration description: > Please provide your whkdrc or komorebi.ahk hotkey configuration file render: shell - type: textarea validations: required: true attributes: label: Output of komorebic check description: > Please provide the output of `komorebic check` render: shell ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Komorebi Documentation url: https://lgug2z.github.io/komorebi/ about: Please search the documentation website before opening an issue - name: Komorebi Quickstart Tutorial Video url: https://www.youtube.com/watch?v=MMZUAtHbTYY about: If you are new, please make sure you watch the quickstart tutorial video ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.yml ================================================ name: Feature request description: Suggest a new feature (Limited to Sponsors, Commercial License Holders, and Collaborators) labels: [enhancement] title: "[FEAT]: " body: - type: dropdown id: Eligibility attributes: label: Eligibility description: > Feature requests are considered from individuals who are current $5+ monthly sponsors to the project, individual commercial use license holders, and approved collaborators. Please specify the platform you use to sponsor the project. options: - Individual Commercial Use License - GitHub Sponsor - Ko-fi Sponsor - Approved Collaborator default: 0 validations: required: true - type: textarea validations: required: true attributes: label: Suggestion description: > Please share your suggestion here. Be sure to include all necessary context. If you sponsor on a platform where you use a different username, please specify the username here. - type: textarea validations: required: true attributes: label: Alternatives Considered description: > Please share share alternatives you have considered here. ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" assignees: - "LGUG2Z" commit-message: prefix: chore include: scope - package-ecosystem: "cargo" directory: "/" schedule: interval: "weekly" assignees: - "LGUG2Z" commit-message: prefix: chore include: scope ================================================ FILE: .github/pull_request_template.md ================================================ ================================================ FILE: .github/workflows/feature-check.yaml ================================================ name: Feature Issue Check on: issues: types: [ opened ] jobs: auto-close: runs-on: ubuntu-latest permissions: issues: write steps: - name: Check and close feature issues uses: actions/github-script@v8 with: script: | const issue = context.payload.issue; if (issue.title.startsWith('[FEAT]: ')) { const message = ` Feature requests on this repository are only open to current [GitHub sponsors](https://github.com/sponsors/LGUG2Z) on the $5/month tier and above, people with a valid [individual commercial use license](https://lgug2z.com/software/komorebi), and approved contributors. This issue has been automatically closed until one of those pre-requisites can be validated. `.replace(/^\s+/gm, ''); await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issue.number, body: message, }); await github.rest.issues.update({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issue.number, state: 'closed' }); await github.rest.issues.lock({ owner: context.repo.owner, repo: context.repo.repo, issue_number: issue.number, state: 'resolved' }); } ================================================ FILE: .github/workflows/windows.yaml ================================================ # Adapted from https://github.com/rust-lang/rustup/blob/master/.github/workflows/windows-builds-on-master.yaml name: Windows on: pull_request: branches: - "*" push: branches: - master - feature/* - hotfix/* tags: - v* schedule: - cron: "30 0 * * 0" # Every day at 00:30 UTC workflow_dispatch: jobs: cargo-deny: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: EmbarkStudios/cargo-deny-action@v2 build: strategy: fail-fast: true matrix: platform: - os-name: Windows-x86_64 runs-on: windows-latest target: x86_64-pc-windows-msvc - os-name: Windows-aarch64 runs-on: windows-latest target: aarch64-pc-windows-msvc runs-on: ${{ matrix.platform.runs-on }} permissions: write-all env: RUSTFLAGS: -Ctarget-feature=+crt-static -Dwarnings GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - run: rustup toolchain install stable --profile minimal - run: rustup component add --toolchain stable-x86_64-pc-windows-msvc clippy - run: rustup toolchain install nightly --allow-downgrade -c rustfmt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" key: ${{ matrix.platform.target }} - run: cargo +nightly fmt --check - run: cargo clippy - run: cargo test - uses: houseabsolute/actions-rust-cross@v1 with: command: "build" target: ${{ matrix.platform.target }} args: "--locked --release" - run: | cargo install cargo-wix cargo wix --no-build -p komorebi --nocapture -I .\wix\main.wxs --target ${{ matrix.platform.target }} - uses: actions/upload-artifact@v6 with: name: komorebi-${{ matrix.platform.target }}-${{ github.sha }} path: | target/${{ matrix.platform.target }}/release/*.exe target/${{ matrix.platform.target }}/release/*.pdb target/wix/komorebi-*.msi retention-days: 14 nightly: needs: build runs-on: windows-latest permissions: write-all if: ${{ github.ref == 'refs/heads/master' && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' ) }} env: GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - shell: bash run: echo "VERSION=nightly" >> $GITHUB_ENV - uses: actions/download-artifact@v7 - run: | Compress-Archive -Force ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/x86_64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip Copy-Item ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/wix/*x86_64.msi -Destination ./komorebi-$Env:VERSION-x86_64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip" >checksums.txt Compress-Archive -Force ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/aarch64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip Copy-Item ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/wix/*aarch64.msi -Destination ./komorebi-$Env:VERSION-aarch64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip" >>checksums.txt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" - shell: bash run: | if ! type kokai >/dev/null; then cargo install --locked kokai --force; fi git tag -d nightly || true git tag nightly kokai release --no-emoji --add-links github:commits,issues --ref nightly >"CHANGELOG.md" - shell: bash run: | gh release delete nightly --yes || true git push origin :nightly || true gh release create nightly \ --target $GITHUB_SHA \ --prerelease \ --title "komorebi nightly (${GITHUB_SHA})" \ --notes-file CHANGELOG.md \ komorebi-nightly-x86_64-pc-windows-msvc.zip \ komorebi-nightly-x86_64.msi \ komorebi-nightly-aarch64-pc-windows-msvc.zip \ komorebi-nightly-aarch64.msi \ checksums.txt release-dry-run: needs: build runs-on: windows-latest permissions: write-all if: ${{ github.ref == 'refs/heads/master' }} env: GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - shell: bash run: | TAG=${{ github.event.release.tag_name }} echo "VERSION=${TAG#v}" >> $GITHUB_ENV - uses: actions/download-artifact@v7 - run: | Compress-Archive -Force ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/x86_64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip Copy-Item ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/wix/*x86_64.msi -Destination ./komorebi-$Env:VERSION-x86_64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip" >checksums.txt Compress-Archive -Force ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/aarch64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip Copy-Item ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/wix/*aarch64.msi -Destination ./komorebi-$Env:VERSION-aarch64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip" >>checksums.txt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" - shell: bash run: | if ! type kokai >/dev/null; then cargo install --locked kokai --force; fi git tag -d nightly || true kokai release --no-emoji --add-links github:commits,issues --ref "${{ github.ref_name }}" >"CHANGELOG.md" - uses: softprops/action-gh-release@v2 with: draft: true body_path: "CHANGELOG.md" files: | checksums.txt *.zip *.msi release: needs: build runs-on: windows-latest permissions: write-all if: startsWith(github.ref, 'refs/tags/v') env: GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - shell: bash run: | TAG=${{ github.ref_name }} echo "VERSION=${TAG#v}" >> $GITHUB_ENV - uses: actions/download-artifact@v7 - run: | Compress-Archive -Force ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/x86_64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip Copy-Item ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/wix/*x86_64.msi -Destination ./komorebi-$Env:VERSION-x86_64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip" >checksums.txt Compress-Archive -Force ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/aarch64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip Copy-Item ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/wix/*aarch64.msi -Destination ./komorebi-$Env:VERSION-aarch64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip" >>checksums.txt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" - shell: bash run: | if ! type kokai >/dev/null; then cargo install --locked kokai --force; fi git tag -d nightly || true kokai release --no-emoji --add-links github:commits,issues --ref "$(git tag --points-at HEAD)" >"CHANGELOG.md" - uses: softprops/action-gh-release@v2 with: body_path: "CHANGELOG.md" files: | checksums.txt *.zip *.msi winget: runs-on: ubuntu-latest needs: release if: startsWith(github.ref, 'refs/tags/v') steps: - uses: vedantmgoyal2009/winget-releaser@main with: identifier: LGUG2Z.komorebi token: ${{ secrets.WINGET_TOKEN }} ================================================ FILE: .gitignore ================================================ .idea /dist /target CHANGELOG.md dummy.go komorebic/applications.yaml komorebic/applications.json /.vs /bar-schema /komorebi-schema /.wrangler /.xwin-cache result /.direnv ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # The Komorebi Code of Conduct This document is based on the [Rust Code of Conduct](https://www.rust-lang.org/policies/code-of-conduct) ## Conduct - We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. - Please avoid using overtly sexual aliases or other nicknames that might detract from a friendly, safe and welcoming environment for all. - Please be kind and courteous. There’s no need to be mean or rude. - Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. - Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. - We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term “harassment” as including the definition in the [Citizen Code of Conduct](https://github.com/stumpsyn/policies/blob/master/citizen_code_of_conduct.md); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don’t tolerate behavior that excludes people in socially marginalized groups. - Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact me immediately. Whether you’re a regular contributor or a newcomer, we care about making this community a safe place for you and we’ve got your back. - Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to the Project The project is a collection of contributions from both the project leaders and community members. There are many ways to contribute, this can include content in the project repositories, as well as contributing in public and private conversation, assisting users, writing blog posts, and many other ways. ## How contributions are made Contributions to the project primarily happen in the project source repositories, but may also occur in other places, such as discussion forums and public and private discourse. ## Contributing content to the Project In order for the project leaders to manage sustained progress toward the project goals and maintain project velocity, focus and quality, the project may adjust the license terms over time. Content contributed to the project must therefore be provided under sufficiently liberal terms to allow these operations to proceed unimpeded. As such contributions are accepted with the following understanding: * Contributed content is licensed under the terms of the 0-BSD license * Contributors accept the terms of the project license at the time of contribution By making a contribution, you accept both the current project license terms, and that all contributions that you have made are provided under the terms of the 0-BSD license. ## Zero-Clause BSD ``` Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ``` ================================================ FILE: Cargo.toml ================================================ [workspace] resolver = "2" members = [ "komorebi", "komorebi-client", "komorebi-gui", "komorebi-layouts", "komorebic", "komorebic-no-console", "komorebi-bar", "komorebi-themes", "komorebi-shortcuts", ] [workspace.dependencies] clap = { version = "4", features = ["derive", "wrap_help"] } chrono-tz = "0.10" chrono = "0.4" crossbeam-channel = "0.5" crossbeam-utils = "0.8" color-eyre = "0.6" eframe = "0.33" egui_extras = "0.33" dirs = "6" dunce = "1" hotwatch = "0.5" schemars = "1.1" lazy_static = "1" serde = { version = "1", features = ["derive"] } serde_json = { package = "serde_json_lenient", version = "0.2" } serde_yaml = "0.9" strum = { version = "0.27", features = ["derive"] } tracing = "0.1" tracing-appender = "0.2" tracing-subscriber = { version = "0.3", features = ["env-filter"] } parking_lot = "0.12" paste = "1" sysinfo = "0.38" uds_windows = "1" win32-display-data = { git = "https://github.com/LGUG2Z/win32-display-data", rev = "8c42d8db257d30fe95bc98c2e5cd8f75da861021" } windows-numerics = { version = "0.3" } windows-implement = { version = "0.60" } windows-interface = { version = "0.59" } windows-core = { version = "0.62" } shadow-rs = "1" which = "8" [workspace.dependencies.windows] version = "0.62" features = [ "Foundation_Numerics", "Win32_Devices", "Win32_Devices_Display", "Win32_System_Com", "Win32_UI_Shell_Common", # for IObjectArray "Win32_Foundation", "Win32_Globalization", "Win32_Graphics_Dwm", "Win32_Graphics_Gdi", "Win32_Graphics_Direct2D", "Win32_Graphics_Direct2D_Common", "Win32_Graphics_Dxgi_Common", "Win32_System_LibraryLoader", "Win32_System_Power", "Win32_System_RemoteDesktop", "Win32_System_Threading", "Win32_UI_Accessibility", "Win32_UI_HiDpi", "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_Shell", "Win32_UI_Shell_Common", "Win32_UI_WindowsAndMessaging", "Win32_System_SystemServices", "Win32_System_WindowsProgramming", "Media", "Media_Control", ] [profile.release-opt] inherits = "release" lto = true panic = "abort" codegen-units = 1 strip = true [workspace.metadata.crane] name = "komorebi-workspace" ================================================ FILE: LICENSE.md ================================================ # Komorebi License Version 2.0.0 ## Acceptance In order to get any license under these terms, you must agree to them as both strict obligations and conditions to all your licenses. ## Copyright License The licensor grants you a copyright license for the software to do everything you might do with the software that would otherwise infringe the licensor's copyright in it for any permitted purpose. However, you may only distribute the source code of the software according to the [Distribution License]( #distribution-license), you may only make changes according to the [Changes License](#changes-license), and you may not otherwise distribute the software or new works based on the software. ## Distribution License The licensor grants you an additional copyright license to distribute copies of the source code of the software. Your license to distribute covers distributing the source code of the software with changes permitted by the [Changes License]( #changes-license). ## Changes License The licensor grants you an additional copyright license to make changes for any permitted purpose. ## Patent License The licensor grants you a patent license for the software that covers patent claims the licensor can license, or becomes able to license, that you would infringe by using the software. ## Personal Uses Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, is use for a permitted purpose. ## Fair Use You may have "fair use" rights for the software under the law. These terms do not limit them. ## No Other Rights These terms do not allow you to sublicense or transfer any of your licenses to anyone else, or prevent the licensor from granting licenses to anyone else. These terms do not imply any other licenses. ## Patent Defense If you make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company. ## Violations The first time you are notified in writing that you have violated any of these terms, or done anything with the software not covered by your licenses, your licenses can nonetheless continue if you come into full compliance with these terms, and take practical steps to correct past violations, within 32 days of receiving notice. Otherwise, all your licenses end immediately. ## No Liability ***As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.*** ## Definitions The **licensor** is the individual or entity offering these terms, and the **software** is the software the licensor makes available under these terms. **You** refers to the individual or entity agreeing to these terms. **Your company** is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. **Control** means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect. **Your licenses** are all the licenses granted to you for the software under these terms. **Use** means anything you do with the software requiring one of your licenses. ================================================ FILE: PRIVACY.md ================================================ # Privacy Policy for Komorebi No data about your device(s) or _komorebi_ usage leave your device. ## Data Maintained by Komorebi _komorebi_ writes log files to and keeps a list of temporary window handles (HWNDs) currently managed by the process in the `$Env:LOCALAPPDATA\komorebi\` directory. This directory is owned by the user running the process. ================================================ FILE: README.md ================================================ # komorebi Tiling Window Management for Windows.

Tech for Palestine GitHub Workflow Status GitHub all releases GitHub commits since latest release (by date) for a branch Active Individual Commercial Use Licenses Discord GitHub Sponsors Ko-fi Notado Feed YouTube

![screenshot](https://user-images.githubusercontent.com/13164844/184027064-f5a6cec2-2865-4d65-a549-a1f1da589abf.png) ## Note: Students using devices enrolled in mobile device management (MDM) Your usage still falls under the [Komorebi License 2.0.0](./LICENSE.md). You can email me at the address I sign my commits with (add `.patch` to the end of any commit URL on GitHub to find it) from the address associated with your institution with the subject "komorebi - student with an MDM device", and I will be able to remove the splash intended for corporate users, whose usage falls under the [Individual Commercial Use License](https://lgug2z.com/software/komorebi). This is currently a manual process - most days this shouldn't take more than 12h, and you will receive an email reply from me when the process is complete. If you haven't had a reply to your email within 24h you can reach out to me on Discord. ## Note: Unexpected mobile device management (MDM) detection prompts You have most likely unintentionally enrolled your device in "Bring Your Own Device" (BYOD) MDM. You can confirm if this is the case by running `dsregcmd /status` and then take the appropriate steps to remove the MDM profile and take back full control of your system. If you need help doing this you can ask on Discord. ## Note: komorebi for Mac komorebi for Mac lives [here](https://github.com/LGUG2Z/komorebi-for-mac) :) ## Overview _komorebi_ is a tiling window manager that works as an extension to Microsoft's [Desktop Window Manager](https://docs.microsoft.com/en-us/windows/win32/dwm/dwm-overview) in Windows 10 and above. _komorebi_ allows you to control application windows, virtual workspaces and display monitors with a CLI which can be used with third-party software such as [`whkd`](https://github.com/LGUG2Z/whkd) and [AutoHotKey](https://github.com/Lexikos/AutoHotkey_L) to set user-defined keyboard shortcuts. _komorebi_ aims to make _as few modifications as possible_ to the operating system and desktop environment by default. Users are free to make such modifications in their own configuration files for _komorebi_, but these will remain opt-in and off-by-default for the foreseeable future. Please refer to the [documentation](https://lgug2z.github.io/komorebi) for instructions on how to [install](https://lgug2z.github.io/komorebi/installation.html) and [configure](https://lgug2z.github.io/komorebi/example-configurations.html) _komorebi_, [common workflows](https://lgug2z.github.io/komorebi/common-workflows/komorebi-config-home.html), a complete [configuration schema reference](https://komorebi.lgug2z.com/schema) and a complete [CLI reference](https://lgug2z.github.io/komorebi/cli/quickstart.html). ## Community There is a [Discord server](https://discord.gg/mGkn66PHkx) available for _komorebi_-related discussion, help, troubleshooting etc. If you have any specific feature requests or bugs to report, please create an issue in this repository. There is a [YouTube channel](https://www.youtube.com/channel/UCeai3-do-9O4MNy9_xjO6mg) where I post _komorebi_ development videos, feature previews and release overviews. Subscribing to the channel (which is monetized as part of the YouTube Partner Program) and watching videos is a really simple and passive way to contribute financially to the development and maintenance of _komorebi_. There is an [Awesome List](https://github.com/LGUG2Z/awesome-komorebi) which showcases the many awesome projects that exist in the _komorebi_ ecosystem. ## Licensing for Personal Use `komorebi` is [educational source software](https://lgug2z.com/articles/educational-source-software/). `komorebi` is licensed under the [Komorebi 2.0.0 license](https://github.com/LGUG2Z/komorebi-license), which is a fork of the [PolyForm Strict 1.0.0 license](https://polyformproject.org/licenses/strict/1.0.0). On a high level this means that you are free to do whatever you want with `komorebi` for personal use other than redistribution, or distribution of new works (i.e. hard-forks) based on the software. Anyone is free to make their own fork of `komorebi` with changes intended either for personal use or for integration back upstream via pull requests. The [Komorebi 2.0.0 License](https://github.com/LGUG2Z/komorebi-license) does not permit any kind of commercial use (i.e. using `komorebi` at work). ## Sponsorship for Personal Use _komorebi_ is a free and educational source project, and one that encourages you to make charitable donations if you find the software to be useful and have the financial means. I encourage you to make a charitable donation to the [Palestine Children's Relief Fund](https://pcrf1.app.neoncrm.com/forms/gaza-recovery) or to contribute to a [Gaza Funds campaign](https://gazafunds.com) before you consider sponsoring me on GitHub. [GitHub Sponsors is enabled for this project](https://github.com/sponsors/LGUG2Z). Sponsors can claim custom roles on the Discord server, get shout outs at the end of _komorebi_-related videos on YouTube, gain the ability to submit feature requests on the issue tracker, and receive releases of komorebi with "easter eggs" on physical media. If you would like to tip or sponsor the project but are unable to use GitHub Sponsors, you may also sponsor through [Ko-fi](https://ko-fi.com/lgug2z), or make an anonymous Bitcoin donation to `bc1qv73wzspc77k46uty4vp85x8sdp24mphvm58f6q`. ## Licensing for Commercial Use A dedicated Individual Commercial Use License is available for those who want to use `komorebi` at work. The Individual Commerical Use License adds “Commercial Use” as a “Permitted Use” for the licensed individual only, for the duration of a valid paid license subscription only. All provisions and restrictions enumerated in the [Komorebi License](https://github.com/LGUG2Z/komorebi-license) continue to apply. More information, pricing and purchase links for Individual Commercial Use Licenses [can be found here](https://lgug2z.com/software/komorebi). # Installation A [detailed installation and quickstart guide](https://lgug2z.github.io/komorebi/installation.html) is available which shows how to get started using `scoop`, `winget` or building from source. [![Watch the quickstart walkthrough video](https://img.youtube.com/vi/MMZUAtHbTYY/hqdefault.jpg)](https://www.youtube.com/watch?v=MMZUAtHbTYY) # Comparison With Fancy Zones Community member [Olge](https://www.youtube.com/@polle5555) has created an excellent video which compares the default window management features of Windows 11, Fancy Zones and komorebi. If you are not familiar with tiling window managers or if you are looking at komorebi and wondering "how is this different from Fancy Zones? 🤔", this short video will answer the majority of your questions. [![Watch the comparison video](https://img.youtube.com/vi/0LCbS_gm0RA/hqdefault.jpg)](https://www.youtube.com/watch?v=0LCbS_gm0RA) # Demonstrations [@amnweb](https://github.com/amnweb) showing _komorebi_ `v0.1.28` running on Windows 11 with window borders, unfocused window transparency and animations enabled, using a custom status bar integrated using _komorebi_' s [Window Manager Event Subscriptions](https://github.com/LGUG2Z/komorebi?tab=readme-ov-file#window-manager-event-subscriptions). https://github.com/LGUG2Z/komorebi/assets/13164844/21be8dc4-fa76-4f70-9b37-1d316f4b40c2 [@haxibami](https://github.com/haxibami) showing _komorebi_ running on Windows 11 with a terminal emulator, a web browser and a code editor. The original video can be viewed [here](https://twitter.com/haxibami/status/1501560766578659332). https://user-images.githubusercontent.com/13164844/163496447-20c3ff0a-c5d8-40d1-9cc8-156c4cebf12e.mp4 [@aik2mlj](https://github.com/aik2mlj) showing _komorebi_ running on Windows 11 with multiple workspaces, terminal emulators, a web browser, and the [yasb](https://github.com/DenBot/yasb) status bar with the _komorebi_ workspace widget enabled. The original video can be viewed [here](https://zhuanlan.zhihu.com/p/455064481). https://user-images.githubusercontent.com/13164844/163496414-a9cde3d1-b8a7-4a7a-96fb-a8985380bc70.mp4 # Contribution Guidelines If you would like to contribute to `komorebi` please take the time to carefully read the guidelines below. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more information about how code contributions to `komorebi` are licensed. ## Commit hygiene - Flatten all `use` statements - Run `cargo +stable clippy` and ensure that all lints and suggestions have been addressed before committing - Run `cargo +nightly fmt --all` to ensure consistent formatting before committing - Use `git cz` with the [Commitizen CLI](https://github.com/commitizen/cz-cli#conventional-commit-messages-as-a-global-utility) to prepare commit messages - Provide **at least** one short sentence or paragraph in your commit message body to describe your thought process for the changes being committed ## PRs should contain only a single feature or bug fix It is very difficult to review pull requests which touch multiple unrelated features and parts of the codebase. Please do not submit pull requests like this; you will be asked to separate them into smaller PRs that deal only with one feature or bug fix at a time. If you are working on multiple features and bug fixes, I suggest that you cut a branch called `local-trunk` from `master` which you keep up to date, and rebase the various independent branches you are working on onto that branch if you want to test them together or create a build with everything integrated. ## Refactors to the codebase must have prior approval `komorebi` is a mature codebase with an internal consistency and structure that has developed organically over close to half a decade. There are [countless hours of live coding videos](https://youtube.com/@LGUG2Z) demonstrating work on this project and showing new contributors how to do everything from basic tasks like implementing new `komorebic` commands to distinguishing monitors by manufacturer hardware identifiers and video card ports. Refactors to the structure of the codebase are not taken lightly and require prior discussion and approval. Please do not start refactoring the codebase with the expectation of having your changes integrated until you receive an explicit approval or a request to do so. Similarly, when implementing features and bug fixes, please stick to the structure of the codebase as much as possible and do not take this as an opportunity to do some "refactoring along the way". It is extremely difficult to review PRs for features and bug fixes if they are lost in sweeping changes to the structure of the codebase. ## Breaking changes to user-facing interfaces are unacceptable This includes but is not limited to: - All `komorebic` commands - The `komorebi.json` schema - The [ `komorebi-application-specific-configuration`](https://github.com/LGUG2Z/komorebi-application-specific-configuration) schema No user should ever find that their configuration file has stopped working after upgrading to a new version of `komorebi`. More often than not there are ways to reformulate changes that may initially seem like they require breaking user-facing interfaces into additive changes. For some inspiration please take a look at [this commit](https://github.com/LGUG2Z/komorebi/commit/e7d928a065eb63bb4ea1fb864c69c1cae8cc763b) which added the ability for users to specify colours in `komorebi.json` in Hex format alongside RGB. There is also a process in place for graceful, non-breaking, deprecation of configuration options that are no longer required. # Development If you use IntelliJ, you should enable the following settings to ensure that code generated by macros is recognised by the IDE for completions and navigation: - Set `Expand declarative macros` to `Use new engine` under "Settings > Langauges & Frameworks > Rust" - Enable the following experimental features: - `org.rust.cargo.evaluate.build.scripts` - `org.rust.macros.proc` # Logs and Debugging Logs from `komorebi` will be appended to `%LOCALAPPDATA%/komorebi/komorebi.log`; this file is never rotated or overwritten, so it will keep growing until it is deleted by the user. Whenever running the `komorebic stop` command or sending a Ctrl-C signal to `komorebi` directly, the `komorebi` process ensures that all hidden windows are restored before termination. If however, you ever end up with windows that are hidden and cannot be restored, a list of window handles known to `komorebi` are stored and continuously updated in `%LOCALAPPDATA%/komorebi//komorebi.hwnd.json`. ## Restoring Windows Running `komorebic restore-windows` will read the list of window handles and forcibly restore them, regardless of whether the main `komorebi` process is running. ## Panics and Deadlocks If `komorebi` ever stops responding, it is most likely either due to either a panic or a deadlock. In the case of a panic, this will be reported in the log. In the case of a deadlock, there will not be any errors in the log, but the process and the log will appear frozen. If you believe you have encountered a deadlock, you can compile `komorebi` with `--features deadlock_detection` and try reproducing the deadlock again. This will check for deadlocks every 5 seconds in the background, and if a deadlock is found, information about it will appear in the log which can be shared when opening an issue. # Window Manager State and Integrations The current state of the window manager can be queried using the `komorebic state` command, which returns a JSON representation of the `State` struct. This may also be polled to build further integrations and widgets on top of. # Window Manager Event Subscriptions ## Named Pipes It is possible to subscribe to notifications of every `WindowManagerEvent` and `SocketMessage` handled by `komorebi` using [Named Pipes](https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipes). First, your application must create a named pipe. Once the named pipe has been created, run the following command: ```powershell komorebic.exe subscribe-pipe ``` Note that you do not have to include the full path of the named pipe, just the name. If the named pipe exists, `komorebi` will start pushing JSON data of successfully handled events and messages: ```json lines {"event":{"type":"AddSubscriber","content":"yasb"},"state":{}} {"event":{"type":"FocusWindow","content":"Left"},"state":{}} {"event":{"type":"FocusChange","content":["SystemForeground",{"hwnd":131444,"title":"komorebi – README.md","exe":"idea64.exe","class":"SunAwtFrame","rect":{"left":13,"top":60,"right":1520,"bottom":1655}}]},"state":{}} {"event":{"type":"MonitorPoll","content":["ObjectCreate",{"hwnd":5572450,"title":"OLEChannelWnd","exe":"explorer.exe","class":"OleMainThreadWndClass","rect":{"left":0,"top":0,"right":0,"bottom":0}}]},"state":{}} {"event":{"type":"FocusWindow","content":"Right"},"state":{}} {"event":{"type":"FocusChange","content":["SystemForeground",{"hwnd":132968,"title":"Windows PowerShell","exe":"WindowsTerminal.exe","class":"CASCADIA_HOSTING_WINDOW_CLASS","rect":{"left":1539,"top":60,"right":1520,"bottom":821}}]},"state":{}} {"event":{"type":"FocusWindow","content":"Down"},"state":{}} {"event":{"type":"FocusChange","content":["SystemForeground",{"hwnd":329264,"title":"den — Mozilla Firefox","exe":"firefox.exe","class":"MozillaWindowClass","rect":{"left":1539,"top":894,"right":1520,"bottom":821}}]},"state":{}} {"event":{"type":"FocusWindow","content":"Up"},"state":{}} {"event":{"type":"FocusChange","content":["SystemForeground",{"hwnd":132968,"title":"Windows PowerShell","exe":"WindowsTerminal.exe","class":"CASCADIA_HOSTING_WINDOW_CLASS","rect":{"left":1539,"top":60,"right":1520,"bottom":821}}]},"state":{}} ``` You may then filter on the `type` key to listen to the events that you are interested in. For a full list of possible notification types, refer to the enum variants of `WindowManagerEvent` in `komorebi` and `SocketMessage` in `komorebi::core`. Below is an example of how you can subscribe to and filter on events using a named pipe in `nodejs`. ```javascript const { exec } = require("child_process"); const net = require("net"); const pipeName = "\\\\.\\pipe\\komorebi-js"; const server = net.createServer((stream) => { console.log("Client connected"); // Every time there is a workspace-related event, let's log the names of all // workspaces on the currently focused monitor, and then log the name of the // currently focused workspace on that monitor stream.on("data", (data) => { let json = JSON.parse(data.toString()); let event = json.event; if (event.type.includes("Workspace")) { let monitors = json.state.monitors; let current_monitor = monitors.elements[monitors.focused]; let workspaces = monitors.elements[monitors.focused].workspaces; let current_workspace = workspaces.elements[workspaces.focused]; console.log( workspaces.elements .map((workspace) => workspace.name) .filter((name) => name !== null) ); console.log(current_workspace.name); } }); stream.on("end", () => { console.log("Client disconnected"); }); }); server.listen(pipeName, () => { console.log("Named pipe server listening"); }); const command = "komorebic subscribe-pipe komorebi-js"; exec(command, (error, stdout, stderr) => { if (error) { console.error(`Error executing command: ${error}`); return; } }); ``` ## Unix Domain Sockets It is possible to subscribe to notifications of every `WindowManagerEvent` and `SocketMessage` handled by `komorebi` using [Unix Domain Sockets](https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/). UDS are also the only mode of communication between `komorebi` and `komorebic`. First, your application must create a socket in `$ENV:LocalAppData\komorebi`. Once the socket has been created, run the following command: ```powershell komorebic.exe subscribe-socket ``` If the socket exists, komorebi will start pushing JSON data of successfully handled events and messages as in the example above in the Named Pipes section. ## Rust Client As of `v0.1.22` it is possible to use the `komorebi-client` crate to subscribe to notifications of every `WindowManagerEvent` and `SocketMessage` handled by `komorebi` in a Rust codebase. Below is a simple example of how to use `komorebi-client` in a basic Rust application. ```rust // komorebi-client = { git = "https://github.com/LGUG2Z/komorebi" } use anyhow::Result; use komorebi_client::Notification; use komorebi_client::NotificationEvent; use komorebi_client::UnixListener; use komorebi_client::WindowManagerEvent; use std::io::BufRead; use std::io::BufReader; use std::io::Read; pub fn main() -> anyhow::Result<()> { let socket = komorebi_client::subscribe(NAME)?; for incoming in socket.incoming() { match incoming { Ok(data) => { let reader = BufReader::new(data.try_clone()?); for line in reader.lines().flatten() { let notification: Notification = match serde_json::from_str(&line) { Ok(notification) => notification, Err(error) => { log::debug!("discarding malformed komorebi notification: {error}"); continue; } }; // match and filter on desired notifications } } Err(error) => { log::debug!("{error}"); } } } } ``` A read-world example can be found in [komokana](https://github.com/LGUG2Z/komokana/blob/feature/komorebi-uds/src/main.rs). ## Subscription Event Notification Schema A [JSON Schema](https://json-schema.org/) of the event notifications emitted to subscribers can be generated with the `komorebic notification-schema` command. The output of this command can be redirected to the clipboard or a file, which can be used with services such as [Quicktype](https://app.quicktype.io/) to generate type definitions in different programming languages. ## Communication over TCP A TCP listener can optionally be exposed on a port of your choosing with the `--tcp-port=N` flag. If this flag is not provided to `komorebi` or `komorebic start`, no TCP listener will be created. Once created, your client may send any [SocketMessage](https://github.com/LGUG2Z/komorebi/blob/master/komorebi/src/core/mod.rs#L37) to `komorebi` in the same way that `komorebic` would. This can be used if you would like to create your own alternative to `komorebic` which incorporates scripting and various middleware layers, and similarly it can be used if you would like to integrate `komorebi` with a [custom input handler](https://github.com/LGUG2Z/komorebi/issues/176#issue-1302643961). If a client sends an unrecognized message, it will be disconnected and have to reconnect before trying to communicate again. ## Socket Message Schema A [JSON Schema](https://json-schema.org/) of socket messages used to send instructions to `komorebi` can be generated with the `komorebic socket-schema` command. The output of this command can be redirected to the clipboard or a file, which can be used with services such as [Quicktype](https://app.quicktype.io/) to generate type definitions in different programming languages. # Appreciations - First and foremost, thank you to my wife, both for naming this project and for her patience throughout its never-ending development - Thank you to [@sitiom](https://github.com/sitiom) for being [an exemplary open source community leader](https://jeezy.substack.com/p/the-open-source-contributions-i-appreciate) - Thank you to the developers of [nog](https://github.com/TimUntersberger/nog) who came before me and whose work taught me more than I can ever hope to repay - Thank you to the developers of [GlazeWM](https://github.com/lars-berger/GlazeWM) for pushing the boundaries of tiling window management on Windows with me and having an excellent spirit of collaboration - Thank you to [@Ciantic](https://github.com/Ciantic) for helping me bring the [hidden Virtual Desktops cloaking function](https://github.com/Ciantic/AltTabAccessor/issues/1) to `komorebi` ================================================ FILE: check_schema_docs.py ================================================ #!/usr/bin/env python3 """ Check schema.json and schema.bar.json for missing docstrings and map them to Rust source files. This script analyzes the generated JSON schemas and identifies: 1. Type definitions ($defs) missing top-level descriptions 2. Enum variants missing descriptions (in oneOf/anyOf) 3. Enum variants missing titles (object variants in oneOf/anyOf) 4. Struct properties missing descriptions 5. Top-level schema properties missing descriptions For each missing docstring, it attempts to find the corresponding Rust source file and line number where the docstring should be added. """ import json import re import sys from dataclasses import dataclass from pathlib import Path from typing import Optional @dataclass class MissingDoc: type_name: str kind: str # "type", "variant", "property", "variant_title" item_name: Optional[str] # variant or property name rust_file: Optional[str] = None rust_line: Optional[int] = None def __str__(self): location = "" if self.rust_file and self.rust_line: location = f" -> {self.rust_file}:{self.rust_line}" elif self.rust_file: location = f" -> {self.rust_file}" if self.kind == "type": return f"[TYPE] {self.type_name}{location}" elif self.kind == "variant": return f"[VARIANT] {self.type_name}::{self.item_name}{location}" elif self.kind == "variant_title": return f"[VARIANT_TITLE] {self.type_name}::{self.item_name}{location}" else: return f"[PROPERTY] {self.type_name}.{self.item_name}{location}" @dataclass class SchemaConfig: """Configuration for a schema to check.""" schema_file: str search_paths: list[str] display_name: str def find_rust_definition( type_name: str, item_name: Optional[str], kind: str, search_paths: list[Path] ) -> tuple[Optional[str], Optional[int]]: """Find the Rust file and line number for a type/variant/property definition.""" if kind == "type": patterns = [ rf"pub\s+enum\s+{type_name}\b", rf"pub\s+struct\s+{type_name}\b", ] elif kind in ("variant", "variant_title"): patterns = [ rf"^\s*{re.escape(item_name)}\s*[,\(\{{]", rf"^\s*{re.escape(item_name)}\s*$", rf"^\s*#\[.*\]\s*\n\s*{re.escape(item_name)}\b", ] else: # property patterns = [rf"pub\s+{re.escape(item_name)}\s*:"] for search_path in search_paths: for rust_file in search_path.rglob("*.rs"): try: content = rust_file.read_text() lines = content.split("\n") if kind == "type": for pattern in patterns: for i, line in enumerate(lines): if re.search(pattern, line): return str(rust_file), i + 1 elif kind in ("variant", "variant_title", "property"): parent_pattern = rf"pub\s+(?:enum|struct)\s+{type_name}\b" in_type = False brace_count = 0 found_open_brace = False for i, line in enumerate(lines): if re.search(parent_pattern, line): in_type = True brace_count = 0 found_open_brace = False if in_type: if "{" in line: found_open_brace = True brace_count += line.count("{") - line.count("}") for pattern in patterns: if re.search(pattern, line): return str(rust_file), i + 1 if found_open_brace and brace_count <= 0: in_type = False except Exception: continue return None, None def _get_variant_identifier(variant: dict) -> str: """Extract a meaningful identifier for a variant. Tries to find the best identifier by checking: 1. A top-level const value (e.g., {"const": "Linear"}) 2. A property with a const value (e.g., {"kind": {"const": "Bar"}}) 3. The first required property name 4. The type field 5. Falls back to "unknown" """ # Check for top-level const value (simple enum variant) if "const" in variant: return str(variant["const"]) properties = variant.get("properties", {}) # Check for a property with a const value (common pattern for tagged enums) for prop_name, prop_def in properties.items(): if isinstance(prop_def, dict) and "const" in prop_def: return str(prop_def["const"]) # Fall back to first required property name required = variant.get("required", []) if required: return str(required[0]) # Fall back to type if "type" in variant: return str(variant["type"]) return "unknown" def check_type_description(type_name: str, type_def: dict) -> list[MissingDoc]: """Check if a type definition has proper documentation.""" missing = [] has_top_description = "description" in type_def # Always check for top-level type description first # (except for types that are purely references or have special handling) needs_type_description = True # Check oneOf variants (tagged enums with variant descriptions) if "oneOf" in type_def: # oneOf types should have a top-level description if not has_top_description: missing.append(MissingDoc(type_name, "type", None, None, None)) for variant in type_def["oneOf"]: # Case 1: Simple const variant (e.g., {"const": "Swap", "description": "..."}) variant_name = variant.get("const") or variant.get("title") if variant_name and "description" not in variant: missing.append( MissingDoc(type_name, "variant", str(variant_name), None, None) ) # Case 2: String enum inside oneOf (e.g., {"type": "string", "enum": [...]}) # These variants don't have individual descriptions in the schema if "enum" in variant and variant.get("type") == "string": for enum_variant in variant["enum"]: missing.append( MissingDoc(type_name, "variant", str(enum_variant), None, None) ) # Case 3: Object variant with properties (e.g., CubicBezier) if "properties" in variant and "description" not in variant: for prop_name in variant.get("required", []): missing.append( MissingDoc(type_name, "variant", str(prop_name), None, None) ) # Case 4: Object variant missing title (needed for schema UI display) # Object variants should have a title or const for proper display in editors if ( "properties" in variant and "title" not in variant and "const" not in variant ): # Try to find a good identifier for the variant (for display only) variant_id = _get_variant_identifier(variant) missing.append( MissingDoc(type_name, "variant_title", str(variant_id), None, None) ) # Check anyOf variants - check each variant individually elif "anyOf" in type_def: # anyOf types should have a top-level description if not has_top_description: missing.append(MissingDoc(type_name, "type", None, None, None)) # Check each variant for description (skip pure $ref and null types) for variant in type_def["anyOf"]: # Skip null type variants (used for Option) if variant.get("type") == "null": continue # Skip pure $ref variants (the referenced type is checked separately) if "$ref" in variant and len(variant) == 1: continue # Skip $ref variants that have a description if "$ref" in variant and "description" in variant: continue # Variant with $ref but no description if "$ref" in variant and "description" not in variant: # Extract the type name from the $ref ref_name = variant["$ref"].split("/")[-1] missing.append(MissingDoc(type_name, "variant", ref_name, None, None)) # Non-ref variant without description elif "description" not in variant and "$ref" not in variant: # Try to identify the variant by its type or const variant_id = variant.get("const") or variant.get("type") or "unknown" missing.append( MissingDoc(type_name, "variant", str(variant_id), None, None) ) # Check for missing title on object variants in anyOf if ( "properties" in variant and "title" not in variant and "const" not in variant ): variant_id = _get_variant_identifier(variant) missing.append( MissingDoc(type_name, "variant_title", str(variant_id), None, None) ) # Check simple string enums (no oneOf means no variant descriptions possible in schema) elif "enum" in type_def: if not has_top_description: missing.append(MissingDoc(type_name, "type", None, None, None)) # Each enum variant needs a docstring - these can't have descriptions in simple enum format for variant in type_def["enum"]: missing.append(MissingDoc(type_name, "variant", str(variant), None, None)) # Check struct properties elif "properties" in type_def: # Structs should always have a top-level description if not has_top_description: missing.append(MissingDoc(type_name, "type", None, None, None)) for prop_name, prop_def in type_def["properties"].items(): if "description" not in prop_def: missing.append(MissingDoc(type_name, "property", prop_name, None, None)) # Simple type without description (like PathBuf, Hex) elif not has_top_description: # Only flag if it has a concrete type (not just a $ref) if type_def.get("type") is not None: missing.append(MissingDoc(type_name, "type", None, None, None)) return missing def check_top_level_properties(schema: dict, root_type_name: str) -> list[MissingDoc]: """Check top-level schema properties for missing descriptions.""" missing = [] properties = schema.get("properties", {}) for prop_name, prop_def in properties.items(): if "description" not in prop_def: missing.append( MissingDoc(root_type_name, "property", prop_name, None, None) ) return missing def check_schema( schema_path: Path, search_paths: list[Path], project_root: Path, display_name: str, ) -> tuple[list[MissingDoc], int]: """Check a single schema file and return missing docs and exit code.""" if not schema_path.exists(): print(f"Error: {schema_path.name} not found at {schema_path}") return [], 1 with open(schema_path) as f: schema = json.load(f) all_missing: list[MissingDoc] = [] # Check top-level schema properties root_type_name = schema.get("title", "Root") all_missing.extend(check_top_level_properties(schema, root_type_name)) # Check all type definitions for type_name, type_def in sorted(schema.get("$defs", {}).items()): # Skip PerAnimationPrefixConfig2/3 as they're generated variants if ( type_name.startswith("PerAnimationPrefixConfig") and type_name != "PerAnimationPrefixConfig" ): continue all_missing.extend(check_type_description(type_name, type_def)) # Find Rust source locations print(f"Scanning Rust source files for {display_name}...", file=sys.stderr) for doc in all_missing: doc.rust_file, doc.rust_line = find_rust_definition( doc.type_name, doc.item_name, doc.kind, search_paths ) if doc.rust_file: try: doc.rust_file = str(Path(doc.rust_file).relative_to(project_root)) except ValueError: pass return all_missing, 0 def print_results(all_missing: list[MissingDoc], display_name: str) -> None: """Print the results for a schema check.""" # Group by file by_file: dict[str, list[MissingDoc]] = {} external: list[MissingDoc] = [] for doc in all_missing: if doc.rust_file: by_file.setdefault(doc.rust_file, []).append(doc) else: external.append(doc) # Print summary print("\n" + "=" * 70) print(f"MISSING DOCSTRINGS IN SCHEMA ({display_name})") print("=" * 70) type_count = sum(1 for d in all_missing if d.kind == "type") variant_count = sum(1 for d in all_missing if d.kind == "variant") variant_title_count = sum(1 for d in all_missing if d.kind == "variant_title") prop_count = sum(1 for d in all_missing if d.kind == "property") print(f"\nTotal: {len(all_missing)} missing docstrings/titles") print(f" - {type_count} types") print(f" - {variant_count} variants") print(f" - {variant_title_count} variant titles") print(f" - {prop_count} properties") # Print by file for rust_file in sorted(by_file.keys()): docs = sorted(by_file[rust_file], key=lambda d: d.rust_line or 0) print(f"\n{rust_file}:") print("-" * len(rust_file)) for doc in docs: print(f" {doc}") # Print external items (types not found in source) if external: print(f"\nExternal/Unknown location:") print("-" * 25) for doc in external: print(f" {doc}") print("\n" + "=" * 70) def main(): project_root = Path.cwd() # Define schemas to check with their respective search paths schemas = [ SchemaConfig( schema_file="schema.json", search_paths=["komorebi/src", "komorebi-themes/src"], display_name="komorebi", ), SchemaConfig( schema_file="schema.bar.json", search_paths=["komorebi-bar/src", "komorebi-themes/src"], display_name="komorebi-bar", ), ] total_missing = 0 has_errors = False for schema_config in schemas: schema_path = project_root / schema_config.schema_file search_paths = [ project_root / p for p in schema_config.search_paths if (project_root / p).exists() ] missing, error_code = check_schema( schema_path, search_paths, project_root, schema_config.display_name, ) if error_code != 0: has_errors = True continue print_results(missing, schema_config.display_name) total_missing += len(missing) # Print combined summary if len(schemas) > 1: print("\n" + "=" * 70) print("COMBINED SUMMARY") print("=" * 70) print(f"Total missing docstrings across all schemas: {total_missing}") print("=" * 70) if has_errors: return 1 return 1 if total_missing > 0 else 0 if __name__ == "__main__": sys.exit(main()) ================================================ FILE: deny.toml ================================================ [graph] targets = [ "x86_64-pc-windows-msvc", "i686-pc-windows-msvc", "aarch64-pc-windows-msvc", ] all-features = false no-default-features = false [output] feature-depth = 1 [advisories] ignore = [ { id = "RUSTSEC-2020-0016", reason = "local tcp connectivity is an opt-in feature, and there is no upgrade path for TcpStreamExt" }, { id = "RUSTSEC-2024-0436", reason = "paste being unmaintained is not an issue in our use" }, { id = "RUSTSEC-2024-0320", reason = "not using any yaml features from this library" }, { id = "RUSTSEC-2025-0056", reason = "only used for colour palette generation" }, ] [licenses] allow = [ "0BSD", "Apache-2.0", "Apache-2.0 WITH LLVM-exception", "Artistic-2.0", "BSD-2-Clause", "BSD-3-Clause", "BSL-1.0", "CC0-1.0", "ISC", "MIT", "MIT-0", "MPL-2.0", "OFL-1.1", "Ubuntu-font-1.0", "Unicode-3.0", "Zlib", "LicenseRef-Komorebi-2.0", ] confidence-threshold = 0.8 [[licenses.clarify]] crate = "komorebi" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebi-client" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebi-layouts" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebic" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebic-no-console" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebi-themes" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebi-gui" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebi-bar" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "komorebi-shortcuts" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "whkd-core" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "whkd-parser" expression = "LicenseRef-Komorebi-2.0" license-files = [] [[licenses.clarify]] crate = "base16-egui-themes" expression = "MIT" license-files = [] [[licenses.clarify]] crate = "win32-display-data" expression = "0BSD" license-files = [] [bans] multiple-versions = "allow" wildcards = "allow" highlight = "all" workspace-default-features = "allow" external-default-features = "allow" [sources] unknown-registry = "deny" unknown-git = "deny" allow-registry = ["https://github.com/rust-lang/crates.io-index"] allow-git = [ "https://github.com/LGUG2Z/base16-egui-themes", "https://github.com/LGUG2Z/windows-icons", "https://github.com/LGUG2Z/win32-display-data", "https://github.com/LGUG2Z/flavours", "https://github.com/LGUG2Z/base16_color_scheme", "https://github.com/LGUG2Z/whkd", "https://github.com/LGUG2Z/catppuccin-egui", "https://github.com/amPerl/egui-phosphor", ] ================================================ FILE: dependencies.json ================================================ { "licenses": [ [ "0BSD", [ "adler 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "adler2 2.0.1 registry+https://github.com/rust-lang/crates.io-index", "win32-display-data 0.1.0 git+https://github.com/LGUG2Z/win32-display-data?rev=8c42d8db257d30fe95bc98c2e5cd8f75da861021" ] ], [ "Apache-2.0", [ "ab_glyph 0.2.32 registry+https://github.com/rust-lang/crates.io-index", "ab_glyph_rasterizer 0.1.10 registry+https://github.com/rust-lang/crates.io-index", "accesskit 0.21.1 registry+https://github.com/rust-lang/crates.io-index", "accesskit_consumer 0.31.0 registry+https://github.com/rust-lang/crates.io-index", "accesskit_windows 0.29.2 registry+https://github.com/rust-lang/crates.io-index", "accesskit_winit 0.29.2 registry+https://github.com/rust-lang/crates.io-index", "adler 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "adler2 2.0.1 registry+https://github.com/rust-lang/crates.io-index", "ahash 0.8.12 registry+https://github.com/rust-lang/crates.io-index", "aligned 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "allocator-api2 0.2.21 registry+https://github.com/rust-lang/crates.io-index", "anstream 0.6.21 registry+https://github.com/rust-lang/crates.io-index", "anstyle 1.0.13 registry+https://github.com/rust-lang/crates.io-index", "anstyle-parse 0.2.7 registry+https://github.com/rust-lang/crates.io-index", "anstyle-query 1.1.5 registry+https://github.com/rust-lang/crates.io-index", "anstyle-wincon 3.0.11 registry+https://github.com/rust-lang/crates.io-index", "anyhow 1.0.101 registry+https://github.com/rust-lang/crates.io-index", "approx 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "arboard 3.6.1 registry+https://github.com/rust-lang/crates.io-index", "arrayvec 0.7.6 registry+https://github.com/rust-lang/crates.io-index", "as-slice 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "atomic-waker 1.1.2 registry+https://github.com/rust-lang/crates.io-index", "autocfg 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "backtrace 0.3.76 registry+https://github.com/rust-lang/crates.io-index", "backtrace-ext 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "base16_color_scheme 0.3.2 git+https://github.com/LGUG2Z/base16_color_scheme", "base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index", "beef 0.5.2 registry+https://github.com/rust-lang/crates.io-index", "bit_field 0.10.3 registry+https://github.com/rust-lang/crates.io-index", "bitflags 1.3.2 registry+https://github.com/rust-lang/crates.io-index", "bitflags 2.11.0 registry+https://github.com/rust-lang/crates.io-index", "bitstream-io 4.9.0 registry+https://github.com/rust-lang/crates.io-index", "block-buffer 0.10.4 registry+https://github.com/rust-lang/crates.io-index", "bytemuck 1.25.0 registry+https://github.com/rust-lang/crates.io-index", "bytemuck_derive 1.10.2 registry+https://github.com/rust-lang/crates.io-index", "cc 1.2.56 registry+https://github.com/rust-lang/crates.io-index", "cfg-if 0.1.10 registry+https://github.com/rust-lang/crates.io-index", "cfg-if 1.0.4 registry+https://github.com/rust-lang/crates.io-index", "chrono 0.4.43 registry+https://github.com/rust-lang/crates.io-index", "chrono-tz 0.10.4 registry+https://github.com/rust-lang/crates.io-index", "clap 4.5.58 registry+https://github.com/rust-lang/crates.io-index", "clap_builder 4.5.58 registry+https://github.com/rust-lang/crates.io-index", "clap_derive 4.5.55 registry+https://github.com/rust-lang/crates.io-index", "clap_lex 1.0.0 registry+https://github.com/rust-lang/crates.io-index", "color-eyre 0.6.5 registry+https://github.com/rust-lang/crates.io-index", "color-spantrace 0.3.0 registry+https://github.com/rust-lang/crates.io-index", "colorchoice 1.0.4 registry+https://github.com/rust-lang/crates.io-index", "core2 0.4.0 registry+https://github.com/rust-lang/crates.io-index", "cpufeatures 0.2.17 registry+https://github.com/rust-lang/crates.io-index", "crc32fast 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-channel 0.5.15 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-deque 0.8.6 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-epoch 0.9.18 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-utils 0.8.21 registry+https://github.com/rust-lang/crates.io-index", "crypto-common 0.1.7 registry+https://github.com/rust-lang/crates.io-index", "ctrlc 3.5.1 registry+https://github.com/rust-lang/crates.io-index", "cursor-icon 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "curve25519-dalek-derive 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "deflate 0.8.6 registry+https://github.com/rust-lang/crates.io-index", "deranged 0.5.6 registry+https://github.com/rust-lang/crates.io-index", "digest 0.10.7 registry+https://github.com/rust-lang/crates.io-index", "dirs 3.0.2 registry+https://github.com/rust-lang/crates.io-index", "dirs 4.0.0 registry+https://github.com/rust-lang/crates.io-index", "dirs 6.0.0 registry+https://github.com/rust-lang/crates.io-index", "dirs-sys 0.3.7 registry+https://github.com/rust-lang/crates.io-index", "dirs-sys 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "displaydoc 0.2.5 registry+https://github.com/rust-lang/crates.io-index", "document-features 0.2.12 registry+https://github.com/rust-lang/crates.io-index", "dpi 0.1.2 registry+https://github.com/rust-lang/crates.io-index", "dunce 1.0.5 registry+https://github.com/rust-lang/crates.io-index", "dyn-clone 1.0.20 registry+https://github.com/rust-lang/crates.io-index", "ecolor 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "ed25519 2.2.3 registry+https://github.com/rust-lang/crates.io-index", "eframe 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui-phosphor 0.10.0 git+https://github.com/amPerl/egui-phosphor?rev=d13688738478ecd12b426e3e74c59d6577a85b59", "egui-winit 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui_extras 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui_glow 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "either 1.15.0 registry+https://github.com/rust-lang/crates.io-index", "emath 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "encoding_rs 0.8.35 registry+https://github.com/rust-lang/crates.io-index", "enum-map 2.7.3 registry+https://github.com/rust-lang/crates.io-index", "enum-map-derive 0.17.0 registry+https://github.com/rust-lang/crates.io-index", "env_home 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "epaint 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "epaint_default_fonts 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "equivalent 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "eyre 0.6.12 registry+https://github.com/rust-lang/crates.io-index", "fastrand 2.3.0 registry+https://github.com/rust-lang/crates.io-index", "fdeflate 0.3.7 registry+https://github.com/rust-lang/crates.io-index", "filetime 0.2.27 registry+https://github.com/rust-lang/crates.io-index", "find-msvc-tools 0.1.9 registry+https://github.com/rust-lang/crates.io-index", "flate2 1.1.9 registry+https://github.com/rust-lang/crates.io-index", "fnv 1.0.7 registry+https://github.com/rust-lang/crates.io-index", "form_urlencoded 1.2.2 registry+https://github.com/rust-lang/crates.io-index", "futures 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-channel 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-core 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-executor 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-io 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-macro 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-sink 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-task 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-util 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.1.16 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "gif 0.11.4 registry+https://github.com/rust-lang/crates.io-index", "gif 0.14.1 registry+https://github.com/rust-lang/crates.io-index", "git2 0.20.4 registry+https://github.com/rust-lang/crates.io-index", "gl_generator 0.14.0 registry+https://github.com/rust-lang/crates.io-index", "glob 0.3.3 registry+https://github.com/rust-lang/crates.io-index", "glow 0.16.0 registry+https://github.com/rust-lang/crates.io-index", "glutin 0.32.3 registry+https://github.com/rust-lang/crates.io-index", "glutin_egl_sys 0.7.1 registry+https://github.com/rust-lang/crates.io-index", "glutin_wgl_sys 0.6.1 registry+https://github.com/rust-lang/crates.io-index", "half 2.7.1 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.12.3 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.14.5 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.16.1 registry+https://github.com/rust-lang/crates.io-index", "heck 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "hex 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "hex_color 3.0.0 registry+https://github.com/rust-lang/crates.io-index", "hotwatch 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "http 1.4.0 registry+https://github.com/rust-lang/crates.io-index", "httparse 1.10.1 registry+https://github.com/rust-lang/crates.io-index", "hyper-tls 0.6.0 registry+https://github.com/rust-lang/crates.io-index", "iana-time-zone 0.1.65 registry+https://github.com/rust-lang/crates.io-index", "ident_case 1.0.1 registry+https://github.com/rust-lang/crates.io-index", "idna 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "idna_adapter 1.2.1 registry+https://github.com/rust-lang/crates.io-index", "image 0.25.9 registry+https://github.com/rust-lang/crates.io-index", "image-webp 0.2.4 registry+https://github.com/rust-lang/crates.io-index", "imgref 1.12.0 registry+https://github.com/rust-lang/crates.io-index", "indenter 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "indexmap 1.9.3 registry+https://github.com/rust-lang/crates.io-index", "indexmap 2.13.0 registry+https://github.com/rust-lang/crates.io-index", "ipnet 2.11.0 registry+https://github.com/rust-lang/crates.io-index", "iri-string 0.7.10 registry+https://github.com/rust-lang/crates.io-index", "is_debug 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "is_terminal_polyfill 1.70.2 registry+https://github.com/rust-lang/crates.io-index", "itertools 0.14.0 registry+https://github.com/rust-lang/crates.io-index", "itoa 1.0.17 registry+https://github.com/rust-lang/crates.io-index", "jobserver 0.1.34 registry+https://github.com/rust-lang/crates.io-index", "jpeg-decoder 0.1.22 registry+https://github.com/rust-lang/crates.io-index", "khronos_api 3.1.0 registry+https://github.com/rust-lang/crates.io-index", "lazy_static 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "libc 0.2.182 registry+https://github.com/rust-lang/crates.io-index", "libgit2-sys 0.18.3+1.9.2 registry+https://github.com/rust-lang/crates.io-index", "libz-sys 1.1.23 registry+https://github.com/rust-lang/crates.io-index", "linked-hash-map 0.5.6 registry+https://github.com/rust-lang/crates.io-index", "litrs 1.0.0 registry+https://github.com/rust-lang/crates.io-index", "lock_api 0.4.14 registry+https://github.com/rust-lang/crates.io-index", "log 0.4.29 registry+https://github.com/rust-lang/crates.io-index", "logos 0.14.4 registry+https://github.com/rust-lang/crates.io-index", "logos-codegen 0.14.4 registry+https://github.com/rust-lang/crates.io-index", "logos-derive 0.14.4 registry+https://github.com/rust-lang/crates.io-index", "miette 7.6.0 registry+https://github.com/rust-lang/crates.io-index", "miette-derive 7.6.0 registry+https://github.com/rust-lang/crates.io-index", "mime 0.3.17 registry+https://github.com/rust-lang/crates.io-index", "minimal-lexical 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.4.4 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.8.9 registry+https://github.com/rust-lang/crates.io-index", "miow 0.6.1 registry+https://github.com/rust-lang/crates.io-index", "moxcms 0.7.11 registry+https://github.com/rust-lang/crates.io-index", "native-tls 0.2.16 registry+https://github.com/rust-lang/crates.io-index", "net2 0.2.39 registry+https://github.com/rust-lang/crates.io-index", "nohash-hasher 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "ntapi 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "num 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "num-bigint 0.4.6 registry+https://github.com/rust-lang/crates.io-index", "num-complex 0.4.6 registry+https://github.com/rust-lang/crates.io-index", "num-conv 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "num-derive 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "num-integer 0.1.46 registry+https://github.com/rust-lang/crates.io-index", "num-iter 0.1.45 registry+https://github.com/rust-lang/crates.io-index", "num-rational 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "num-rational 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "num-traits 0.2.19 registry+https://github.com/rust-lang/crates.io-index", "object 0.37.3 registry+https://github.com/rust-lang/crates.io-index", "once_cell 1.21.3 registry+https://github.com/rust-lang/crates.io-index", "once_cell_polyfill 1.70.2 registry+https://github.com/rust-lang/crates.io-index", "owned_ttf_parser 0.25.1 registry+https://github.com/rust-lang/crates.io-index", "palette 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "palette_derive 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "parking_lot 0.12.5 registry+https://github.com/rust-lang/crates.io-index", "parking_lot_core 0.9.12 registry+https://github.com/rust-lang/crates.io-index", "paste 1.0.15 registry+https://github.com/rust-lang/crates.io-index", "pastey 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "percent-encoding 2.3.2 registry+https://github.com/rust-lang/crates.io-index", "pin-project-lite 0.2.16 registry+https://github.com/rust-lang/crates.io-index", "pin-utils 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "pkg-config 0.3.32 registry+https://github.com/rust-lang/crates.io-index", "png 0.16.8 registry+https://github.com/rust-lang/crates.io-index", "png 0.18.1 registry+https://github.com/rust-lang/crates.io-index", "powerfmt 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "ppv-lite86 0.2.21 registry+https://github.com/rust-lang/crates.io-index", "proc-macro2 1.0.106 registry+https://github.com/rust-lang/crates.io-index", "profiling 1.0.17 registry+https://github.com/rust-lang/crates.io-index", "profiling-procmacros 1.0.17 registry+https://github.com/rust-lang/crates.io-index", "psm 0.1.30 registry+https://github.com/rust-lang/crates.io-index", "pxfm 0.1.27 registry+https://github.com/rust-lang/crates.io-index", "qoi 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "quick-error 2.0.1 registry+https://github.com/rust-lang/crates.io-index", "quote 1.0.44 registry+https://github.com/rust-lang/crates.io-index", "rand 0.7.3 registry+https://github.com/rust-lang/crates.io-index", "rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index", "rand 0.9.2 registry+https://github.com/rust-lang/crates.io-index", "rand_chacha 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index", "rand_core 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index", "rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index", "rand_pcg 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "raw-window-handle 0.6.2 registry+https://github.com/rust-lang/crates.io-index", "rayon 1.11.0 registry+https://github.com/rust-lang/crates.io-index", "rayon-core 1.13.0 registry+https://github.com/rust-lang/crates.io-index", "ref-cast 1.0.25 registry+https://github.com/rust-lang/crates.io-index", "ref-cast-impl 1.0.25 registry+https://github.com/rust-lang/crates.io-index", "regex 1.12.3 registry+https://github.com/rust-lang/crates.io-index", "regex-automata 0.4.14 registry+https://github.com/rust-lang/crates.io-index", "regex-syntax 0.8.9 registry+https://github.com/rust-lang/crates.io-index", "reqwest 0.12.28 registry+https://github.com/rust-lang/crates.io-index", "roxmltree 0.20.0 registry+https://github.com/rust-lang/crates.io-index", "rustc-demangle 0.1.27 registry+https://github.com/rust-lang/crates.io-index", "rustc_version 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "rustls-pki-types 1.14.0 registry+https://github.com/rust-lang/crates.io-index", "ryu 1.0.23 registry+https://github.com/rust-lang/crates.io-index", "scopeguard 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "semver 1.0.27 registry+https://github.com/rust-lang/crates.io-index", "serde 1.0.228 registry+https://github.com/rust-lang/crates.io-index", "serde_core 1.0.228 registry+https://github.com/rust-lang/crates.io-index", "serde_derive 1.0.228 registry+https://github.com/rust-lang/crates.io-index", "serde_derive_internals 0.29.1 registry+https://github.com/rust-lang/crates.io-index", "serde_json 1.0.149 registry+https://github.com/rust-lang/crates.io-index", "serde_json_lenient 0.2.4 registry+https://github.com/rust-lang/crates.io-index", "serde_urlencoded 0.7.1 registry+https://github.com/rust-lang/crates.io-index", "serde_variant 0.1.3 registry+https://github.com/rust-lang/crates.io-index", "serde_with 3.16.1 registry+https://github.com/rust-lang/crates.io-index", "serde_with_macros 3.16.1 registry+https://github.com/rust-lang/crates.io-index", "serde_yaml 0.8.26 registry+https://github.com/rust-lang/crates.io-index", "serde_yaml 0.9.34+deprecated registry+https://github.com/rust-lang/crates.io-index", "sha2 0.10.9 registry+https://github.com/rust-lang/crates.io-index", "shadow-rs 1.7.0 registry+https://github.com/rust-lang/crates.io-index", "shell-words 1.1.1 registry+https://github.com/rust-lang/crates.io-index", "shellexpand 2.1.2 registry+https://github.com/rust-lang/crates.io-index", "shlex 1.3.0 registry+https://github.com/rust-lang/crates.io-index", "signature 2.2.0 registry+https://github.com/rust-lang/crates.io-index", "siphasher 0.3.11 registry+https://github.com/rust-lang/crates.io-index", "siphasher 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "smallvec 1.15.1 registry+https://github.com/rust-lang/crates.io-index", "smol_str 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "socket2 0.6.2 registry+https://github.com/rust-lang/crates.io-index", "stable_deref_trait 1.2.1 registry+https://github.com/rust-lang/crates.io-index", "stacker 0.1.23 registry+https://github.com/rust-lang/crates.io-index", "static_assertions 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "supports-color 3.0.2 registry+https://github.com/rust-lang/crates.io-index", "supports-hyperlinks 3.2.0 registry+https://github.com/rust-lang/crates.io-index", "supports-unicode 3.0.0 registry+https://github.com/rust-lang/crates.io-index", "syn 1.0.109 registry+https://github.com/rust-lang/crates.io-index", "syn 2.0.115 registry+https://github.com/rust-lang/crates.io-index", "sync_wrapper 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "tempfile 3.25.0 registry+https://github.com/rust-lang/crates.io-index", "terminal_size 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "thiserror 2.0.18 registry+https://github.com/rust-lang/crates.io-index", "thiserror-impl 2.0.18 registry+https://github.com/rust-lang/crates.io-index", "thread_local 1.1.9 registry+https://github.com/rust-lang/crates.io-index", "time 0.3.47 registry+https://github.com/rust-lang/crates.io-index", "time-core 0.1.8 registry+https://github.com/rust-lang/crates.io-index", "toml 0.5.11 registry+https://github.com/rust-lang/crates.io-index", "ttf-parser 0.25.1 registry+https://github.com/rust-lang/crates.io-index", "typenum 1.19.0 registry+https://github.com/rust-lang/crates.io-index", "tz-rs 0.7.3 registry+https://github.com/rust-lang/crates.io-index", "tzdb 0.7.3 registry+https://github.com/rust-lang/crates.io-index", "tzdb_data 0.2.3 registry+https://github.com/rust-lang/crates.io-index", "unicase 2.9.0 registry+https://github.com/rust-lang/crates.io-index", "unicode-ident 1.0.23 registry+https://github.com/rust-lang/crates.io-index", "unicode-linebreak 0.1.5 registry+https://github.com/rust-lang/crates.io-index", "unicode-segmentation 1.12.0 registry+https://github.com/rust-lang/crates.io-index", "unicode-width 0.1.14 registry+https://github.com/rust-lang/crates.io-index", "unicode-width 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "unicode-xid 0.2.6 registry+https://github.com/rust-lang/crates.io-index", "uom 0.37.0 registry+https://github.com/rust-lang/crates.io-index", "url 2.5.8 registry+https://github.com/rust-lang/crates.io-index", "utf8_iter 1.0.4 registry+https://github.com/rust-lang/crates.io-index", "utf8parse 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "vcpkg 0.2.15 registry+https://github.com/rust-lang/crates.io-index", "version_check 0.9.5 registry+https://github.com/rust-lang/crates.io-index", "web-time 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "webbrowser 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "weezl 0.1.12 registry+https://github.com/rust-lang/crates.io-index", "win-msgbox 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "winapi 0.3.9 registry+https://github.com/rust-lang/crates.io-index", "windows 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows 0.60.0 registry+https://github.com/rust-lang/crates.io-index", "windows 0.61.3 registry+https://github.com/rust-lang/crates.io-index", "windows 0.62.2 registry+https://github.com/rust-lang/crates.io-index", "windows-collections 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "windows-collections 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "windows-collections 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.60.1 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.61.2 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.62.2 registry+https://github.com/rust-lang/crates.io-index", "windows-future 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "windows-future 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "windows-future 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.59.0 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.60.2 registry+https://github.com/rust-lang/crates.io-index", "windows-interface 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows-interface 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows-interface 0.59.3 registry+https://github.com/rust-lang/crates.io-index", "windows-link 0.1.3 registry+https://github.com/rust-lang/crates.io-index", "windows-link 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "windows-numerics 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "windows-numerics 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "windows-numerics 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "windows-registry 0.6.1 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.1.2 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.48.0 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.52.0 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.59.0 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.60.2 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.61.2 registry+https://github.com/rust-lang/crates.io-index", "windows-targets 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows-targets 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows-targets 0.53.5 registry+https://github.com/rust-lang/crates.io-index", "windows-threading 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "windows-threading 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "windows_aarch64_msvc 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows_aarch64_msvc 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows_aarch64_msvc 0.53.1 registry+https://github.com/rust-lang/crates.io-index", "windows_i686_msvc 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows_i686_msvc 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows_i686_msvc 0.53.1 registry+https://github.com/rust-lang/crates.io-index", "windows_x86_64_msvc 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows_x86_64_msvc 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows_x86_64_msvc 0.53.1 registry+https://github.com/rust-lang/crates.io-index", "winit 0.30.12 registry+https://github.com/rust-lang/crates.io-index", "wmi 0.15.2 registry+https://github.com/rust-lang/crates.io-index", "yaml-rust 0.4.5 registry+https://github.com/rust-lang/crates.io-index", "zerocopy 0.8.39 registry+https://github.com/rust-lang/crates.io-index", "zerocopy-derive 0.8.39 registry+https://github.com/rust-lang/crates.io-index", "zeroize 1.8.2 registry+https://github.com/rust-lang/crates.io-index", "zune-core 0.4.12 registry+https://github.com/rust-lang/crates.io-index", "zune-core 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "zune-inflate 0.2.54 registry+https://github.com/rust-lang/crates.io-index", "zune-jpeg 0.4.21 registry+https://github.com/rust-lang/crates.io-index", "zune-jpeg 0.5.12 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "Apache-2.0 WITH LLVM-exception", [ "ar_archive_writer 0.5.1 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "Artistic-2.0", [ "file-id 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "notify-debouncer-full 0.1.0 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "BSD-2-Clause", [ "av1-grain 0.2.5 registry+https://github.com/rust-lang/crates.io-index", "rav1e 0.8.1 registry+https://github.com/rust-lang/crates.io-index", "v_frame 0.3.9 registry+https://github.com/rust-lang/crates.io-index", "zerocopy 0.8.39 registry+https://github.com/rust-lang/crates.io-index", "zerocopy-derive 0.8.39 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "BSD-3-Clause", [ "alloc-no-stdlib 2.0.4 registry+https://github.com/rust-lang/crates.io-index", "alloc-stdlib 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "avif-serialize 0.8.8 registry+https://github.com/rust-lang/crates.io-index", "brotli 8.0.2 registry+https://github.com/rust-lang/crates.io-index", "brotli-decompressor 5.0.0 registry+https://github.com/rust-lang/crates.io-index", "curve25519-dalek 4.1.3 registry+https://github.com/rust-lang/crates.io-index", "ed25519-dalek 2.2.0 registry+https://github.com/rust-lang/crates.io-index", "encoding_rs 0.8.35 registry+https://github.com/rust-lang/crates.io-index", "exr 1.74.0 registry+https://github.com/rust-lang/crates.io-index", "lebe 0.5.3 registry+https://github.com/rust-lang/crates.io-index", "moxcms 0.7.11 registry+https://github.com/rust-lang/crates.io-index", "pxfm 0.1.27 registry+https://github.com/rust-lang/crates.io-index", "ravif 0.12.0 registry+https://github.com/rust-lang/crates.io-index", "subtle 2.6.1 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "BSL-1.0", [ "clipboard-win 5.4.1 registry+https://github.com/rust-lang/crates.io-index", "error-code 3.3.2 registry+https://github.com/rust-lang/crates.io-index", "ryu 1.0.23 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "CC0-1.0", [ "dunce 1.0.5 registry+https://github.com/rust-lang/crates.io-index", "file-id 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "imgref 1.12.0 registry+https://github.com/rust-lang/crates.io-index", "notify 6.1.1 registry+https://github.com/rust-lang/crates.io-index", "notify-debouncer-full 0.1.0 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "ISC", [ "is_ci 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "libloading 0.8.9 registry+https://github.com/rust-lang/crates.io-index", "starship-battery 0.10.3 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "MIT", [ "accesskit 0.21.1 registry+https://github.com/rust-lang/crates.io-index", "accesskit_consumer 0.31.0 registry+https://github.com/rust-lang/crates.io-index", "accesskit_windows 0.29.2 registry+https://github.com/rust-lang/crates.io-index", "adler 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "adler2 2.0.1 registry+https://github.com/rust-lang/crates.io-index", "ahash 0.8.12 registry+https://github.com/rust-lang/crates.io-index", "aho-corasick 1.1.4 registry+https://github.com/rust-lang/crates.io-index", "aligned 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "aligned-vec 0.6.4 registry+https://github.com/rust-lang/crates.io-index", "allocator-api2 0.2.21 registry+https://github.com/rust-lang/crates.io-index", "anstream 0.6.21 registry+https://github.com/rust-lang/crates.io-index", "anstyle 1.0.13 registry+https://github.com/rust-lang/crates.io-index", "anstyle-parse 0.2.7 registry+https://github.com/rust-lang/crates.io-index", "anstyle-query 1.1.5 registry+https://github.com/rust-lang/crates.io-index", "anstyle-wincon 3.0.11 registry+https://github.com/rust-lang/crates.io-index", "anyhow 1.0.101 registry+https://github.com/rust-lang/crates.io-index", "arboard 3.6.1 registry+https://github.com/rust-lang/crates.io-index", "arg_enum_proc_macro 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "arrayvec 0.7.6 registry+https://github.com/rust-lang/crates.io-index", "as-slice 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "atomic-waker 1.1.2 registry+https://github.com/rust-lang/crates.io-index", "autocfg 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "av-scenechange 0.14.1 registry+https://github.com/rust-lang/crates.io-index", "backtrace 0.3.76 registry+https://github.com/rust-lang/crates.io-index", "backtrace-ext 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "base16_color_scheme 0.3.2 git+https://github.com/LGUG2Z/base16_color_scheme", "base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index", "beef 0.5.2 registry+https://github.com/rust-lang/crates.io-index", "bit_field 0.10.3 registry+https://github.com/rust-lang/crates.io-index", "bitflags 1.3.2 registry+https://github.com/rust-lang/crates.io-index", "bitflags 2.11.0 registry+https://github.com/rust-lang/crates.io-index", "bitstream-io 4.9.0 registry+https://github.com/rust-lang/crates.io-index", "block-buffer 0.10.4 registry+https://github.com/rust-lang/crates.io-index", "brotli 8.0.2 registry+https://github.com/rust-lang/crates.io-index", "brotli-decompressor 5.0.0 registry+https://github.com/rust-lang/crates.io-index", "built 0.8.0 registry+https://github.com/rust-lang/crates.io-index", "bytemuck 1.25.0 registry+https://github.com/rust-lang/crates.io-index", "bytemuck_derive 1.10.2 registry+https://github.com/rust-lang/crates.io-index", "byteorder 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "byteorder-lite 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "bytes 1.11.1 registry+https://github.com/rust-lang/crates.io-index", "calm_io 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "calmio_filters 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "catppuccin-egui 5.6.0 git+https://github.com/LGUG2Z/catppuccin-egui?rev=b2f95cbf441d1dd99f3c955ef10dcb84ce23c20a", "cc 1.2.56 registry+https://github.com/rust-lang/crates.io-index", "cfg-if 0.1.10 registry+https://github.com/rust-lang/crates.io-index", "cfg-if 1.0.4 registry+https://github.com/rust-lang/crates.io-index", "cfg_aliases 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "chrono 0.4.43 registry+https://github.com/rust-lang/crates.io-index", "chrono-tz 0.10.4 registry+https://github.com/rust-lang/crates.io-index", "chumsky 0.9.3 registry+https://github.com/rust-lang/crates.io-index", "clap 4.5.58 registry+https://github.com/rust-lang/crates.io-index", "clap_builder 4.5.58 registry+https://github.com/rust-lang/crates.io-index", "clap_derive 4.5.55 registry+https://github.com/rust-lang/crates.io-index", "clap_lex 1.0.0 registry+https://github.com/rust-lang/crates.io-index", "color-eyre 0.6.5 registry+https://github.com/rust-lang/crates.io-index", "color-spantrace 0.3.0 registry+https://github.com/rust-lang/crates.io-index", "color-thief 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "color_quant 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "colorchoice 1.0.4 registry+https://github.com/rust-lang/crates.io-index", "core2 0.4.0 registry+https://github.com/rust-lang/crates.io-index", "cpufeatures 0.2.17 registry+https://github.com/rust-lang/crates.io-index", "crc32fast 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-channel 0.5.15 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-deque 0.8.6 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-epoch 0.9.18 registry+https://github.com/rust-lang/crates.io-index", "crossbeam-utils 0.8.21 registry+https://github.com/rust-lang/crates.io-index", "crypto-common 0.1.7 registry+https://github.com/rust-lang/crates.io-index", "ctrlc 3.5.1 registry+https://github.com/rust-lang/crates.io-index", "cursor-icon 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "curve25519-dalek-derive 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "darling 0.21.3 registry+https://github.com/rust-lang/crates.io-index", "darling_core 0.21.3 registry+https://github.com/rust-lang/crates.io-index", "darling_macro 0.21.3 registry+https://github.com/rust-lang/crates.io-index", "deflate 0.8.6 registry+https://github.com/rust-lang/crates.io-index", "deranged 0.5.6 registry+https://github.com/rust-lang/crates.io-index", "digest 0.10.7 registry+https://github.com/rust-lang/crates.io-index", "dirs 3.0.2 registry+https://github.com/rust-lang/crates.io-index", "dirs 4.0.0 registry+https://github.com/rust-lang/crates.io-index", "dirs 6.0.0 registry+https://github.com/rust-lang/crates.io-index", "dirs-sys 0.3.7 registry+https://github.com/rust-lang/crates.io-index", "dirs-sys 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "displaydoc 0.2.5 registry+https://github.com/rust-lang/crates.io-index", "document-features 0.2.12 registry+https://github.com/rust-lang/crates.io-index", "dpi 0.1.2 registry+https://github.com/rust-lang/crates.io-index", "dyn-clone 1.0.20 registry+https://github.com/rust-lang/crates.io-index", "ecolor 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "ed25519 2.2.3 registry+https://github.com/rust-lang/crates.io-index", "eframe 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui-phosphor 0.10.0 git+https://github.com/amPerl/egui-phosphor?rev=d13688738478ecd12b426e3e74c59d6577a85b59", "egui-winit 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui_extras 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "egui_glow 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "either 1.15.0 registry+https://github.com/rust-lang/crates.io-index", "emath 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "encoding_rs 0.8.35 registry+https://github.com/rust-lang/crates.io-index", "enum-map 2.7.3 registry+https://github.com/rust-lang/crates.io-index", "enum-map-derive 0.17.0 registry+https://github.com/rust-lang/crates.io-index", "env_home 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "epaint 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "epaint_default_fonts 0.33.3 registry+https://github.com/rust-lang/crates.io-index", "equator 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "equator-macro 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "equivalent 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "eyre 0.6.12 registry+https://github.com/rust-lang/crates.io-index", "fastrand 2.3.0 registry+https://github.com/rust-lang/crates.io-index", "fax 0.2.6 registry+https://github.com/rust-lang/crates.io-index", "fax_derive 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "fdeflate 0.3.7 registry+https://github.com/rust-lang/crates.io-index", "filetime 0.2.27 registry+https://github.com/rust-lang/crates.io-index", "find-msvc-tools 0.1.9 registry+https://github.com/rust-lang/crates.io-index", "flate2 1.1.9 registry+https://github.com/rust-lang/crates.io-index", "flavours 0.7.2 git+https://github.com/LGUG2Z/flavours", "fnv 1.0.7 registry+https://github.com/rust-lang/crates.io-index", "font-loader 0.11.0 registry+https://github.com/rust-lang/crates.io-index", "form_urlencoded 1.2.2 registry+https://github.com/rust-lang/crates.io-index", "fs-tail 0.1.4 registry+https://github.com/rust-lang/crates.io-index", "futures 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-channel 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-core 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-executor 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-io 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-macro 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-sink 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-task 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "futures-util 0.3.31 registry+https://github.com/rust-lang/crates.io-index", "generic-array 0.14.7 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.1.16 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "getrandom 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "gif 0.11.4 registry+https://github.com/rust-lang/crates.io-index", "gif 0.14.1 registry+https://github.com/rust-lang/crates.io-index", "git2 0.20.4 registry+https://github.com/rust-lang/crates.io-index", "glob 0.3.3 registry+https://github.com/rust-lang/crates.io-index", "glow 0.16.0 registry+https://github.com/rust-lang/crates.io-index", "glutin-winit 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "h2 0.4.13 registry+https://github.com/rust-lang/crates.io-index", "half 2.7.1 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.12.3 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.14.5 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index", "hashbrown 0.16.1 registry+https://github.com/rust-lang/crates.io-index", "heck 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "hex 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "hex_color 3.0.0 registry+https://github.com/rust-lang/crates.io-index", "hotwatch 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "http 1.4.0 registry+https://github.com/rust-lang/crates.io-index", "http-body 1.0.1 registry+https://github.com/rust-lang/crates.io-index", "http-body-util 0.1.3 registry+https://github.com/rust-lang/crates.io-index", "httparse 1.10.1 registry+https://github.com/rust-lang/crates.io-index", "hyper 1.8.1 registry+https://github.com/rust-lang/crates.io-index", "hyper-tls 0.6.0 registry+https://github.com/rust-lang/crates.io-index", "hyper-util 0.1.20 registry+https://github.com/rust-lang/crates.io-index", "iana-time-zone 0.1.65 registry+https://github.com/rust-lang/crates.io-index", "ident_case 1.0.1 registry+https://github.com/rust-lang/crates.io-index", "idna 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "idna_adapter 1.2.1 registry+https://github.com/rust-lang/crates.io-index", "image 0.23.14 registry+https://github.com/rust-lang/crates.io-index", "image 0.25.9 registry+https://github.com/rust-lang/crates.io-index", "image-webp 0.2.4 registry+https://github.com/rust-lang/crates.io-index", "indenter 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "indexmap 1.9.3 registry+https://github.com/rust-lang/crates.io-index", "indexmap 2.13.0 registry+https://github.com/rust-lang/crates.io-index", "ipnet 2.11.0 registry+https://github.com/rust-lang/crates.io-index", "iri-string 0.7.10 registry+https://github.com/rust-lang/crates.io-index", "is_debug 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "is_terminal_polyfill 1.70.2 registry+https://github.com/rust-lang/crates.io-index", "itertools 0.14.0 registry+https://github.com/rust-lang/crates.io-index", "itoa 1.0.17 registry+https://github.com/rust-lang/crates.io-index", "jobserver 0.1.34 registry+https://github.com/rust-lang/crates.io-index", "jpeg-decoder 0.1.22 registry+https://github.com/rust-lang/crates.io-index", "lazy_static 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "libc 0.2.182 registry+https://github.com/rust-lang/crates.io-index", "libgit2-sys 0.18.3+1.9.2 registry+https://github.com/rust-lang/crates.io-index", "libz-sys 1.1.23 registry+https://github.com/rust-lang/crates.io-index", "linked-hash-map 0.5.6 registry+https://github.com/rust-lang/crates.io-index", "litrs 1.0.0 registry+https://github.com/rust-lang/crates.io-index", "lock_api 0.4.14 registry+https://github.com/rust-lang/crates.io-index", "log 0.4.29 registry+https://github.com/rust-lang/crates.io-index", "logos 0.14.4 registry+https://github.com/rust-lang/crates.io-index", "logos-codegen 0.14.4 registry+https://github.com/rust-lang/crates.io-index", "logos-derive 0.14.4 registry+https://github.com/rust-lang/crates.io-index", "loop9 0.1.5 registry+https://github.com/rust-lang/crates.io-index", "mac-addr 0.3.0 registry+https://github.com/rust-lang/crates.io-index", "matchers 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "maybe-rayon 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "memchr 2.8.0 registry+https://github.com/rust-lang/crates.io-index", "memoffset 0.9.1 registry+https://github.com/rust-lang/crates.io-index", "mime 0.3.17 registry+https://github.com/rust-lang/crates.io-index", "mime_guess2 2.3.1 registry+https://github.com/rust-lang/crates.io-index", "minimal-lexical 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.3.7 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.4.4 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.8.9 registry+https://github.com/rust-lang/crates.io-index", "mio 1.1.1 registry+https://github.com/rust-lang/crates.io-index", "miow 0.6.1 registry+https://github.com/rust-lang/crates.io-index", "nanoid 0.4.0 registry+https://github.com/rust-lang/crates.io-index", "native-tls 0.2.16 registry+https://github.com/rust-lang/crates.io-index", "net2 0.2.39 registry+https://github.com/rust-lang/crates.io-index", "netdev 0.40.0 registry+https://github.com/rust-lang/crates.io-index", "new_debug_unreachable 1.0.6 registry+https://github.com/rust-lang/crates.io-index", "nohash-hasher 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "nom 7.1.3 registry+https://github.com/rust-lang/crates.io-index", "nom 8.0.0 registry+https://github.com/rust-lang/crates.io-index", "noop_proc_macro 0.3.0 registry+https://github.com/rust-lang/crates.io-index", "ntapi 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "nu-ansi-term 0.50.3 registry+https://github.com/rust-lang/crates.io-index", "num 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "num-bigint 0.4.6 registry+https://github.com/rust-lang/crates.io-index", "num-complex 0.4.6 registry+https://github.com/rust-lang/crates.io-index", "num-conv 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "num-derive 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "num-integer 0.1.46 registry+https://github.com/rust-lang/crates.io-index", "num-iter 0.1.45 registry+https://github.com/rust-lang/crates.io-index", "num-rational 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "num-rational 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "num-traits 0.2.19 registry+https://github.com/rust-lang/crates.io-index", "object 0.37.3 registry+https://github.com/rust-lang/crates.io-index", "once_cell 1.21.3 registry+https://github.com/rust-lang/crates.io-index", "once_cell_polyfill 1.70.2 registry+https://github.com/rust-lang/crates.io-index", "open 5.3.3 registry+https://github.com/rust-lang/crates.io-index", "os_info 3.14.0 registry+https://github.com/rust-lang/crates.io-index", "owo-colors 4.2.3 registry+https://github.com/rust-lang/crates.io-index", "palette 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "palette_derive 0.5.0 registry+https://github.com/rust-lang/crates.io-index", "parking_lot 0.12.5 registry+https://github.com/rust-lang/crates.io-index", "parking_lot_core 0.9.12 registry+https://github.com/rust-lang/crates.io-index", "paste 1.0.15 registry+https://github.com/rust-lang/crates.io-index", "pastey 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "percent-encoding 2.3.2 registry+https://github.com/rust-lang/crates.io-index", "phf 0.11.3 registry+https://github.com/rust-lang/crates.io-index", "phf 0.12.1 registry+https://github.com/rust-lang/crates.io-index", "phf 0.8.0 registry+https://github.com/rust-lang/crates.io-index", "phf_codegen 0.8.0 registry+https://github.com/rust-lang/crates.io-index", "phf_generator 0.8.0 registry+https://github.com/rust-lang/crates.io-index", "phf_shared 0.11.3 registry+https://github.com/rust-lang/crates.io-index", "phf_shared 0.12.1 registry+https://github.com/rust-lang/crates.io-index", "phf_shared 0.8.0 registry+https://github.com/rust-lang/crates.io-index", "pin-project-lite 0.2.16 registry+https://github.com/rust-lang/crates.io-index", "pin-utils 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "pkg-config 0.3.32 registry+https://github.com/rust-lang/crates.io-index", "png 0.16.8 registry+https://github.com/rust-lang/crates.io-index", "png 0.18.1 registry+https://github.com/rust-lang/crates.io-index", "powerfmt 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "powershell_script 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "ppv-lite86 0.2.21 registry+https://github.com/rust-lang/crates.io-index", "proc-macro2 1.0.106 registry+https://github.com/rust-lang/crates.io-index", "profiling 1.0.17 registry+https://github.com/rust-lang/crates.io-index", "profiling-procmacros 1.0.17 registry+https://github.com/rust-lang/crates.io-index", "psm 0.1.30 registry+https://github.com/rust-lang/crates.io-index", "qoi 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "quick-error 2.0.1 registry+https://github.com/rust-lang/crates.io-index", "quote 1.0.44 registry+https://github.com/rust-lang/crates.io-index", "rand 0.7.3 registry+https://github.com/rust-lang/crates.io-index", "rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index", "rand 0.9.2 registry+https://github.com/rust-lang/crates.io-index", "rand_chacha 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index", "rand_core 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index", "rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index", "rand_pcg 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "random_word 0.5.2 registry+https://github.com/rust-lang/crates.io-index", "raw-window-handle 0.6.2 registry+https://github.com/rust-lang/crates.io-index", "rayon 1.11.0 registry+https://github.com/rust-lang/crates.io-index", "rayon-core 1.13.0 registry+https://github.com/rust-lang/crates.io-index", "ref-cast 1.0.25 registry+https://github.com/rust-lang/crates.io-index", "ref-cast-impl 1.0.25 registry+https://github.com/rust-lang/crates.io-index", "regex 1.12.3 registry+https://github.com/rust-lang/crates.io-index", "regex-automata 0.4.14 registry+https://github.com/rust-lang/crates.io-index", "regex-syntax 0.8.9 registry+https://github.com/rust-lang/crates.io-index", "reqwest 0.12.28 registry+https://github.com/rust-lang/crates.io-index", "rgb 0.8.52 registry+https://github.com/rust-lang/crates.io-index", "roxmltree 0.20.0 registry+https://github.com/rust-lang/crates.io-index", "rustc-demangle 0.1.27 registry+https://github.com/rust-lang/crates.io-index", "rustc_version 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "rustls-pki-types 1.14.0 registry+https://github.com/rust-lang/crates.io-index", "same-file 1.0.6 registry+https://github.com/rust-lang/crates.io-index", "schannel 0.1.28 registry+https://github.com/rust-lang/crates.io-index", "schemars 1.2.1 registry+https://github.com/rust-lang/crates.io-index", "schemars_derive 1.2.1 registry+https://github.com/rust-lang/crates.io-index", "scoped_threadpool 0.1.9 registry+https://github.com/rust-lang/crates.io-index", "scopeguard 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "semver 1.0.27 registry+https://github.com/rust-lang/crates.io-index", "serde 1.0.228 registry+https://github.com/rust-lang/crates.io-index", "serde_core 1.0.228 registry+https://github.com/rust-lang/crates.io-index", "serde_derive 1.0.228 registry+https://github.com/rust-lang/crates.io-index", "serde_derive_internals 0.29.1 registry+https://github.com/rust-lang/crates.io-index", "serde_json 1.0.149 registry+https://github.com/rust-lang/crates.io-index", "serde_json_lenient 0.2.4 registry+https://github.com/rust-lang/crates.io-index", "serde_urlencoded 0.7.1 registry+https://github.com/rust-lang/crates.io-index", "serde_variant 0.1.3 registry+https://github.com/rust-lang/crates.io-index", "serde_with 3.16.1 registry+https://github.com/rust-lang/crates.io-index", "serde_with_macros 3.16.1 registry+https://github.com/rust-lang/crates.io-index", "serde_yaml 0.8.26 registry+https://github.com/rust-lang/crates.io-index", "serde_yaml 0.9.34+deprecated registry+https://github.com/rust-lang/crates.io-index", "sha2 0.10.9 registry+https://github.com/rust-lang/crates.io-index", "shadow-rs 1.7.0 registry+https://github.com/rust-lang/crates.io-index", "sharded-slab 0.1.7 registry+https://github.com/rust-lang/crates.io-index", "shell-words 1.1.1 registry+https://github.com/rust-lang/crates.io-index", "shellexpand 2.1.2 registry+https://github.com/rust-lang/crates.io-index", "shlex 1.3.0 registry+https://github.com/rust-lang/crates.io-index", "signature 2.2.0 registry+https://github.com/rust-lang/crates.io-index", "simd-adler32 0.3.8 registry+https://github.com/rust-lang/crates.io-index", "simd_helpers 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "siphasher 0.3.11 registry+https://github.com/rust-lang/crates.io-index", "siphasher 1.0.2 registry+https://github.com/rust-lang/crates.io-index", "slab 0.4.12 registry+https://github.com/rust-lang/crates.io-index", "smallvec 1.15.1 registry+https://github.com/rust-lang/crates.io-index", "smol_str 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "socket2 0.6.2 registry+https://github.com/rust-lang/crates.io-index", "stable_deref_trait 1.2.1 registry+https://github.com/rust-lang/crates.io-index", "stacker 0.1.23 registry+https://github.com/rust-lang/crates.io-index", "static_assertions 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "strsim 0.11.1 registry+https://github.com/rust-lang/crates.io-index", "strum 0.27.2 registry+https://github.com/rust-lang/crates.io-index", "strum_macros 0.27.2 registry+https://github.com/rust-lang/crates.io-index", "syn 1.0.109 registry+https://github.com/rust-lang/crates.io-index", "syn 2.0.115 registry+https://github.com/rust-lang/crates.io-index", "synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index", "sysinfo 0.33.1 registry+https://github.com/rust-lang/crates.io-index", "sysinfo 0.38.1 registry+https://github.com/rust-lang/crates.io-index", "tempfile 3.25.0 registry+https://github.com/rust-lang/crates.io-index", "terminal_size 0.4.3 registry+https://github.com/rust-lang/crates.io-index", "textwrap 0.16.2 registry+https://github.com/rust-lang/crates.io-index", "thiserror 2.0.18 registry+https://github.com/rust-lang/crates.io-index", "thiserror-impl 2.0.18 registry+https://github.com/rust-lang/crates.io-index", "thread_local 1.1.9 registry+https://github.com/rust-lang/crates.io-index", "tiff 0.10.3 registry+https://github.com/rust-lang/crates.io-index", "tiff 0.6.1 registry+https://github.com/rust-lang/crates.io-index", "time 0.3.47 registry+https://github.com/rust-lang/crates.io-index", "time-core 0.1.8 registry+https://github.com/rust-lang/crates.io-index", "tokio 1.49.0 registry+https://github.com/rust-lang/crates.io-index", "tokio-native-tls 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "tokio-util 0.7.18 registry+https://github.com/rust-lang/crates.io-index", "toml 0.5.11 registry+https://github.com/rust-lang/crates.io-index", "tower 0.5.3 registry+https://github.com/rust-lang/crates.io-index", "tower-http 0.6.8 registry+https://github.com/rust-lang/crates.io-index", "tower-layer 0.3.3 registry+https://github.com/rust-lang/crates.io-index", "tower-service 0.3.3 registry+https://github.com/rust-lang/crates.io-index", "tracing 0.1.44 registry+https://github.com/rust-lang/crates.io-index", "tracing-appender 0.2.4 registry+https://github.com/rust-lang/crates.io-index", "tracing-attributes 0.1.31 registry+https://github.com/rust-lang/crates.io-index", "tracing-core 0.1.36 registry+https://github.com/rust-lang/crates.io-index", "tracing-error 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "tracing-log 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "tracing-subscriber 0.3.22 registry+https://github.com/rust-lang/crates.io-index", "try-lock 0.2.5 registry+https://github.com/rust-lang/crates.io-index", "ttf-parser 0.25.1 registry+https://github.com/rust-lang/crates.io-index", "typenum 1.19.0 registry+https://github.com/rust-lang/crates.io-index", "tz-rs 0.7.3 registry+https://github.com/rust-lang/crates.io-index", "tzdb_data 0.2.3 registry+https://github.com/rust-lang/crates.io-index", "uds_windows 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "unicase 2.9.0 registry+https://github.com/rust-lang/crates.io-index", "unicode-ident 1.0.23 registry+https://github.com/rust-lang/crates.io-index", "unicode-segmentation 1.12.0 registry+https://github.com/rust-lang/crates.io-index", "unicode-width 0.1.14 registry+https://github.com/rust-lang/crates.io-index", "unicode-width 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "unicode-xid 0.2.6 registry+https://github.com/rust-lang/crates.io-index", "unsafe-libyaml 0.2.11 registry+https://github.com/rust-lang/crates.io-index", "uom 0.37.0 registry+https://github.com/rust-lang/crates.io-index", "url 2.5.8 registry+https://github.com/rust-lang/crates.io-index", "utf8_iter 1.0.4 registry+https://github.com/rust-lang/crates.io-index", "utf8parse 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "vcpkg 0.2.15 registry+https://github.com/rust-lang/crates.io-index", "version_check 0.9.5 registry+https://github.com/rust-lang/crates.io-index", "walkdir 2.5.0 registry+https://github.com/rust-lang/crates.io-index", "want 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "web-time 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "webbrowser 1.1.0 registry+https://github.com/rust-lang/crates.io-index", "weezl 0.1.12 registry+https://github.com/rust-lang/crates.io-index", "which 8.0.0 registry+https://github.com/rust-lang/crates.io-index", "win-msgbox 0.2.2 registry+https://github.com/rust-lang/crates.io-index", "winapi 0.3.9 registry+https://github.com/rust-lang/crates.io-index", "winapi-util 0.1.11 registry+https://github.com/rust-lang/crates.io-index", "windows 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows 0.60.0 registry+https://github.com/rust-lang/crates.io-index", "windows 0.61.3 registry+https://github.com/rust-lang/crates.io-index", "windows 0.62.2 registry+https://github.com/rust-lang/crates.io-index", "windows-collections 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "windows-collections 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "windows-collections 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.60.1 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.61.2 registry+https://github.com/rust-lang/crates.io-index", "windows-core 0.62.2 registry+https://github.com/rust-lang/crates.io-index", "windows-future 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "windows-future 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "windows-future 0.3.2 registry+https://github.com/rust-lang/crates.io-index", "windows-icons 0.1.0 git+https://github.com/LGUG2Z/windows-icons?rev=0c9d7ee1b807347c507d3a9862dd007b4d3f4354", "windows-icons 0.1.0 git+https://github.com/LGUG2Z/windows-icons?rev=d67cc9920aa9b4883393e411fb4fa2ddd4c498b5", "windows-implement 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.59.0 registry+https://github.com/rust-lang/crates.io-index", "windows-implement 0.60.2 registry+https://github.com/rust-lang/crates.io-index", "windows-interface 0.57.0 registry+https://github.com/rust-lang/crates.io-index", "windows-interface 0.58.0 registry+https://github.com/rust-lang/crates.io-index", "windows-interface 0.59.3 registry+https://github.com/rust-lang/crates.io-index", "windows-link 0.1.3 registry+https://github.com/rust-lang/crates.io-index", "windows-link 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "windows-numerics 0.1.1 registry+https://github.com/rust-lang/crates.io-index", "windows-numerics 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "windows-numerics 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "windows-registry 0.6.1 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.1.2 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.3.4 registry+https://github.com/rust-lang/crates.io-index", "windows-result 0.4.1 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.3.1 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.4.2 registry+https://github.com/rust-lang/crates.io-index", "windows-strings 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.48.0 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.52.0 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.59.0 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.60.2 registry+https://github.com/rust-lang/crates.io-index", "windows-sys 0.61.2 registry+https://github.com/rust-lang/crates.io-index", "windows-targets 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows-targets 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows-targets 0.53.5 registry+https://github.com/rust-lang/crates.io-index", "windows-threading 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "windows-threading 0.2.1 registry+https://github.com/rust-lang/crates.io-index", "windows_aarch64_msvc 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows_aarch64_msvc 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows_aarch64_msvc 0.53.1 registry+https://github.com/rust-lang/crates.io-index", "windows_i686_msvc 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows_i686_msvc 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows_i686_msvc 0.53.1 registry+https://github.com/rust-lang/crates.io-index", "windows_x86_64_msvc 0.48.5 registry+https://github.com/rust-lang/crates.io-index", "windows_x86_64_msvc 0.52.6 registry+https://github.com/rust-lang/crates.io-index", "windows_x86_64_msvc 0.53.1 registry+https://github.com/rust-lang/crates.io-index", "winput 0.2.5 registry+https://github.com/rust-lang/crates.io-index", "winreg 0.55.0 registry+https://github.com/rust-lang/crates.io-index", "winsafe 0.0.19 registry+https://github.com/rust-lang/crates.io-index", "wmi 0.15.2 registry+https://github.com/rust-lang/crates.io-index", "xml-rs 0.8.28 registry+https://github.com/rust-lang/crates.io-index", "y4m 0.8.0 registry+https://github.com/rust-lang/crates.io-index", "yaml-rust 0.4.5 registry+https://github.com/rust-lang/crates.io-index", "zerocopy 0.8.39 registry+https://github.com/rust-lang/crates.io-index", "zerocopy-derive 0.8.39 registry+https://github.com/rust-lang/crates.io-index", "zeroize 1.8.2 registry+https://github.com/rust-lang/crates.io-index", "zmij 1.0.21 registry+https://github.com/rust-lang/crates.io-index", "zune-core 0.4.12 registry+https://github.com/rust-lang/crates.io-index", "zune-core 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "zune-inflate 0.2.54 registry+https://github.com/rust-lang/crates.io-index", "zune-jpeg 0.4.21 registry+https://github.com/rust-lang/crates.io-index", "zune-jpeg 0.5.12 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "MIT-0", [ "dunce 1.0.5 registry+https://github.com/rust-lang/crates.io-index", "tzdb_data 0.2.3 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "MPL-2.0", [ "option-ext 0.2.0 registry+https://github.com/rust-lang/crates.io-index", "ramhorns 1.0.1 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "OFL-1.1", [ "epaint_default_fonts 0.33.3 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "Ubuntu-font-1.0", [ "epaint_default_fonts 0.33.3 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "Unicode-3.0", [ "icu_collections 2.1.1 registry+https://github.com/rust-lang/crates.io-index", "icu_locale_core 2.1.1 registry+https://github.com/rust-lang/crates.io-index", "icu_normalizer 2.1.1 registry+https://github.com/rust-lang/crates.io-index", "icu_normalizer_data 2.1.1 registry+https://github.com/rust-lang/crates.io-index", "icu_properties 2.1.2 registry+https://github.com/rust-lang/crates.io-index", "icu_properties_data 2.1.2 registry+https://github.com/rust-lang/crates.io-index", "icu_provider 2.1.1 registry+https://github.com/rust-lang/crates.io-index", "litemap 0.8.1 registry+https://github.com/rust-lang/crates.io-index", "potential_utf 0.1.4 registry+https://github.com/rust-lang/crates.io-index", "tinystr 0.8.2 registry+https://github.com/rust-lang/crates.io-index", "unicode-ident 1.0.23 registry+https://github.com/rust-lang/crates.io-index", "writeable 0.6.2 registry+https://github.com/rust-lang/crates.io-index", "yoke 0.8.1 registry+https://github.com/rust-lang/crates.io-index", "yoke-derive 0.8.1 registry+https://github.com/rust-lang/crates.io-index", "zerofrom 0.1.6 registry+https://github.com/rust-lang/crates.io-index", "zerofrom-derive 0.1.6 registry+https://github.com/rust-lang/crates.io-index", "zerotrie 0.2.3 registry+https://github.com/rust-lang/crates.io-index", "zerovec 0.11.5 registry+https://github.com/rust-lang/crates.io-index", "zerovec-derive 0.11.2 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "Unlicense", [ "aho-corasick 1.1.4 registry+https://github.com/rust-lang/crates.io-index", "byteorder 1.5.0 registry+https://github.com/rust-lang/crates.io-index", "byteorder-lite 0.1.0 registry+https://github.com/rust-lang/crates.io-index", "memchr 2.8.0 registry+https://github.com/rust-lang/crates.io-index", "same-file 1.0.6 registry+https://github.com/rust-lang/crates.io-index", "walkdir 2.5.0 registry+https://github.com/rust-lang/crates.io-index", "winapi-util 0.1.11 registry+https://github.com/rust-lang/crates.io-index" ] ], [ "Zlib", [ "adler32 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "bytemuck 1.25.0 registry+https://github.com/rust-lang/crates.io-index", "bytemuck_derive 1.10.2 registry+https://github.com/rust-lang/crates.io-index", "const_format 0.2.35 registry+https://github.com/rust-lang/crates.io-index", "const_format_proc_macros 0.2.34 registry+https://github.com/rust-lang/crates.io-index", "cursor-icon 1.2.0 registry+https://github.com/rust-lang/crates.io-index", "foldhash 0.1.5 registry+https://github.com/rust-lang/crates.io-index", "glow 0.16.0 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.4.4 registry+https://github.com/rust-lang/crates.io-index", "miniz_oxide 0.8.9 registry+https://github.com/rust-lang/crates.io-index", "raw-window-handle 0.6.2 registry+https://github.com/rust-lang/crates.io-index", "zune-core 0.4.12 registry+https://github.com/rust-lang/crates.io-index", "zune-core 0.5.1 registry+https://github.com/rust-lang/crates.io-index", "zune-inflate 0.2.54 registry+https://github.com/rust-lang/crates.io-index", "zune-jpeg 0.4.21 registry+https://github.com/rust-lang/crates.io-index", "zune-jpeg 0.5.12 registry+https://github.com/rust-lang/crates.io-index" ] ] ] } ================================================ FILE: docs/cli/adjust-container-padding.md ================================================ # adjust-container-padding ``` Adjust container padding on the focused workspace Usage: komorebic.exe adjust-container-padding Arguments: [possible values: increase, decrease] Pixels to adjust by as an integer Options: -h, --help Print help ``` ================================================ FILE: docs/cli/adjust-workspace-padding.md ================================================ # adjust-workspace-padding ``` Adjust workspace padding on the focused workspace Usage: komorebic.exe adjust-workspace-padding Arguments: [possible values: increase, decrease] Pixels to adjust by as an integer Options: -h, --help Print help ``` ================================================ FILE: docs/cli/ahk-app-specific-configuration.md ================================================ # ahk-app-specific-configuration ``` Generate common app-specific configurations and fixes to use in komorebi.ahk Usage: komorebic.exe ahk-app-specific-configuration [OVERRIDE_PATH] Arguments: YAML file from which the application-specific configurations should be loaded [OVERRIDE_PATH] Optional YAML file of overrides to apply over the first file Options: -h, --help Print help ``` ================================================ FILE: docs/cli/animation-duration.md ================================================ # animation-duration ``` Set the duration for movement animations in ms Usage: komorebic.exe animation-duration [OPTIONS] Arguments: Desired animation durations in ms Options: -a, --animation-type Animation type to apply the duration to. If not specified, sets global duration [possible values: movement, transparency] -h, --help Print help ``` ================================================ FILE: docs/cli/animation-fps.md ================================================ # animation-fps ``` Set the frames per second for movement animations Usage: komorebic.exe animation-fps Arguments: Desired animation frames per second Options: -h, --help Print help ``` ================================================ FILE: docs/cli/animation-style.md ================================================ # animation-style ``` Set the ease function for movement animations Usage: komorebic.exe animation-style [OPTIONS] Options: -s, --style