Full Code of LGUG2Z/komorebi for AI

master 5f629e1f1af2 cached
336 files
2.3 MB
620.7k tokens
1617 symbols
1 requests
Download .txt
Showing preview only (2,478K chars total). Download the full file or copy to clipboard to get everything.
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
================================================
<!--
  Please follow the Conventional Commits specification.

  If you need to update your PR with changes from `master`, please run `git rebase master`.

  By opening this PR, you confirm that you have read and understood this project's `CONTRIBUTING.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.

<p>
  <a href="https://techforpalestine.org/learn-more">
    <img alt="Tech for Palestine" src="https://badge.techforpalestine.org/default">
  </a>
  <img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/LGUG2Z/komorebi/.github/workflows/windows.yaml">
  <img alt="GitHub all releases" src="https://img.shields.io/github/downloads/LGUG2Z/komorebi/total">
  <img alt="GitHub commits since latest release (by date) for a branch" src="https://img.shields.io/github/commits-since/LGUG2Z/komorebi/latest">
  <img alt="Active Individual Commercial Use Licenses" src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Flgug2z-ecstaticmagentacheetah.web.val.run&query=%24.&label=active%20individual%20commercial%20use%20licenses&cacheSeconds=3600&link=https%3A%2F%2Flgug2z.com%2Fsoftware%2Fkomorebi">
  <a href="https://discord.gg/mGkn66PHkx">
    <img alt="Discord" src="https://img.shields.io/discord/898554690126630914">
  </a>
  <a href="https://github.com/sponsors/LGUG2Z">
    <img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/LGUG2Z">
  </a>
  <a href="https://ko-fi.com/lgug2z">
    <img alt="Ko-fi" src="https://img.shields.io/badge/kofi-tip-green">
  </a>
  <a href="https://notado.app/feeds/jado/software-development">
    <img alt="Notado Feed" src="https://img.shields.io/badge/Notado-Subscribe-informational">
  </a>
  <a href="https://www.youtube.com/channel/UCeai3-do-9O4MNy9_xjO6mg?sub_confirmation=1">
    <img alt="YouTube" src="https://img.shields.io/youtube/channel/subscribers/UCeai3-do-9O4MNy9_xjO6mg">
  </a>
</p>

![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 <your pipe name>
```

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 <your socket name>
```

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<T>)
            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 <SIZING> <ADJUSTMENT>

Arguments:
  <SIZING>
          [possible values: increase, decrease]

  <ADJUSTMENT>
          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 <SIZING> <ADJUSTMENT>

Arguments:
  <SIZING>
          [possible values: increase, decrease]

  <ADJUSTMENT>
          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 <PATH> [OVERRIDE_PATH]

Arguments:
  <PATH>
          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] <DURATION>

Arguments:
  <DURATION>
          Desired animation durations in ms

Options:
  -a, --animation-type <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 <FPS>

Arguments:
  <FPS>
          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 <STYLE>
          Desired ease function for animation
          
          [default: linear]
          [possible values: linear, ease-in-sine, ease-out-sine, ease-in-out-sine, ease-in-quad, ease-out-quad, ease-in-out-quad, ease-in-cubic, ease-in-out-cubic, ease-in-quart, ease-out-quart, ease-in-out-quart, ease-in-quint, ease-out-quint, ease-in-out-quint, ease-in-expo,
          ease-out-expo, ease-in-out-expo, ease-in-circ, ease-out-circ, ease-in-out-circ, ease-in-back, ease-out-back, ease-in-out-back, ease-in-elastic, ease-out-elastic, ease-in-out-elastic, ease-in-bounce, ease-out-bounce, ease-in-out-bounce]

  -a, --animation-type <ANIMATION_TYPE>
          Animation type to apply the style to. If not specified, sets global style
          
          [possible values: movement, transparency]

  -h, --help
          Print help

```


================================================
FILE: docs/cli/animation.md
================================================
# animation

```
Enable or disable movement animations

Usage: komorebic.exe animation [OPTIONS] <BOOLEAN_STATE>

Arguments:
  <BOOLEAN_STATE>
          [possible values: enable, disable]

Options:
  -a, --animation-type <ANIMATION_TYPE>
          Animation type to apply the state to. If not specified, sets global state
          
          [possible values: movement, transparency]

  -h, --help
          Print help

```


================================================
FILE: docs/cli/application-specific-configuration-schema.md
================================================
# application-specific-configuration-schema

```
Generate a JSON Schema for applications.json

Usage: komorebic.exe application-specific-configuration-schema

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/bar-configuration.md
================================================
# bar-configuration

```
Show the path to komorebi.bar.json

Usage: komorebic.exe bar-configuration

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/border-colour.md
================================================
# border-colour

```
Set the colour for a window border kind

Usage: komorebic.exe border-colour [OPTIONS] <R> <G> <B>

Arguments:
  <R>
          Red

  <G>
          Green

  <B>
          Blue

Options:
  -w, --window-kind <WINDOW_KIND>
          [default: single]
          [possible values: single, stack, monocle, unfocused, unfocused-locked, floating]

  -h, --help
          Print help

```


================================================
FILE: docs/cli/border-implementation.md
================================================
# border-implementation

```
Set the border implementation

Usage: komorebic.exe border-implementation <STYLE>

Arguments:
  <STYLE>
          Desired border implementation

          Possible values:
          - komorebi: Use the adjustable komorebi border implementation
          - windows:  Use the thin Windows accent border implementation

Options:
  -h, --help
          Print help (see a summary with '-h')

```


================================================
FILE: docs/cli/border-offset.md
================================================
# border-offset

```
Set the border offset

Usage: komorebic.exe border-offset <OFFSET>

Arguments:
  <OFFSET>
          Desired offset of the window border

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/border-style.md
================================================
# border-style

```
Set the border style

Usage: komorebic.exe border-style <STYLE>

Arguments:
  <STYLE>
          Desired border style

          Possible values:
          - system:  Use the system border style
          - rounded: Use the Windows 11-style rounded borders
          - square:  Use the Windows 10-style square borders

Options:
  -h, --help
          Print help (see a summary with '-h')

```


================================================
FILE: docs/cli/border-width.md
================================================
# border-width

```
Set the border width

Usage: komorebic.exe border-width <WIDTH>

Arguments:
  <WIDTH>
          Desired width of the window border

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/border.md
================================================
# border

```
Enable or disable borders

Usage: komorebic.exe border <BOOLEAN_STATE>

Arguments:
  <BOOLEAN_STATE>
          [possible values: enable, disable]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cancel-preselect.md
================================================
# cancel-preselect

```
Cancel a workspace preselect set by the preselect-direction command, if one exists

Usage: komorebic.exe cancel-preselect

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/change-layout.md
================================================
# change-layout

```
Set the layout on the focused workspace

Usage: komorebic.exe change-layout <DEFAULT_LAYOUT>

Arguments:
  <DEFAULT_LAYOUT>
          [possible values: bsp, columns, rows, vertical-stack, horizontal-stack, ultrawide-vertical-stack, grid, right-main-vertical-stack, scrolling]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/check.md
================================================
# check

```
Check komorebi configuration and related files for common errors

Usage: komorebic.exe check [OPTIONS]

Options:
  -k, --komorebi-config <KOMOREBI_CONFIG>
          Path to a static configuration JSON file

  -h, --help
          Print help

```


================================================
FILE: docs/cli/clear-all-workspace-rules.md
================================================
# clear-all-workspace-rules

```
Remove all application association rules for all workspaces

Usage: komorebic.exe clear-all-workspace-rules

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/clear-named-workspace-layout-rules.md
================================================
# clear-named-workspace-layout-rules

```
Clear all dynamic layout rules for the specified workspace

Usage: komorebic.exe clear-named-workspace-layout-rules <WORKSPACE>

Arguments:
  <WORKSPACE>
          Target workspace name

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/clear-named-workspace-rules.md
================================================
# clear-named-workspace-rules

```
Remove all application association rules for a named workspace

Usage: komorebic.exe clear-named-workspace-rules <WORKSPACE>

Arguments:
  <WORKSPACE>
          Name of a workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/clear-session-float-rules.md
================================================
# clear-session-float-rules

```
Clear all session float rules

Usage: komorebic.exe clear-session-float-rules

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/clear-workspace-layout-rules.md
================================================
# clear-workspace-layout-rules

```
Clear all dynamic layout rules for the specified workspace

Usage: komorebic.exe clear-workspace-layout-rules <MONITOR> <WORKSPACE>

Arguments:
  <MONITOR>
          Monitor index (zero-indexed)

  <WORKSPACE>
          Workspace index on the specified monitor (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/clear-workspace-rules.md
================================================
# clear-workspace-rules

```
Remove all application association rules for a workspace by monitor and workspace index

Usage: komorebic.exe clear-workspace-rules <MONITOR> <WORKSPACE>

Arguments:
  <MONITOR>
          Monitor index (zero-indexed)

  <WORKSPACE>
          Workspace index on the specified monitor (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/close-workspace.md
================================================
# close-workspace

```
Close the focused workspace (must be empty and unnamed)

Usage: komorebic.exe close-workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/close.md
================================================
# close

```
Close the focused window

Usage: komorebic.exe close

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/complete-configuration.md
================================================
# complete-configuration

```
For legacy komorebi.ahk or komorebi.ps1 configurations, signal that the final configuration option has been sent

Usage: komorebic.exe complete-configuration

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/configuration.md
================================================
# configuration

```
Show the path to komorebi.json

Usage: komorebic.exe configuration

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/container-padding.md
================================================
# container-padding

```
Set the container padding for the specified workspace

Usage: komorebic.exe container-padding <MONITOR> <WORKSPACE> <SIZE>

Arguments:
  <MONITOR>
          Monitor index (zero-indexed)

  <WORKSPACE>
          Workspace index on the specified monitor (zero-indexed)

  <SIZE>
          Pixels to pad with as an integer

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/convert-app-specific-configuration.md
================================================
# convert-app-specific-configuration

```
Convert a v1 ASC YAML file to a v2 ASC JSON file

Usage: komorebic.exe convert-app-specific-configuration <PATH>

Arguments:
  <PATH>
          YAML file from which the application-specific configurations should be loaded

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cross-monitor-move-behaviour.md
================================================
# cross-monitor-move-behaviour

```
Set the behaviour when moving windows across monitor boundaries

Usage: komorebic.exe cross-monitor-move-behaviour <MOVE_BEHAVIOUR>

Arguments:
  <MOVE_BEHAVIOUR>
          Possible values:
          - swap:   Swap the window container with the window container at the edge of the adjacent monitor
          - insert: Insert the window container into the focused workspace on the adjacent monitor
          - no-op:  Do nothing if trying to move a window container in the direction of an adjacent monitor

Options:
  -h, --help
          Print help (see a summary with '-h')

```


================================================
FILE: docs/cli/cycle-empty-workspace.md
================================================
# cycle-empty-workspace

```
Focus the next empty workspace in the given cycle direction (if one exists)

Usage: komorebic.exe cycle-empty-workspace <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-focus.md
================================================
# cycle-focus

```
Change focus to the window in the specified cycle direction

Usage: komorebic.exe cycle-focus <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-layout.md
================================================
# cycle-layout

```
Cycle between available layouts

Usage: komorebic.exe cycle-layout <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-monitor.md
================================================
# cycle-monitor

```
Focus the monitor in the given cycle direction

Usage: komorebic.exe cycle-monitor <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-move-to-monitor.md
================================================
# cycle-move-to-monitor

```
Move the focused window to the monitor in the given cycle direction

Usage: komorebic.exe cycle-move-to-monitor <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-move-to-workspace.md
================================================
# cycle-move-to-workspace

```
Move the focused window to the workspace in the given cycle direction

Usage: komorebic.exe cycle-move-to-workspace <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-move-workspace-to-monitor.md
================================================
# cycle-move-workspace-to-monitor

```
Move the focused workspace monitor in the given cycle direction

Usage: komorebic.exe cycle-move-workspace-to-monitor <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-move.md
================================================
# cycle-move

```
Move the focused window in the specified cycle direction

Usage: komorebic.exe cycle-move <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-send-to-monitor.md
================================================
# cycle-send-to-monitor

```
Send the focused window to the monitor in the given cycle direction

Usage: komorebic.exe cycle-send-to-monitor <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-send-to-workspace.md
================================================
# cycle-send-to-workspace

```
Send the focused window to the workspace in the given cycle direction

Usage: komorebic.exe cycle-send-to-workspace <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-stack-index.md
================================================
# cycle-stack-index

```
Cycle the index of the focused window in the focused stack in the specified cycle direction

Usage: komorebic.exe cycle-stack-index <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-stack.md
================================================
# cycle-stack

```
Cycle the focused stack in the specified cycle direction

Usage: komorebic.exe cycle-stack <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/cycle-workspace.md
================================================
# cycle-workspace

```
Focus the workspace in the given cycle direction

Usage: komorebic.exe cycle-workspace <CYCLE_DIRECTION>

Arguments:
  <CYCLE_DIRECTION>
          [possible values: previous, next]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/data-directory.md
================================================
# data-directory

```
Show the path to komorebi's data directory in %LOCALAPPDATA%

Usage: komorebic.exe data-directory

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/disable-autostart.md
================================================
# disable-autostart

```
Deletes the komorebi.lnk shortcut in shell:startup to disable autostart

Usage: komorebic.exe disable-autostart

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/display-index-preference.md
================================================
# display-index-preference

```
Set the display index preference for a monitor identified using its display name

Usage: komorebic.exe display-index-preference <INDEX_PREFERENCE> <DISPLAY>

Arguments:
  <INDEX_PREFERENCE>
          Preferred monitor index (zero-indexed)

  <DISPLAY>
          Display name as identified in komorebic state

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/eager-focus.md
================================================
# eager-focus

```
Focus the first managed window matching the given exe

Usage: komorebic.exe eager-focus <EXE>

Arguments:
  <EXE>
          Case-sensitive exe identifier

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/enable-autostart.md
================================================
# enable-autostart

```
Generates the komorebi.lnk shortcut in shell:startup to autostart komorebi

Usage: komorebic.exe enable-autostart [OPTIONS]

Options:
  -c, --config <CONFIG>
          Path to a static configuration JSON file

      --whkd
          Enable autostart of whkd

      --bar
          Enable autostart of komorebi-bar

      --masir
          Enable autostart of masir

  -h, --help
          Print help

```


================================================
FILE: docs/cli/enforce-workspace-rules.md
================================================
# enforce-workspace-rules

```
Enforce all workspace rules, including initial workspace rules that have already been applied

Usage: komorebic.exe enforce-workspace-rules

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/ensure-named-workspaces.md
================================================
# ensure-named-workspaces

```
Create these many named workspaces for the specified monitor

Usage: komorebic.exe ensure-named-workspaces <MONITOR> [NAMES]...

Arguments:
  <MONITOR>
          Monitor index (zero-indexed)

  [NAMES]...
          Names of desired workspaces

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/ensure-workspaces.md
================================================
# ensure-workspaces

```
Create at least this many workspaces for the specified monitor

Usage: komorebic.exe ensure-workspaces <MONITOR> <WORKSPACE_COUNT>

Arguments:
  <MONITOR>
          Monitor index (zero-indexed)

  <WORKSPACE_COUNT>
          Number of desired workspaces

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/fetch-app-specific-configuration.md
================================================
# fetch-app-specific-configuration

```
Fetch the latest version of applications.json from komorebi-application-specific-configuration

Usage: komorebic.exe fetch-app-specific-configuration

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/flip-layout.md
================================================
# flip-layout

```
Flip the layout on the focused workspace

Usage: komorebic.exe flip-layout <AXIS>

Arguments:
  <AXIS>
          [possible values: horizontal, vertical, horizontal-and-vertical]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-last-workspace.md
================================================
# focus-last-workspace

```
Focus the last focused workspace on the focused monitor

Usage: komorebic.exe focus-last-workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-monitor-at-cursor.md
================================================
# focus-monitor-at-cursor

```
Focus the monitor at the current cursor location

Usage: komorebic.exe focus-monitor-at-cursor

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-monitor-workspace.md
================================================
# focus-monitor-workspace

```
Focus the specified workspace on the target monitor

Usage: komorebic.exe focus-monitor-workspace <TARGET_MONITOR> <TARGET_WORKSPACE>

Arguments:
  <TARGET_MONITOR>
          Target monitor index (zero-indexed)

  <TARGET_WORKSPACE>
          Workspace index on the target monitor (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-monitor.md
================================================
# focus-monitor

```
Focus the specified monitor

Usage: komorebic.exe focus-monitor <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-named-workspace.md
================================================
# focus-named-workspace

```
Focus the specified workspace

Usage: komorebic.exe focus-named-workspace <WORKSPACE>

Arguments:
  <WORKSPACE>
          Target workspace name

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-stack-window.md
================================================
# focus-stack-window

```
Focus the specified window index in the focused stack

Usage: komorebic.exe focus-stack-window <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-workspace.md
================================================
# focus-workspace

```
Focus the specified workspace on the focused monitor

Usage: komorebic.exe focus-workspace <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus-workspaces.md
================================================
# focus-workspaces

```
Focus the specified workspace on all monitors

Usage: komorebic.exe focus-workspaces <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focus.md
================================================
# focus

```
Change focus to the window in the specified direction

Usage: komorebic.exe focus <OPERATION_DIRECTION>

Arguments:
  <OPERATION_DIRECTION>
          [possible values: left, right, up, down]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focused-workspace-container-padding.md
================================================
# focused-workspace-container-padding

```
Set container padding on the focused workspace

Usage: komorebic.exe focused-workspace-container-padding <SIZE>

Arguments:
  <SIZE>
          Pixels size to set as an integer

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/focused-workspace-padding.md
================================================
# focused-workspace-padding

```
Set workspace padding on the focused workspace

Usage: komorebic.exe focused-workspace-padding <SIZE>

Arguments:
  <SIZE>
          Pixels size to set as an integer

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/force-focus.md
================================================
# force-focus

```
Forcibly focus the window at the cursor with a left mouse click

Usage: komorebic.exe force-focus

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/generate-static-config.md
================================================
# generate-static-config

```
Generates a static configuration JSON file based on the current window manager state

Usage: komorebic.exe generate-static-config

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/global-state.md
================================================
# global-state

```
Show a JSON representation of the current global state

Usage: komorebic.exe global-state

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/global-work-area-offset.md
================================================
# global-work-area-offset

```
Set offsets to exclude parts of the work area from tiling

Usage: komorebic.exe global-work-area-offset <LEFT> <TOP> <RIGHT> <BOTTOM>

Arguments:
  <LEFT>
          Size of the left work area offset (set right to left * 2 to maintain right padding)

  <TOP>
          Size of the top work area offset (set bottom to the same value to maintain bottom padding)

  <RIGHT>
          Size of the right work area offset

  <BOTTOM>
          Size of the bottom work area offset

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/gui.md
================================================
# gui

```
Launch the komorebi-gui debugging tool

Usage: komorebic.exe gui

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/identify-layered-application.md
================================================
# identify-layered-application

```
Identify an application that has WS_EX_LAYERED, but should still be managed

Usage: komorebic.exe identify-layered-application <IDENTIFIER> <ID>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/identify-object-name-change-application.md
================================================
# identify-object-name-change-application

```
Identify an application that sends EVENT_OBJECT_NAMECHANGE on launch

Usage: komorebic.exe identify-object-name-change-application <IDENTIFIER> <ID>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/identify-tray-application.md
================================================
# identify-tray-application

```
Identify an application that closes to the system tray

Usage: komorebic.exe identify-tray-application <IDENTIFIER> <ID>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/ignore-rule.md
================================================
# ignore-rule

```
Add a rule to ignore the specified application

Usage: komorebic.exe ignore-rule <IDENTIFIER> <ID>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/initial-named-workspace-rule.md
================================================
# initial-named-workspace-rule

```
Add a rule to associate an application with a named workspace on first show

Usage: komorebic.exe initial-named-workspace-rule <IDENTIFIER> <ID> <WORKSPACE>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

  <WORKSPACE>
          Name of a workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/initial-workspace-rule.md
================================================
# initial-workspace-rule

```
Add a rule to associate an application with a workspace on first show

Usage: komorebic.exe initial-workspace-rule <IDENTIFIER> <ID> <MONITOR> <WORKSPACE>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

  <MONITOR>
          Monitor index (zero-indexed)

  <WORKSPACE>
          Workspace index on the specified monitor (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/invisible-borders.md
================================================
# invisible-borders

```
Set the invisible border dimensions around each window

Usage: komorebic.exe invisible-borders <LEFT> <TOP> <RIGHT> <BOTTOM>

Arguments:
  <LEFT>
          Size of the left invisible border

  <TOP>
          Size of the top invisible border (usually 0)

  <RIGHT>
          Size of the right invisible border (usually left * 2)

  <BOTTOM>
          Size of the bottom invisible border (usually the same as left)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/kill.md
================================================
# kill

```
Kill background processes started by komorebic

Usage: komorebic.exe kill [OPTIONS]

Options:
      --whkd
          Kill whkd if it is running as a background process

      --bar
          Kill komorebi-bar if it is running as a background process

      --masir
          Kill masir if it is running as a background process

  -h, --help
          Print help

```


================================================
FILE: docs/cli/license.md
================================================
# license

```
Specify an email associated with an Individual Commercial Use License

Usage: komorebic.exe license <EMAIL>

Arguments:
  <EMAIL>
          Email address associated with an Individual Commercial Use License

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/load-resize.md
================================================
# load-resize

```
Load the resize layout dimensions from a file

Usage: komorebic.exe load-resize <PATH>

Arguments:
  <PATH>
          File from which the resize layout dimensions should be loaded

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/log.md
================================================
# log

```
Tail komorebi.exe's process logs (cancel with Ctrl-C)

Usage: komorebic.exe log

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/manage-rule.md
================================================
# manage-rule

```
Add a rule to always manage the specified application

Usage: komorebic.exe manage-rule <IDENTIFIER> <ID>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/manage.md
================================================
# manage

```
Force komorebi to manage the focused window

Usage: komorebic.exe manage

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/minimize.md
================================================
# minimize

```
Minimize the focused window

Usage: komorebic.exe minimize

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/monitor-index-preference.md
================================================
# monitor-index-preference

```
Set the monitor index preference for a monitor identified using its size

Usage: komorebic.exe monitor-index-preference <INDEX_PREFERENCE> <LEFT> <TOP> <RIGHT> <BOTTOM>

Arguments:
  <INDEX_PREFERENCE>
          Preferred monitor index (zero-indexed)

  <LEFT>
          Left value of the monitor's size Rect

  <TOP>
          Top value of the monitor's size Rect

  <RIGHT>
          Right value of the monitor's size Rect

  <BOTTOM>
          Bottom value of the monitor's size Rect

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/monitor-information.md
================================================
# monitor-information

```
Show information about connected monitors

Usage: komorebic.exe monitor-information

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/monitor-work-area-offset.md
================================================
# monitor-work-area-offset

```
Set offsets for a monitor to exclude parts of the work area from tiling

Usage: komorebic.exe monitor-work-area-offset <MONITOR> <LEFT> <TOP> <RIGHT> <BOTTOM>

Arguments:
  <MONITOR>
          Monitor index (zero-indexed)

  <LEFT>
          Size of the left work area offset (set right to left * 2 to maintain right padding)

  <TOP>
          Size of the top work area offset (set bottom to the same value to maintain bottom padding)

  <RIGHT>
          Size of the right work area offset

  <BOTTOM>
          Size of the bottom work area offset

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/mouse-follows-focus.md
================================================
# mouse-follows-focus

```
Enable or disable mouse follows focus on all workspaces

Usage: komorebic.exe mouse-follows-focus <BOOLEAN_STATE>

Arguments:
  <BOOLEAN_STATE>
          [possible values: enable, disable]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move-to-last-workspace.md
================================================
# move-to-last-workspace

```
Move the focused window to the last focused monitor workspace

Usage: komorebic.exe move-to-last-workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move-to-monitor-workspace.md
================================================
# move-to-monitor-workspace

```
Move the focused window to the specified monitor workspace

Usage: komorebic.exe move-to-monitor-workspace <TARGET_MONITOR> <TARGET_WORKSPACE>

Arguments:
  <TARGET_MONITOR>
          Target monitor index (zero-indexed)

  <TARGET_WORKSPACE>
          Workspace index on the target monitor (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move-to-monitor.md
================================================
# move-to-monitor

```
Move the focused window to the specified monitor

Usage: komorebic.exe move-to-monitor <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move-to-named-workspace.md
================================================
# move-to-named-workspace

```
Move the focused window to the specified workspace

Usage: komorebic.exe move-to-named-workspace <WORKSPACE>

Arguments:
  <WORKSPACE>
          Target workspace name

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move-to-workspace.md
================================================
# move-to-workspace

```
Move the focused window to the specified workspace

Usage: komorebic.exe move-to-workspace <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move-workspace-to-monitor.md
================================================
# move-workspace-to-monitor

```
Move the focused workspace to the specified monitor

Usage: komorebic.exe move-workspace-to-monitor <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/move.md
================================================
# move

```
Move the focused window in the specified direction

Usage: komorebic.exe move <OPERATION_DIRECTION>

Arguments:
  <OPERATION_DIRECTION>
          [possible values: left, right, up, down]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/named-workspace-container-padding.md
================================================
# named-workspace-container-padding

```
Set the container padding for the specified workspace

Usage: komorebic.exe named-workspace-container-padding <WORKSPACE> <SIZE>

Arguments:
  <WORKSPACE>
          Target workspace name

  <SIZE>
          Pixels to pad with as an integer

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/named-workspace-layout-rule.md
================================================
# named-workspace-layout-rule

```
Add a dynamic layout rule for the specified workspace

Usage: komorebic.exe named-workspace-layout-rule <WORKSPACE> <AT_CONTAINER_COUNT> <LAYOUT>

Arguments:
  <WORKSPACE>
          Target workspace name

  <AT_CONTAINER_COUNT>
          The number of window containers on-screen required to trigger this layout rule

  <LAYOUT>
          [possible values: bsp, columns, rows, vertical-stack, horizontal-stack, ultrawide-vertical-stack, grid, right-main-vertical-stack, scrolling]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/named-workspace-layout.md
================================================
# named-workspace-layout

```
Set the layout for the specified workspace

Usage: komorebic.exe named-workspace-layout <WORKSPACE> <VALUE>

Arguments:
  <WORKSPACE>
          Target workspace name

  <VALUE>
          [possible values: bsp, columns, rows, vertical-stack, horizontal-stack, ultrawide-vertical-stack, grid, right-main-vertical-stack, scrolling]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/named-workspace-padding.md
================================================
# named-workspace-padding

```
Set the workspace padding for the specified workspace

Usage: komorebic.exe named-workspace-padding <WORKSPACE> <SIZE>

Arguments:
  <WORKSPACE>
          Target workspace name

  <SIZE>
          Pixels to pad with as an integer

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/named-workspace-rule.md
================================================
# named-workspace-rule

```
Add a rule to associate an application with a named workspace

Usage: komorebic.exe named-workspace-rule <IDENTIFIER> <ID> <WORKSPACE>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

  <WORKSPACE>
          Name of a workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/named-workspace-tiling.md
================================================
# named-workspace-tiling

```
Enable or disable window tiling for the specified workspace

Usage: komorebic.exe named-workspace-tiling <WORKSPACE> <VALUE>

Arguments:
  <WORKSPACE>
          Target workspace name

  <VALUE>
          [possible values: enable, disable]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/new-workspace.md
================================================
# new-workspace

```
Create and append a new workspace on the focused monitor

Usage: komorebic.exe new-workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/notification-schema.md
================================================
# notification-schema

```
Generate a JSON Schema of subscription notifications

Usage: komorebic.exe notification-schema

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/preselect-direction.md
================================================
# preselect-direction

```
Preselect the specified direction for the next window to be spawned on supported layouts

Usage: komorebic.exe preselect-direction <OPERATION_DIRECTION>

Arguments:
  <OPERATION_DIRECTION>
          [possible values: left, right, up, down]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/promote-focus.md
================================================
# promote-focus

```
Promote the user focus to the top of the tree

Usage: komorebic.exe promote-focus

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/promote-swap.md
================================================
# promote-swap

```
Promote the focused window to the largest tile by swapping container indices with the largest tile

Usage: komorebic.exe promote-swap

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/promote-window.md
================================================
# promote-window

```
Promote the window in the specified direction

Usage: komorebic.exe promote-window <OPERATION_DIRECTION>

Arguments:
  <OPERATION_DIRECTION>
          [possible values: left, right, up, down]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/promote.md
================================================
# promote

```
Promote the focused window to the largest tile via container removal and re-insertion

Usage: komorebic.exe promote

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/pwsh-app-specific-configuration.md
================================================
# pwsh-app-specific-configuration

```
Generate common app-specific configurations and fixes in a PowerShell script

Usage: komorebic.exe pwsh-app-specific-configuration <PATH> [OVERRIDE_PATH]

Arguments:
  <PATH>
          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/query.md
================================================
# query

```
Query the current window manager state

Usage: komorebic.exe query <STATE_QUERY>

Arguments:
  <STATE_QUERY>
          [possible values: focused-monitor-index, focused-workspace-index, focused-container-index, focused-window-index, focused-workspace-name, focused-workspace-layout, focused-container-kind, version]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/quick-load-resize.md
================================================
# quick-load-resize

```
Load the last quicksaved resize layout dimensions

Usage: komorebic.exe quick-load-resize

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/quick-save-resize.md
================================================
# quick-save-resize

```
Quicksave the current resize layout dimensions

Usage: komorebic.exe quick-save-resize

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/quickstart.md
================================================
# quickstart

```
Gather example configurations for a new-user quickstart

Usage: komorebic.exe quickstart

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/reload-configuration.md
================================================
# reload-configuration

```
Reload legacy komorebi.ahk or komorebi.ps1 configurations (if they exist)

Usage: komorebic.exe reload-configuration

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/remove-title-bar.md
================================================
# remove-title-bar

```
Whitelist an application for title bar removal

Usage: komorebic.exe remove-title-bar <IDENTIFIER> <ID>

Arguments:
  <IDENTIFIER>
          [possible values: exe, class, title, path]

  <ID>
          Identifier as a string

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/replace-configuration.md
================================================
# replace-configuration

```
Replace the configuration of a running instance of komorebi from a static configuration file

Usage: komorebic.exe replace-configuration <PATH>

Arguments:
  <PATH>
          Static configuration JSON file from which the configuration should be loaded

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/resize-axis.md
================================================
# resize-axis

```
Resize the focused window or primary column along the specified axis

Usage: komorebic.exe resize-axis <AXIS> <SIZING>

Arguments:
  <AXIS>
          [possible values: horizontal, vertical, horizontal-and-vertical]

  <SIZING>
          [possible values: increase, decrease]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/resize-delta.md
================================================
# resize-delta

```
Set the resize delta (used by resize-edge and resize-axis)

Usage: komorebic.exe resize-delta <PIXELS>

Arguments:
  <PIXELS>
          The delta of pixels by which to increase or decrease window dimensions when resizing

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/resize-edge.md
================================================
# resize-edge

```
Resize the focused window in the specified direction

Usage: komorebic.exe resize-edge <EDGE> <SIZING>

Arguments:
  <EDGE>
          [possible values: left, right, up, down]

  <SIZING>
          [possible values: increase, decrease]

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/restore-windows.md
================================================
# restore-windows

```
Restore all hidden windows (debugging command)

Usage: komorebic.exe restore-windows

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/retile.md
================================================
# retile

```
Force the retiling of all managed windows

Usage: komorebic.exe retile

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/save-resize.md
================================================
# save-resize

```
Save the current resize layout dimensions to a file

Usage: komorebic.exe save-resize <PATH>

Arguments:
  <PATH>
          File to which the resize layout dimensions should be saved

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/scrolling-layout-columns.md
================================================
# scrolling-layout-columns

```
Set the number of visible columns for the Scrolling layout on the focused workspace

Usage: komorebic.exe scrolling-layout-columns <COUNT>

Arguments:
  <COUNT>
          Desired number of visible columns

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/send-to-last-workspace.md
================================================
# send-to-last-workspace

```
Send the focused window to the last focused monitor workspace

Usage: komorebic.exe send-to-last-workspace

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/send-to-monitor-workspace.md
================================================
# send-to-monitor-workspace

```
Send the focused window to the specified monitor workspace

Usage: komorebic.exe send-to-monitor-workspace <TARGET_MONITOR> <TARGET_WORKSPACE>

Arguments:
  <TARGET_MONITOR>
          Target monitor index (zero-indexed)

  <TARGET_WORKSPACE>
          Workspace index on the target monitor (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/send-to-monitor.md
================================================
# send-to-monitor

```
Send the focused window to the specified monitor

Usage: komorebic.exe send-to-monitor <TARGET>

Arguments:
  <TARGET>
          Target index (zero-indexed)

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/send-to-named-workspace.md
================================================
# send-to-named-workspace

```
Send the focused window to the specified workspace

Usage: komorebic.exe send-to-named-workspace <WORKSPACE>

Arguments:
  <WORKSPACE>
          Target workspace name

Options:
  -h, --help
          Print help

```


================================================
FILE: docs/cli/send-to-workspace.md
================================================
# send-to-workspace

```
S
Download .txt
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
Download .txt
SYMBOL INDEX (1617 symbols across 86 files)

FILE: check_schema_docs.py
  class MissingDoc (line 25) | class MissingDoc:
    method __str__ (line 32) | def __str__(self):
  class SchemaConfig (line 50) | class SchemaConfig:
  function find_rust_definition (line 58) | def find_rust_definition(
  function _get_variant_identifier (line 118) | def _get_variant_identifier(variant: dict) -> str:
  function check_type_description (line 151) | def check_type_description(type_name: str, type_def: dict) -> list[Missi...
  function check_top_level_properties (line 270) | def check_top_level_properties(schema: dict, root_type_name: str) -> lis...
  function check_schema (line 284) | def check_schema(
  function print_results (line 329) | def print_results(all_missing: list[MissingDoc], display_name: str) -> N...
  function main (line 375) | def main():

FILE: komorebi-bar/src/bar.rs
  constant CREATE_NO_WINDOW (line 78) | const CREATE_NO_WINDOW: u32 = 0x0800_0000;
  function start_powershell (line 84) | fn start_powershell() -> eyre::Result<()> {
  function stop_powershell (line 108) | fn stop_powershell() -> eyre::Result<()> {
  function exec_powershell (line 129) | pub fn exec_powershell(cmd: &str) -> eyre::Result<()> {
  type Komobar (line 147) | pub struct Komobar {
    method apply_config (line 341) | pub fn apply_config(
    method update_size_rect (line 573) | fn update_size_rect(&mut self) {
    method try_apply_theme (line 619) | fn try_apply_theme(&mut self, ctx: &Context) {
    method new (line 692) | pub fn new(
    method set_font_size (line 735) | fn set_font_size(ctx: &Context, font_size: f32) {
    method add_custom_font (line 760) | fn add_custom_font(ctx: &Context, name: &str) {
    method position_bar (line 806) | pub fn position_bar(&self) {
    method update_monitor_coordinates (line 820) | fn update_monitor_coordinates(&mut self, monitor_size: &komorebi_clien...
    method clear_color (line 839) | fn clear_color(&self, _visuals: &Visuals) -> [f32; 4] {
    method update (line 843) | fn update(&mut self, ctx: &Context, _frame: &mut eframe::Frame) {
  type InputConfig (line 169) | struct InputConfig {
  function apply_theme (line 179) | pub fn apply_theme(
  type Alignment (line 1324) | pub enum Alignment {
  function handle_notification (line 1331) | fn handle_notification(

FILE: komorebi-bar/src/config.rs
  type KomobarConfig (line 19) | pub struct KomobarConfig {
    method aliases (line 113) | pub fn aliases(raw: &str) {
    method show_all_icons_on_komorebi_workspace (line 142) | pub fn show_all_icons_on_komorebi_workspace(widgets: &[WidgetConfig]) ...
    method read (line 508) | pub fn read(path: &PathBuf) -> color_eyre::Result<Self> {
  type PositionConfig (line 155) | pub struct PositionConfig {
  type FrameConfig (line 167) | pub struct FrameConfig {
  type MonitorConfigOrIndex (line 176) | pub enum MonitorConfigOrIndex {
  type MonitorConfig (line 186) | pub struct MonitorConfig {
  type Padding (line 193) | pub type Padding = SpacingKind;
  type Margin (line 194) | pub type Margin = SpacingKind;
  type SpacingKind (line 204) | pub enum SpacingKind {
    method to_individual (line 214) | pub fn to_individual(&self, default: f32) -> IndividualSpacingConfig {
  type GroupedSpacingConfig (line 255) | pub struct GroupedSpacingConfig {
  type GroupedSpacingOptions (line 266) | pub enum GroupedSpacingOptions {
  type IndividualSpacingConfig (line 276) | pub struct IndividualSpacingConfig {
    constant ZERO (line 289) | pub const ZERO: Self = IndividualSpacingConfig {
    method all (line 296) | pub fn all(value: f32) -> Self {
    method horizontal (line 305) | pub fn horizontal(value: f32) -> Self {
    method vertical (line 314) | pub fn vertical(value: f32) -> Self {
    method top (line 323) | pub fn top(self, value: f32) -> Self {
    method bottom (line 327) | pub fn bottom(self, value: f32) -> Self {
    method left (line 334) | pub fn left(self, value: f32) -> Self {
    method right (line 341) | pub fn right(self, value: f32) -> Self {
  function get_individual_spacing (line 349) | pub fn get_individual_spacing(
  type MouseMessage (line 364) | pub enum MouseMessage {
    method execute (line 471) | pub fn execute(&self, mouse_follows_focus: bool) {
  type KomorebiMouseMessage (line 409) | pub struct KomorebiMouseMessage {
  type MouseConfig (line 423) | pub struct MouseConfig {
    method has_command (line 453) | pub fn has_command(&self) -> bool {
  type Position (line 531) | pub struct Position {
  method from (line 539) | fn from(value: Position) -> Self {
  method from (line 548) | fn from(value: Position) -> Self {
  type LabelPrefix (line 561) | pub enum LabelPrefix {
  type DisplayFormat (line 575) | pub enum DisplayFormat {
  type MediaDisplayFormat (line 627) | pub enum MediaDisplayFormat {
  type OriginalDisplayFormat (line 652) | pub enum OriginalDisplayFormat {
  type ExampleConfig (line 663) | struct ExampleConfig {
  function extend_new_variant (line 669) | pub fn extend_new_variant() {
  function extend_existing_variant (line 679) | pub fn extend_existing_variant() {
  function extend_invalid_variant (line 689) | pub fn extend_invalid_variant() {

FILE: komorebi-bar/src/main.rs
  type Opts (line 54) | struct Opts {
  function enum_window (line 74) | extern "system" fn enum_window(hwnd: HWND, lparam: LPARAM) -> BOOL {
  function process_hwnd (line 88) | fn process_hwnd() -> Option<isize> {
  type KomorebiEvent (line 105) | pub enum KomorebiEvent {
  function main (line 110) | fn main() -> color_eyre::Result<()> {

FILE: komorebi-bar/src/render.rs
  type Grouping (line 31) | pub enum Grouping {
  type RenderConfig (line 48) | pub struct RenderConfig {
    method load_show_komorebi_layout_options (line 136) | pub fn load_show_komorebi_layout_options() -> bool {
    method store_show_komorebi_layout_options (line 140) | pub fn store_show_komorebi_layout_options(show: bool) {
    method new (line 144) | pub fn new() -> Self {
    method change_frame_on_bar (line 161) | pub fn change_frame_on_bar(
    method apply_on_alignment (line 185) | pub fn apply_on_alignment<R>(
    method apply_on_widget (line 199) | pub fn apply_on_widget<R>(
    method fallback_group (line 215) | fn fallback_group<R>(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -...
    method fallback_widget_group (line 222) | fn fallback_widget_group<R>(
    method define_group (line 237) | fn define_group<R>(
    method define_group_frame (line 248) | pub fn define_group_frame(
    method widget_outer_margin (line 329) | fn widget_outer_margin(&mut self, ui: &mut Ui) -> Margin {
  type RenderExt (line 75) | pub trait RenderExt {
    method new_renderconfig (line 76) | fn new_renderconfig(
    method new_renderconfig (line 85) | fn new_renderconfig(
  type GroupingConfig (line 367) | pub struct GroupingConfig {
  type GroupingStyle (line 379) | pub enum GroupingStyle {
  type RoundingConfig (line 403) | pub enum RoundingConfig {
  method from (line 411) | fn from(value: RoundingConfig) -> Self {
  type Color32Ext (line 427) | pub trait Color32Ext {
    method try_apply_alpha (line 428) | fn try_apply_alpha(self, transparency_alpha: Option<u8>) -> Self;
    method try_apply_alpha (line 433) | fn try_apply_alpha(self, transparency_alpha: Option<u8>) -> Self {

FILE: komorebi-bar/src/selected_frame.rs
  type SelectableFrame (line 11) | pub struct SelectableFrame {
    method new (line 17) | pub fn new(selected: bool) -> Self {
    method new_auto (line 24) | pub fn new_auto(selected: bool, selected_fill: Option<Color32>) -> Self {
    method show (line 31) | pub fn show<R>(self, ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -...

FILE: komorebi-bar/src/ui.rs
  type CustomUi (line 8) | pub struct CustomUi<'ui>(pub &'ui mut Ui);
  function add_sized_left_to_right (line 11) | pub fn add_sized_left_to_right(

FILE: komorebi-bar/src/widgets/applications.rs
  constant MIN_LAUNCH_INTERVAL (line 33) | const MIN_LAUNCH_INTERVAL: Duration = Duration::from_millis(800);
  type ApplicationsConfig (line 38) | pub struct ApplicationsConfig {
  type AppConfig (line 56) | pub struct AppConfig {
  type ApplicationsDisplayFormat (line 78) | pub enum ApplicationsDisplayFormat {
  type Applications (line 89) | pub struct Applications {
    method from (line 123) | fn from(applications_config: &ApplicationsConfig) -> Self {
  method render (line 99) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...
  type App (line 164) | pub struct App {
    method render (line 182) | pub fn render(&mut self, ctx: &Context, ui: &mut Ui, icon_config: &Ico...
    method draw_icon (line 213) | fn draw_icon(&self, ctx: &Context, ui: &mut Ui, icon_config: &IconConf...
    method draw_name (line 223) | fn draw_name(&self, ui: &mut Ui) {
  type Icon (line 231) | pub enum Icon {
    method try_from_path (line 247) | pub fn try_from_path(icon: Option<&str>) -> Option<Self> {
    method try_from_command (line 275) | pub fn try_from_command(command: &UserCommand) -> Option<Self> {
    method draw (line 287) | pub fn draw(&self, ctx: &Context, ui: &mut Ui, icon_config: &IconConfi...
    method draw_fallback (line 313) | pub fn draw_fallback(ui: &mut Ui, icon_size: Vec2) {
  type IconConfig (line 328) | pub struct IconConfig {
  type UserCommand (line 339) | pub struct UserCommand {
    method as_ref (line 348) | fn as_ref(&self) -> &str {
    method new (line 357) | pub fn new(command: &str) -> Self {
    method get_executable (line 377) | pub fn get_executable(&self) -> Option<Cow<'_, Path>> {
    method launch_if_ready (line 393) | pub fn launch_if_ready(&mut self) {

FILE: komorebi-bar/src/widgets/battery.rs
  type BatteryConfig (line 23) | pub struct BatteryConfig {
  type BatteryState (line 57) | pub enum BatteryState {
  type BatteryOutput (line 67) | struct BatteryOutput {
  type Battery (line 72) | pub struct Battery {
    method from (line 38) | fn from(value: BatteryConfig) -> Self {
    method output (line 85) | fn output(&mut self) -> Option<BatteryOutput> {
  method render (line 139) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/cpu.rs
  type CpuConfig (line 22) | pub struct CpuConfig {
  type CpuOutput (line 54) | struct CpuOutput {
  type Cpu (line 59) | pub struct Cpu {
    method from (line 35) | fn from(value: CpuConfig) -> Self {
    method output (line 69) | fn output(&mut self) -> CpuOutput {
  method render (line 90) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/date.rs
  type CustomModifiers (line 23) | pub struct CustomModifiers {
    method apply (line 31) | fn apply(&self, output: &str) -> String {
  type DateConfig (line 66) | pub struct DateConfig {
  type DateFormat (line 109) | pub enum DateFormat {
    method next (line 127) | pub fn next(&mut self) {
    method fmt_string (line 137) | pub fn fmt_string(&self) -> String {
  type Date (line 150) | pub struct Date {
    method from (line 89) | fn from(value: DateConfig) -> Self {
    method output (line 161) | fn output(&mut self) -> String {
  method render (line 198) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/keyboard.rs
  constant ERROR_TEXT (line 24) | const ERROR_TEXT: &str = "Error";
  type KeyboardConfig (line 29) | pub struct KeyboardConfig {
  type Keyboard (line 53) | pub struct Keyboard {
    method from (line 40) | fn from(value: KeyboardConfig) -> Self {
    method output (line 130) | fn output(&mut self) -> String {
  function get_active_keyboard_layout (line 84) | fn get_active_keyboard_layout() -> eyre::Result<String, ()> {
  function get_lang (line 123) | fn get_lang() -> String {
  method render (line 145) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/komorebi.rs
  type KomorebiConfig (line 53) | pub struct KomorebiConfig {
  type KomorebiWorkspacesConfig (line 72) | pub struct KomorebiWorkspacesConfig {
  type KomorebiLayoutConfig (line 84) | pub struct KomorebiLayoutConfig {
  type KomorebiWorkspaceLayerConfig (line 96) | pub struct KomorebiWorkspaceLayerConfig {
  type KomorebiFocusedContainerConfig (line 108) | pub struct KomorebiFocusedContainerConfig {
  type KomorebiLockedContainerConfig (line 121) | pub struct KomorebiLockedContainerConfig {
  type KomorebiConfigurationSwitcherConfig (line 133) | pub struct KomorebiConfigurationSwitcherConfig {
  type Komorebi (line 171) | pub struct Komorebi {
    method from (line 141) | fn from(cfg: &KomorebiConfig) -> Self {
    method render_workspaces (line 195) | fn render_workspaces(&mut self, ctx: &Context, ui: &mut Ui, config: &m...
    method render_workspace_layer (line 227) | fn render_workspace_layer(&mut self, ctx: &Context, ui: &mut Ui, confi...
    method render_config_switcher (line 261) | fn render_config_switcher(&mut self, ui: &mut Ui, config: &mut RenderC...
    method render_layout (line 281) | fn render_layout(&mut self, ctx: &Context, ui: &mut Ui, config: &mut R...
    method render_locked_container (line 298) | fn render_locked_container(&mut self, ctx: &Context, ui: &mut Ui, conf...
    method render_focused_container (line 322) | fn render_focused_container(&mut self, ctx: &Context, ui: &mut Ui, con...
    method send_with_mouse_follow_off (line 353) | fn send_with_mouse_follow_off(monitor: &MonitorInfo, message: SocketMe...
    method send_messages (line 363) | fn send_messages(messages: &[SocketMessage]) -> IoResult<()> {
  method render (line 182) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...
  type WorkspacesBar (line 374) | pub struct WorkspacesBar {
    method try_from (line 388) | fn try_from(value: KomorebiWorkspacesConfig) -> Option<Self> {
    method show_icons (line 443) | fn show_icons(&self, ctx: &Context, ui: &mut Ui, ws: &WorkspaceInfo) -...
    method show_fallback_icon (line 467) | fn show_fallback_icon(&self, ctx: &Context, ui: &mut Ui, ws: &Workspac...
    method show_label (line 488) | fn show_label(ctx: &Context, ui: &mut Ui, ws: &WorkspaceInfo) -> Respo...
  type FocusedContainerBar (line 501) | pub struct FocusedContainerBar {
    method try_from (line 513) | fn try_from(value: KomorebiFocusedContainerConfig) -> Option<Self> {
    method show_icon (line 562) | fn show_icon<const HOVEL: bool>(&self, ctx: &Context, ui: &mut Ui, inf...
    method show_title (line 577) | fn show_title(&self, ui: &mut Ui, info: &WindowInfo, color: Color32) {
  type WorkspaceLayerBar (line 591) | pub struct WorkspaceLayerBar {
    method try_from (line 603) | fn try_from(value: KomorebiWorkspaceLayerConfig) -> Option<Self> {
    method draw_layer_icon (line 628) | fn draw_layer_icon(ctx: &Context, ui: &mut Ui, layer: &WorkspaceLayer,...
  type LockedContainerBar (line 681) | pub struct LockedContainerBar {
    method try_from (line 693) | fn try_from(value: KomorebiLockedContainerConfig) -> Option<Self> {
    method icon_layout (line 725) | fn icon_layout(ctx: &Context, is_locked: bool, icon_font: FontId) -> L...
    method append_text (line 740) | fn append_text(job: &mut LayoutJob, ctx: &Context, is_locked: bool, tx...
  type MonitorInfo (line 762) | pub struct MonitorInfo {
    method focused_workspace (line 792) | pub fn focused_workspace(&self) -> Option<&WorkspaceInfo> {
    method focused_workspace_layer (line 797) | pub fn focused_workspace_layer(&self) -> Option<WorkspaceLayer> {
    method focused_container (line 802) | pub fn focused_container(&self) -> Option<&ContainerInfo> {
    method update_from_self (line 809) | pub fn update_from_self(&mut self, config: &Self) {
    method update (line 815) | pub fn update(&mut self, monitor_index: Option<usize>, state: State, s...
    method workspaces (line 845) | fn workspaces<'a, I>(
    method resolve_layout (line 883) | fn resolve_layout(focused_ws: &Workspace, is_paused: bool) -> Komorebi...
  method default (line 775) | fn default() -> Self {
  type WorkspaceInfo (line 905) | pub struct WorkspaceInfo {
    method focused_container (line 917) | pub fn focused_container(&self) -> Option<&ContainerInfo> {
  type ContainerInfo (line 928) | pub struct ContainerInfo {
    method from_all_containers (line 944) | pub fn from_all_containers(ws: &Workspace) -> Vec<Self> {
    method from_focused_container (line 972) | pub fn from_focused_container(ws: &Workspace) -> Option<Self> {
    method from_container (line 985) | pub fn from_container(container: &Container, is_focused: bool) -> Self {
    method from_window (line 997) | pub fn from_window(window: &Window) -> Self {
  type WindowInfo (line 1010) | pub struct WindowInfo {
    method from (line 1016) | fn from(value: &Window) -> Self {

FILE: komorebi-bar/src/widgets/komorebi_layout.rs
  type KomorebiLayout (line 30) | pub enum KomorebiLayout {
    method deserialize (line 45) | fn deserialize<D>(deserializer: D) -> eyre::Result<Self, D::Error>
    method is_default (line 81) | fn is_default(&mut self) -> bool {
    method on_click (line 85) | fn on_click(
    method on_click_option (line 99) | fn on_click_option(&mut self, monitor_idx: usize, workspace_idx: Optio...
    method show_icon (line 142) | fn show_icon(&mut self, is_selected: bool, font_id: FontId, ctx: &Cont...
    method show (line 245) | pub fn show(
  method fmt (line 69) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {

FILE: komorebi-bar/src/widgets/media.rs
  type MediaConfig (line 24) | pub struct MediaConfig {
  type Media (line 41) | pub struct Media {
    method from (line 32) | fn from(value: MediaConfig) -> Self {
    method new (line 48) | pub fn new(enable: bool, display: MediaDisplayFormat) -> Self {
    method toggle (line 59) | pub fn toggle(&self) {
    method previous (line 67) | pub fn previous(&self) {
    method next (line 75) | pub fn next(&self) {
    method is_playing (line 83) | fn is_playing(&self) -> bool {
    method is_previous_enabled (line 93) | fn is_previous_enabled(&self) -> bool {
    method is_next_enabled (line 104) | fn is_next_enabled(&self) -> bool {
    method has_session (line 115) | fn has_session(&self) -> bool {
    method output (line 119) | fn output(&mut self) -> String {
  method render (line 141) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/memory.rs
  type MemoryConfig (line 22) | pub struct MemoryConfig {
  type MemoryOutput (line 54) | struct MemoryOutput {
  type Memory (line 59) | pub struct Memory {
    method from (line 35) | fn from(value: MemoryConfig) -> Self {
    method output (line 69) | fn output(&mut self) -> MemoryOutput {
  method render (line 94) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/mod.rs
  type IconsCache (line 35) | pub struct IconsCache {
    method new (line 43) | pub const fn new() -> Self {
    method texture (line 56) | pub fn texture(&self, ctx: &Context, id: &ImageIconId, img: &Arc<Color...
    method get_texture (line 66) | pub fn get_texture(&self, ctx: &Context, id: &ImageIconId) -> Option<T...
    method insert_texture (line 75) | pub fn insert_texture(&self, ctx: &Context, id: ImageIconId, texture: ...
    method get_image (line 87) | pub fn get_image(&self, id: &ImageIconId) -> Option<Arc<ColorImage>> {
    method insert_image (line 92) | pub fn insert_image(&self, id: ImageIconId, image: Arc<ColorImage>) {
  function rgba_to_color_image (line 98) | fn rgba_to_color_image(rgba_image: &RgbaImage) -> ColorImage {
  type ImageIcon (line 106) | pub struct ImageIcon {
    method new (line 116) | pub fn new(id: ImageIconId, image: Arc<ColorImage>) -> Self {
    method try_load (line 123) | pub fn try_load<F, I>(id: impl Into<ImageIconId>, loader: F) -> Option...
    method texture (line 144) | pub fn texture(&self, ctx: &Context) -> TextureHandle {
  type ImageIconId (line 154) | pub enum ImageIconId {
    method from (line 163) | fn from(value: &Path) -> Self {
    method from (line 170) | fn from(value: isize) -> Self {

FILE: komorebi-bar/src/widgets/network.rs
  type NetworkConfig (line 30) | pub struct NetworkConfig {
  type NetworkSelectConfig (line 56) | pub struct NetworkSelectConfig {
  type Network (line 102) | pub struct Network {
    method from (line 68) | fn from(value: NetworkConfig) -> Self {
    method update_default_interface_async (line 123) | fn update_default_interface_async(&mut self) {
    method default_interface (line 142) | fn default_interface(&mut self) -> String {
    method update_network_activity_async (line 156) | fn update_network_activity_async(&mut self) {
    method network_activity (line 218) | fn network_activity(&mut self) -> (Vec<NetworkReading>, Vec<NetworkRea...
    method get_network_activity (line 237) | fn get_network_activity(&self) -> (Vec<NetworkReading>, Vec<NetworkRea...
    method reading_to_labels (line 243) | fn reading_to_labels(
    method to_pretty_bytes (line 357) | fn to_pretty_bytes(input_in_bytes: u64, timespan_in_s: u64) -> (u64, S...
    method show_frame (line 379) | fn show_frame<R>(
  method render (line 397) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...
  type NetworkReadingFormat (line 555) | enum NetworkReadingFormat {
  type ReadingValue (line 561) | struct ReadingValue {
    method from (line 567) | fn from(value: (u64, String)) -> Self {
  type NetworkReading (line 576) | struct NetworkReading {
    method new (line 583) | fn new(
  type DataUnit (line 597) | enum DataUnit {
    method fmt (line 610) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

FILE: komorebi-bar/src/widgets/storage.rs
  type StorageConfig (line 22) | pub struct StorageConfig {
  type StorageDisk (line 58) | struct StorageDisk {
  type Storage (line 63) | pub struct Storage {
    method from (line 43) | fn from(value: StorageConfig) -> Self {
    method output (line 76) | fn output(&mut self) -> Vec<StorageDisk> {
  method render (line 122) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/time.rs
  type TimeConfig (line 76) | pub struct TimeConfig {
  type TimeFormat (line 124) | pub enum TimeFormat {
    method toggle (line 143) | pub fn toggle(&mut self) {
    method fmt_string (line 155) | fn fmt_string(&self) -> String {
  type TimeOutput (line 169) | struct TimeOutput {
    method new (line 175) | fn new() -> Self {
  type Time (line 184) | pub struct Time {
    method from (line 101) | fn from(value: TimeConfig) -> Self {
    method output (line 196) | fn output(&mut self) -> TimeOutput {
    method paint_binary_circle (line 258) | fn paint_binary_circle(
    method paint_binary_rect (line 303) | fn paint_binary_rect(
  method render (line 435) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/update.rs
  type UpdateConfig (line 20) | pub struct UpdateConfig {
  type Update (line 68) | pub struct Update {
    method from (line 31) | fn from(value: UpdateConfig) -> Self {
    method output (line 78) | fn output(&mut self) -> String {
  method render (line 114) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderConf...

FILE: komorebi-bar/src/widgets/widget.rs
  type BarWidget (line 31) | pub trait BarWidget {
    method render (line 32) | fn render(&mut self, ctx: &Context, ui: &mut Ui, config: &mut RenderCo...
  type WidgetConfig (line 38) | pub enum WidgetConfig {
    method as_boxed_bar_widget (line 78) | pub fn as_boxed_bar_widget(&self) -> Box<dyn BarWidget> {
    method enabled (line 95) | pub fn enabled(&self) -> bool {

FILE: komorebi-client/src/lib.rs
  constant KOMOREBI (line 97) | const KOMOREBI: &str = "komorebi.sock";
  function send_message (line 99) | pub fn send_message(message: &SocketMessage) -> std::io::Result<()> {
  function send_batch (line 106) | pub fn send_batch<Q>(messages: impl IntoIterator<Item = Q>) -> std::io::...
  function send_query (line 123) | pub fn send_query(message: &SocketMessage) -> std::io::Result<String> {
  function subscribe (line 139) | pub fn subscribe(name: &str) -> std::io::Result<UnixListener> {
  function subscribe_with_options (line 159) | pub fn subscribe_with_options(

FILE: komorebi-gui/src/main.rs
  function main (line 25) | fn main() {
  type BorderColours (line 40) | struct BorderColours {
  type BorderConfig (line 49) | struct BorderConfig {
  type StackbarConfig (line 57) | struct StackbarConfig {
  type MonitorConfig (line 67) | struct MonitorConfig {
    method from (line 74) | fn from(value: &komorebi_client::Monitor) -> Self {
  type WorkspaceConfig (line 88) | struct WorkspaceConfig {
    method from (line 97) | fn from(value: &komorebi_client::Workspace) -> Self {
  type KomorebiGui (line 118) | struct KomorebiGui {
    method new (line 141) | fn new(_cc: &eframe::CreationContext<'_>) -> Self {
    method update (line 246) | fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
  function colour32 (line 129) | fn colour32(colour: Option<Colour>) -> Color32 {
  function enum_window (line 219) | extern "system" fn enum_window(
  function json_view_ui (line 238) | fn json_view_ui(ui: &mut egui::Ui, code: &str) {

FILE: komorebi-layouts/src/arrangement.rs
  type Arrangement (line 26) | pub trait Arrangement {
    method calculate (line 28) | fn calculate(
    method calculate (line 43) | fn calculate(
    method calculate (line 778) | fn calculate(
  type Axis (line 906) | pub enum Axis {
  function columns (line 917) | fn columns(area: &Rect, len: usize) -> Vec<Rect> {
  function columns_with_ratios (line 922) | fn columns_with_ratios(
  function rows (line 1002) | fn rows(area: &Rect, len: usize) -> Vec<Rect> {
  function rows_with_ratios (line 1007) | fn rows_with_ratios(
  function columns_reverse (line 1081) | fn columns_reverse(columns: &mut [Rect]) {
  function rows_reverse (line 1089) | fn rows_reverse(rows: &mut [Rect]) {
  function calculate_resize_adjustments (line 1097) | fn calculate_resize_adjustments(resize_dimensions: &[Option<Rect>]) -> V...
  function recursive_fibonacci (line 1181) | fn recursive_fibonacci(
  function calculate_columns_adjustment (line 1296) | fn calculate_columns_adjustment(resize_dimensions: &[Option<Rect>]) -> V...
  function calculate_rows_adjustment (line 1321) | fn calculate_rows_adjustment(resize_dimensions: &[Option<Rect>]) -> Vec<...
  function calculate_vertical_stack_adjustment (line 1346) | fn calculate_vertical_stack_adjustment(resize_dimensions: &[Option<Rect>...
  function calculate_right_vertical_stack_adjustment (line 1392) | fn calculate_right_vertical_stack_adjustment(resize_dimensions: &[Option...
  function calculate_horizontal_stack_adjustment (line 1438) | fn calculate_horizontal_stack_adjustment(resize_dimensions: &[Option<Rec...
  function calculate_ultrawide_adjustment (line 1477) | fn calculate_ultrawide_adjustment(resize_dimensions: &[Option<Rect>]) ->...
  function calculate_scrolling_adjustment (line 1550) | fn calculate_scrolling_adjustment(resize_dimensions: &[Option<Rect>]) ->...
  function resize_left (line 1581) | fn resize_left(rect: &mut Rect, resize: i32) {
  function resize_right (line 1586) | fn resize_right(rect: &mut Rect, resize: i32) {
  function resize_top (line 1590) | fn resize_top(rect: &mut Rect, resize: i32) {
  function resize_bottom (line 1595) | fn resize_bottom(rect: &mut Rect, resize: i32) {

FILE: komorebi-layouts/src/arrangement_tests.rs
  function test_area (line 5) | fn test_area() -> Rect {
  function layout_options_with_column_ratios (line 15) | fn layout_options_with_column_ratios(ratios: &[f32]) -> LayoutOptions {
  function layout_options_with_row_ratios (line 29) | fn layout_options_with_row_ratios(ratios: &[f32]) -> LayoutOptions {
  function layout_options_with_ratios (line 43) | fn layout_options_with_ratios(column_ratios: &[f32], row_ratios: &[f32])...
  function assert_containers_adjacent_horizontally (line 60) | fn assert_containers_adjacent_horizontally(layouts: &[Rect], area: &Rect) {
  function assert_containers_adjacent_vertically (line 83) | fn assert_containers_adjacent_vertically(layouts: &[Rect], area: &Rect) {
  function test_columns_equal_width_no_ratios (line 110) | fn test_columns_equal_width_no_ratios() {
  function test_columns_with_single_ratio (line 123) | fn test_columns_with_single_ratio() {
  function test_columns_with_multiple_ratios (line 137) | fn test_columns_with_multiple_ratios() {
  function test_columns_positions_are_correct (line 155) | fn test_columns_positions_are_correct() {
  function test_columns_last_column_gets_remaining_space (line 169) | fn test_columns_last_column_gets_remaining_space() {
  function test_columns_single_column (line 182) | fn test_columns_single_column() {
  function test_columns_more_columns_than_ratios (line 193) | fn test_columns_more_columns_than_ratios() {
  function test_columns_cover_full_width_no_ratios (line 208) | fn test_columns_cover_full_width_no_ratios() {
  function test_columns_cover_full_width_with_ratios (line 226) | fn test_columns_cover_full_width_with_ratios() {
  function test_rows_equal_height_no_ratios (line 249) | fn test_rows_equal_height_no_ratios() {
  function test_rows_with_single_ratio (line 262) | fn test_rows_with_single_ratio() {
  function test_rows_positions_are_correct (line 276) | fn test_rows_positions_are_correct() {
  function test_rows_last_row_gets_remaining_space (line 290) | fn test_rows_last_row_gets_remaining_space() {
  function test_rows_cover_full_height_no_ratios (line 303) | fn test_rows_cover_full_height_no_ratios() {
  function test_rows_cover_full_height_with_ratios (line 321) | fn test_rows_cover_full_height_with_ratios() {
  function test_vertical_stack_default_ratio (line 344) | fn test_vertical_stack_default_ratio() {
  function test_vertical_stack_custom_ratio (line 356) | fn test_vertical_stack_custom_ratio() {
  function test_vertical_stack_with_row_ratios (line 372) | fn test_vertical_stack_with_row_ratios() {
  function test_vertical_stack_single_window (line 390) | fn test_vertical_stack_single_window() {
  function test_horizontal_stack_default_ratio (line 407) | fn test_horizontal_stack_default_ratio() {
  function test_horizontal_stack_custom_ratio (line 419) | fn test_horizontal_stack_custom_ratio() {
  function test_horizontal_stack_columns_cover_full_width (line 440) | fn test_horizontal_stack_columns_cover_full_width() {
  function test_vertical_stack_rows_cover_full_height (line 465) | fn test_vertical_stack_rows_cover_full_height() {
  function test_scrolling_visible_columns_cover_full_width (line 490) | fn test_scrolling_visible_columns_cover_full_width() {
  function test_ultrawide_default_ratios (line 528) | fn test_ultrawide_default_ratios() {
  function test_ultrawide_custom_ratios (line 552) | fn test_ultrawide_custom_ratios() {
  function test_ultrawide_two_windows (line 578) | fn test_ultrawide_two_windows() {
  function test_bsp_default_ratio (line 605) | fn test_bsp_default_ratio() {
  function test_bsp_custom_column_ratio (line 616) | fn test_bsp_custom_column_ratio() {
  function test_bsp_custom_row_ratio (line 628) | fn test_bsp_custom_row_ratio() {
  function test_bsp_horizontal_flip_no_gap_with_resize (line 640) | fn test_bsp_horizontal_flip_no_gap_with_resize() {
  function test_bsp_vertical_flip_no_gap_with_resize (line 672) | fn test_bsp_vertical_flip_no_gap_with_resize() {
  function test_bsp_horizontal_and_vertical_flip_no_gap_with_resize (line 714) | fn test_bsp_horizontal_and_vertical_flip_no_gap_with_resize() {
  function test_bsp_flip_no_gap_across_multiple_ratios (line 761) | fn test_bsp_flip_no_gap_across_multiple_ratios() {
  function test_right_main_default_ratio (line 800) | fn test_right_main_default_ratio() {
  function test_right_main_custom_ratio (line 821) | fn test_right_main_custom_ratio() {
  function test_columns_layout_with_ratios (line 848) | fn test_columns_layout_with_ratios() {
  function test_rows_layout_with_ratios (line 866) | fn test_rows_layout_with_ratios() {
  function test_grid_with_column_ratios (line 884) | fn test_grid_with_column_ratios() {
  function test_grid_without_ratios (line 899) | fn test_grid_without_ratios() {
  function test_grid_flip_horizontal_with_ratios_no_overlap (line 911) | fn test_grid_flip_horizontal_with_ratios_no_overlap() {
  function test_grid_flip_all_axes_with_ratios_no_overlap (line 976) | fn test_grid_flip_all_axes_with_ratios_no_overlap() {
  function test_grid_uneven_rows_cover_full_height (line 1024) | fn test_grid_uneven_rows_cover_full_height() {
  function test_grid_uneven_rows_cover_full_height_with_vertical_flip (line 1084) | fn test_grid_uneven_rows_cover_full_height_with_vertical_flip() {
  function test_grid_uneven_columns_cover_full_width (line 1145) | fn test_grid_uneven_columns_cover_full_width() {
  function test_grid_uneven_columns_cover_full_width_with_horizontal_flip (line 1206) | fn test_grid_uneven_columns_cover_full_width_with_horizontal_flip() {
  function test_columns_flip_horizontal (line 1267) | fn test_columns_flip_horizontal() {
  function test_rows_flip_vertical (line 1289) | fn test_rows_flip_vertical() {
  function assert_full_coverage (line 1318) | fn assert_full_coverage(layouts: &[Rect], area: &Rect, label: &str) {
  function uneven_area (line 1358) | fn uneven_area() -> Rect {
  function test_columns_flipped_cover_full_area (line 1368) | fn test_columns_flipped_cover_full_area() {
  function test_rows_flipped_cover_full_area (line 1379) | fn test_rows_flipped_cover_full_area() {
  function test_vertical_stack_flipped_cover_full_area (line 1390) | fn test_vertical_stack_flipped_cover_full_area() {
  function test_horizontal_stack_flipped_cover_full_area (line 1414) | fn test_horizontal_stack_flipped_cover_full_area() {
  function test_right_main_vertical_stack_flipped_cover_full_area (line 1438) | fn test_right_main_vertical_stack_flipped_cover_full_area() {
  function test_ultrawide_vertical_stack_flipped_cover_full_area (line 1461) | fn test_ultrawide_vertical_stack_flipped_cover_full_area() {
  function test_padding_applied_to_all_layouts (line 1489) | fn test_padding_applied_to_all_layouts() {
  function resize_3 (line 1509) | fn resize_3() -> Vec<Option<Rect>> {
  function resize_4 (line 1527) | fn resize_4() -> Vec<Option<Rect>> {
  function test_columns_flip_resize_no_gap (line 1547) | fn test_columns_flip_resize_no_gap() {
  function test_rows_flip_resize_no_gap (line 1567) | fn test_rows_flip_resize_no_gap() {
  function test_vertical_stack_flip_resize_no_gap (line 1587) | fn test_vertical_stack_flip_resize_no_gap() {
  function test_right_main_vertical_stack_flip_resize_no_gap (line 1642) | fn test_right_main_vertical_stack_flip_resize_no_gap() {
  function test_horizontal_stack_flip_resize_no_gap (line 1693) | fn test_horizontal_stack_flip_resize_no_gap() {
  function test_ultrawide_vertical_stack_flip_resize_no_gap (line 1747) | fn test_ultrawide_vertical_stack_flip_resize_no_gap() {
  function test_scrolling_resize_no_gap (line 1818) | fn test_scrolling_resize_no_gap() {

FILE: komorebi-layouts/src/custom_layout.rs
  type CustomLayout (line 16) | pub struct CustomLayout(Vec<Column>);
    method from_path (line 33) | pub fn from_path<P: AsRef<Path>>(path: P) -> eyre::Result<Self> {
    method column_with_idx (line 53) | pub fn column_with_idx(&self, idx: usize) -> (usize, Option<&Column>) {
    method primary_idx (line 60) | pub fn primary_idx(&self) -> Option<usize> {
    method primary_width_percentage (line 71) | pub fn primary_width_percentage(&self) -> Option<f32> {
    method set_primary_width_percentage (line 82) | pub fn set_primary_width_percentage(&mut self, percentage: f32) {
    method is_valid (line 91) | pub fn is_valid(&self) -> bool {
    method column_container_counts (line 127) | pub(crate) fn column_container_counts(&self) -> HashMap<usize, usize> {
    method first_container_idx (line 152) | pub fn first_container_idx(&self, col_idx: usize) -> usize {
    method column_for_container_idx (line 166) | pub fn column_for_container_idx(&self, idx: usize) -> usize {
    method column_area (line 191) | pub fn column_area(&self, work_area: &Rect, idx: usize, offset: Option...
    method column_area_with_last (line 212) | pub fn column_area_with_last(
    method main_column_area (line 235) | pub fn main_column_area(
  type Target (line 19) | type Target = Vec<Column>;
  method deref (line 21) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 27) | fn deref_mut(&mut self) -> &mut Self::Target {
  type Column (line 254) | pub enum Column {
  type ColumnWidth (line 262) | pub enum ColumnWidth {
  type ColumnSplit (line 268) | pub enum ColumnSplit {
  type ColumnSplitWithCapacity (line 275) | pub enum ColumnSplitWithCapacity {

FILE: komorebi-layouts/src/cycle_direction.rs
  type CycleDirection (line 11) | pub enum CycleDirection {
    method next_idx (line 18) | pub const fn next_idx(&self, idx: usize, len: NonZeroUsize) -> usize {

FILE: komorebi-layouts/src/default_layout.rs
  constant MAX_RATIOS (line 12) | pub const MAX_RATIOS: usize = 5;
  constant MIN_RATIO (line 15) | pub const MIN_RATIO: f32 = 0.1;
  constant MAX_RATIO (line 18) | pub const MAX_RATIO: f32 = 0.9;
  constant DEFAULT_RATIO (line 21) | pub const DEFAULT_RATIO: f32 = 0.5;
  constant DEFAULT_SECONDARY_RATIO (line 24) | pub const DEFAULT_SECONDARY_RATIO: f32 = 0.25;
  function validate_ratios (line 31) | pub fn validate_ratios(ratios: &[f32]) -> [Option<f32>; MAX_RATIOS] {
  type DefaultLayout (line 61) | pub enum DefaultLayout {
    method leftmost_index (line 254) | pub fn leftmost_index(&self, len: usize) -> usize {
    method rightmost_index (line 270) | pub fn rightmost_index(&self, len: usize) -> usize {
    method resize (line 289) | pub fn resize(
    method cycle_next (line 392) | pub const fn cycle_next(self) -> Self {
    method cycle_previous (line 407) | pub const fn cycle_previous(self) -> Self {
  function deserialize_ratios (line 163) | fn deserialize_ratios<'de, D>(
  function serialize_ratios (line 174) | fn serialize_ratios<S>(
  type LayoutOptions (line 199) | pub struct LayoutOptions {
  type ScrollingLayoutOptions (line 238) | pub struct ScrollingLayoutOptions {
  type GridLayoutOptions (line 248) | pub struct GridLayoutOptions {
  function layout_options_with_column_ratios (line 427) | fn layout_options_with_column_ratios(ratios: &[f32]) -> LayoutOptions {
  function layout_options_with_row_ratios (line 441) | fn layout_options_with_row_ratios(ratios: &[f32]) -> LayoutOptions {
  function layout_options_with_ratios (line 455) | fn layout_options_with_ratios(column_ratios: &[f32], row_ratios: &[f32])...
  function test_deserialize_valid_ratios (line 476) | fn test_deserialize_valid_ratios() {
  function test_deserialize_clamps_values_to_min (line 489) | fn test_deserialize_clamps_values_to_min() {
  function test_deserialize_clamps_values_to_max (line 499) | fn test_deserialize_clamps_values_to_max() {
  function test_deserialize_truncates_when_sum_exceeds_one (line 510) | fn test_deserialize_truncates_when_sum_exceeds_one() {
  function test_deserialize_truncates_at_max_ratios (line 524) | fn test_deserialize_truncates_at_max_ratios() {
  function test_deserialize_empty_array (line 537) | fn test_deserialize_empty_array() {
  function test_deserialize_null (line 548) | fn test_deserialize_null() {
  function test_deserialize_row_ratios (line 555) | fn test_deserialize_row_ratios() {
  function test_serialize_ratios_compact (line 570) | fn test_serialize_ratios_compact() {
  function test_serialize_none_ratios (line 579) | fn test_serialize_none_ratios() {
  function test_roundtrip_serialization (line 593) | fn test_roundtrip_serialization() {
  function test_serialize_row_ratios (line 602) | fn test_serialize_row_ratios() {
  function test_roundtrip_row_ratios (line 611) | fn test_roundtrip_row_ratios() {
  function test_roundtrip_both_ratios (line 621) | fn test_roundtrip_both_ratios() {
  function test_constants_valid_ranges (line 635) | fn test_constants_valid_ranges() {
  function test_default_ratio_is_half (line 645) | fn test_default_ratio_is_half() {
  function test_max_ratios_is_five (line 650) | fn test_max_ratios_is_five() {
  function test_layout_options_default_values (line 659) | fn test_layout_options_default_values() {
  function test_layout_options_with_all_fields (line 670) | fn test_layout_options_with_all_fields() {
  function test_cycle_next_covers_all_layouts (line 692) | fn test_cycle_next_covers_all_layouts() {
  function test_cycle_previous_is_inverse_of_next (line 715) | fn test_cycle_previous_is_inverse_of_next() {
  function test_leftmost_index_standard_layouts (line 740) | fn test_leftmost_index_standard_layouts() {
  function test_leftmost_index_ultrawide (line 750) | fn test_leftmost_index_ultrawide() {
  function test_leftmost_index_right_main (line 757) | fn test_leftmost_index_right_main() {
  function test_rightmost_index_standard_layouts (line 764) | fn test_rightmost_index_standard_layouts() {
  function test_rightmost_index_right_main (line 772) | fn test_rightmost_index_right_main() {
  function test_rightmost_index_ultrawide (line 778) | fn test_rightmost_index_ultrawide() {

FILE: komorebi-layouts/src/direction.rs
  type Direction (line 13) | pub trait Direction {
    method index_in_direction (line 14) | fn index_in_direction(
    method is_valid_direction (line 22) | fn is_valid_direction(
    method up_index (line 29) | fn up_index(
    method down_index (line 36) | fn down_index(
    method left_index (line 43) | fn left_index(
    method right_index (line 50) | fn right_index(
    method index_in_direction (line 60) | fn index_in_direction(
    method is_valid_direction (line 119) | fn is_valid_direction(
    method up_index (line 177) | fn up_index(
    method down_index (line 203) | fn down_index(
    method left_index (line 223) | fn left_index(
    method right_index (line 252) | fn right_index(
    method index_in_direction (line 409) | fn index_in_direction(
    method is_valid_direction (line 457) | fn is_valid_direction(
    method up_index (line 509) | fn up_index(
    method down_index (line 519) | fn down_index(
    method left_index (line 529) | fn left_index(
    method right_index (line 544) | fn right_index(
  type GridItem (line 275) | struct GridItem {
  type GridItemState (line 282) | enum GridItemState {
  type GridTouchingEdges (line 288) | struct GridTouchingEdges {
  function get_grid_item (line 300) | fn get_grid_item(idx: usize, count: usize, layout_options: Option<Layout...
  function is_grid_edge (line 352) | fn is_grid_edge(
  function grid_neighbor (line 371) | fn grid_neighbor(

FILE: komorebi-layouts/src/layout.rs
  type Layout (line 12) | pub enum Layout {
    method as_boxed_direction (line 20) | pub fn as_boxed_direction(&self) -> Box<dyn Direction> {
    method as_boxed_arrangement (line 29) | pub fn as_boxed_arrangement(&self) -> Box<dyn Arrangement> {

FILE: komorebi-layouts/src/operation_direction.rs
  type OperationDirection (line 14) | pub enum OperationDirection {
    method opposite (line 23) | pub const fn opposite(self) -> Self {
    method flip (line 32) | fn flip(self, layout_flip: Option<Axis>) -> Self {
    method destination (line 54) | pub fn destination(

FILE: komorebi-layouts/src/rect.rs
  type Rect (line 19) | pub struct Rect {
    method from (line 32) | fn from(rect: RECT) -> Self {
    method from (line 56) | fn from(value: CGSize) -> Self {
    method from (line 68) | fn from(value: CGRect) -> Self {
    method is_same_size_as (line 102) | pub fn is_same_size_as(&self, rhs: &Self) -> bool {
    method has_same_position_as (line 106) | pub fn has_same_position_as(&self, rhs: &Self) -> bool {
    method add_padding (line 113) | pub fn add_padding<T>(&mut self, padding: T)
    method add_margin (line 126) | pub fn add_margin(&mut self, margin: i32) {
    method left_padding (line 133) | pub fn left_padding(&mut self, padding: i32) {
    method right_padding (line 137) | pub fn right_padding(&mut self, padding: i32) {
    method contains_point (line 142) | pub const fn contains_point(&self, point: (i32, i32)) -> bool {
    method scale (line 150) | pub const fn scale(&self, system_dpi: i32, rect_dpi: i32) -> Rect {
    method rect (line 161) | pub const fn rect(&self) -> RECT {
    method percentage_within_horizontal_bounds (line 172) | pub fn percentage_within_horizontal_bounds(&self, other: &Rect) -> f64 {
  method from (line 44) | fn from(rect: Rect) -> Self {
  method from (line 80) | fn from(value: &Rect) -> Self {
  method from (line 96) | fn from(value: Rect) -> Self {

FILE: komorebi-layouts/src/sizing.rs
  type Sizing (line 10) | pub enum Sizing {
    method adjust_by (line 19) | pub const fn adjust_by(&self, value: i32, adjustment: i32) -> i32 {

FILE: komorebi-shortcuts/src/main.rs
  type Quicklook (line 6) | struct Quicklook {
    method new (line 12) | fn new(_cc: &eframe::CreationContext<'_>) -> Self {
    method update (line 45) | fn update(&mut self, ctx: &eframe::egui::Context, _frame: &mut eframe:...
  function main (line 81) | fn main() {

FILE: komorebi-themes/src/colour.rs
  type Colour (line 15) | pub enum Colour {
    method from (line 23) | fn from(value: Rgb) -> Self {
    method from (line 29) | fn from(value: u32) -> Self {
    method from (line 35) | fn from(value: Color32) -> Self {
  method from (line 45) | fn from(value: Colour) -> Self {
  type Hex (line 58) | pub struct Hex(pub HexColor);
    method schema_name (line 62) | fn schema_name() -> std::borrow::Cow<'static, str> {
    method json_schema (line 66) | fn json_schema(_: &mut SchemaGenerator) -> Schema {
  function from (line 76) | fn from(value: Colour) -> Self {
  type Rgb (line 87) | pub struct Rgb {
    method new (line 97) | pub const fn new(r: u32, g: u32, b: u32) -> Self {
    method from (line 103) | fn from(value: Hex) -> Self {
    method from (line 109) | fn from(value: HexColor) -> Self {
    method from (line 125) | fn from(value: u32) -> Self {
  function from (line 119) | fn from(value: Rgb) -> Self {

FILE: komorebi-themes/src/generator.rs
  type ThemeVariant (line 16) | pub enum ThemeVariant {
  method fmt (line 25) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  function from (line 34) | fn from(value: ThemeVariant) -> Self {
  function generate_base16_palette (line 42) | pub fn generate_base16_palette(
  type Error (line 53) | type Error = hex_color::ParseHexColorError;
  method try_from (line 55) | fn try_from(value: &VecDeque<String>) -> Result<Self, Self::Error> {

FILE: komorebi-themes/src/lib.rs
  type Theme (line 32) | pub enum Theme {
    method variant_names (line 197) | pub fn variant_names(&self) -> Vec<String> {
  type Base16ColourPalette (line 52) | pub struct Base16ColourPalette {
    method background (line 88) | pub fn background(self) -> Color32 {
    method style (line 91) | pub fn style(self) -> Style {
  type Base16Value (line 221) | pub enum Base16Value {
    method color32 (line 266) | pub fn color32(&self, theme: Base16Wrapper) -> Color32 {
  type Base16Wrapper (line 258) | pub enum Base16Wrapper {
  type Catppuccin (line 310) | pub enum Catppuccin {
    method as_theme (line 322) | pub fn as_theme(self) -> catppuccin_egui::Theme {
  function from (line 328) | fn from(val: Catppuccin) -> Self {
  type CatppuccinValue (line 340) | pub enum CatppuccinValue {
    method color32 (line 401) | pub fn color32(&self, theme: catppuccin_egui::Theme) -> Color32 {
  function color32_compat (line 396) | pub fn color32_compat(rgba: [u8; 4]) -> Color32 {
  type KomorebiThemeCatppuccin (line 436) | pub struct KomorebiThemeCatppuccin {
  type KomorebiThemeBase16 (line 487) | pub struct KomorebiThemeBase16 {
  type KomorebiThemeCustom (line 538) | pub struct KomorebiThemeCustom {
  type KomorebiTheme (line 590) | pub enum KomorebiTheme {
  type KomobarThemeCatppuccin (line 605) | pub struct KomobarThemeCatppuccin {
  type KomobarThemeBase16 (line 623) | pub struct KomobarThemeBase16 {
  type KomobarThemeCustom (line 641) | pub struct KomobarThemeCustom {
  type KomobarTheme (line 660) | pub enum KomobarTheme {
    method from (line 673) | fn from(value: KomorebiTheme) -> Self {

FILE: komorebi/build.rs
  function main (line 3) | fn main() {

FILE: komorebi/src/animation/animation_manager.rs
  type AnimationState (line 7) | struct AnimationState {
  type AnimationManager (line 14) | pub struct AnimationManager {
    method new (line 25) | pub fn new() -> Self {
    method is_cancelled (line 31) | pub fn is_cancelled(&self, animation_key: &str) -> bool {
    method in_progress (line 39) | pub fn in_progress(&self, animation_key: &str) -> bool {
    method init_cancel (line 47) | pub fn init_cancel(&mut self, animation_key: &str) -> usize {
    method latest_cancel_idx (line 59) | pub fn latest_cancel_idx(&mut self, animation_key: &str) -> usize {
    method end_cancel (line 67) | pub fn end_cancel(&mut self, animation_key: &str) {
    method cancel (line 73) | pub fn cancel(&mut self, animation_key: &str) {
    method start (line 79) | pub fn start(&mut self, animation_key: &str) {
    method end (line 95) | pub fn end(&mut self, animation_key: &str) {
    method count_in_progress (line 105) | pub fn count_in_progress(&self, animation_key_prefix: AnimationPrefix)...
    method count (line 112) | pub fn count(&self) -> usize {
  method default (line 19) | fn default() -> Self {

FILE: komorebi/src/animation/engine.rs
  type AnimationEngine (line 16) | pub struct AnimationEngine;
    method wait_for_all_animations (line 19) | pub fn wait_for_all_animations() {
    method cancel (line 35) | pub fn cancel(animation_key: &str) -> bool {
    method animate (line 57) | pub fn animate(

FILE: komorebi/src/animation/lerp.rs
  type Lerp (line 6) | pub trait Lerp<T = Self> {
    method lerp (line 7) | fn lerp(self, end: T, time: f64, style: AnimationStyle) -> T;
    method lerp (line 12) | fn lerp(self, end: i32, time: f64, style: AnimationStyle) -> i32 {
    method lerp (line 20) | fn lerp(self, end: f64, time: f64, style: AnimationStyle) -> f64 {
    method lerp (line 28) | fn lerp(self, end: u8, time: f64, style: AnimationStyle) -> u8 {
    method lerp (line 34) | fn lerp(self, end: Rect, time: f64, style: AnimationStyle) -> Rect {

FILE: komorebi/src/animation/mod.rs
  type PerAnimationPrefixConfig (line 51) | pub enum PerAnimationPrefixConfig<T> {
  constant DEFAULT_ANIMATION_ENABLED (line 58) | pub const DEFAULT_ANIMATION_ENABLED: bool = false;
  constant DEFAULT_ANIMATION_STYLE (line 59) | pub const DEFAULT_ANIMATION_STYLE: AnimationStyle = AnimationStyle::Linear;
  constant DEFAULT_ANIMATION_DURATION (line 60) | pub const DEFAULT_ANIMATION_DURATION: u64 = 250;
  constant DEFAULT_ANIMATION_FPS (line 61) | pub const DEFAULT_ANIMATION_FPS: u64 = 60;

FILE: komorebi/src/animation/prefix.rs
  type AnimationPrefix (line 14) | pub enum AnimationPrefix {
  function new_animation_key (line 19) | pub fn new_animation_key(prefix: AnimationPrefix, key: String) -> String {

FILE: komorebi/src/animation/render_dispatcher.rs
  type RenderDispatcher (line 3) | pub trait RenderDispatcher {
    method get_animation_key (line 4) | fn get_animation_key(&self) -> String;
    method pre_render (line 5) | fn pre_render(&self) -> eyre::Result<()>;
    method render (line 6) | fn render(&self, delta: f64) -> eyre::Result<()>;
    method post_render (line 7) | fn post_render(&self) -> eyre::Result<()>;

FILE: komorebi/src/animation/style.rs
  type Ease (line 5) | pub trait Ease {
    method evaluate (line 6) | fn evaluate(t: f64) -> f64;
    method evaluate (line 12) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 20) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 28) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 36) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 44) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 52) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 60) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 72) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 80) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 88) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 100) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 108) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 116) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 128) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 136) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 144) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 156) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 168) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 180) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 196) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 204) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 212) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 229) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 240) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 251) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 269) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 283) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 299) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 318) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 326) | fn evaluate(t: f64) -> f64 {
    method evaluate (line 349) | fn evaluate(t: f64) -> f64 {
  type Linear (line 9) | pub struct Linear;
  type EaseInSine (line 17) | pub struct EaseInSine;
  type EaseOutSine (line 25) | pub struct EaseOutSine;
  type EaseInOutSine (line 33) | pub struct EaseInOutSine;
  type EaseInQuad (line 41) | pub struct EaseInQuad;
  type EaseOutQuad (line 49) | pub struct EaseOutQuad;
  type EaseInOutQuad (line 57) | pub struct EaseInOutQuad;
  type EaseInCubic (line 69) | pub struct EaseInCubic;
  type EaseOutCubic (line 77) | pub struct EaseOutCubic;
  type EaseInOutCubic (line 85) | pub struct EaseInOutCubic;
  type EaseInQuart (line 97) | pub struct EaseInQuart;
  type EaseOutQuart (line 105) | pub struct EaseOutQuart;
  type EaseInOutQuart (line 113) | pub struct EaseInOutQuart;
  type EaseInQuint (line 125) | pub struct EaseInQuint;
  type EaseOutQuint (line 133) | pub struct EaseOutQuint;
  type EaseInOutQuint (line 141) | pub struct EaseInOutQuint;
  type EaseInExpo (line 153) | pub struct EaseInExpo;
  type EaseOutExpo (line 165) | pub struct EaseOutExpo;
  type EaseInOutExpo (line 177) | pub struct EaseInOutExpo;
  type EaseInCirc (line 193) | pub struct EaseInCirc;
  type EaseOutCirc (line 201) | pub struct EaseOutCirc;
  type EaseInOutCirc (line 209) | pub struct EaseInOutCirc;
  type EaseInBack (line 226) | pub struct EaseInBack;
  type EaseOutBack (line 237) | pub struct EaseOutBack;
  type EaseInOutBack (line 248) | pub struct EaseInOutBack;
  type EaseInElastic (line 266) | pub struct EaseInElastic;
  type EaseOutElastic (line 280) | pub struct EaseOutElastic;
  type EaseInOutElastic (line 296) | pub struct EaseInOutElastic;
  type EaseInBounce (line 315) | pub struct EaseInBounce;
  type EaseOutBounce (line 323) | pub struct EaseOutBounce;
  type EaseInOutBounce (line 346) | pub struct EaseInOutBounce;
  type CubicBezier (line 358) | pub struct CubicBezier {
    method x (line 366) | fn x(&self, s: f64) -> f64 {
    method y (line 370) | fn y(&self, s: f64) -> f64 {
    method dx_ds (line 374) | fn dx_ds(&self, s: f64) -> f64 {
    method find_s (line 380) | fn find_s(&self, t: f64) -> f64 {
    method evaluate (line 407) | fn evaluate(&self, t: f64) -> f64 {
  function apply_ease_func (line 413) | pub fn apply_ease_func(t: f64, style: AnimationStyle) -> f64 {

FILE: komorebi/src/border_manager/border.rs
  type RenderFactory (line 75) | pub struct RenderFactory(ID2D1Factory);
  type Target (line 80) | type Target = ID2D1Factory;
  method deref (line 82) | fn deref(&self) -> &Self::Target {
  function border_hwnds (line 103) | pub extern "system" fn border_hwnds(hwnd: HWND, lparam: LPARAM) -> BOOL {
  type Border (line 117) | pub struct Border {
    method from (line 135) | fn from(value: isize) -> Self {
    method hwnd (line 156) | pub const fn hwnd(&self) -> HWND {
    method create (line 160) | pub fn create(
    method update_brushes (line 254) | pub fn update_brushes(&mut self) -> color_eyre::Result<()> {
    method destroy (line 320) | pub fn destroy(&self) -> color_eyre::Result<()> {
    method set_position (line 335) | pub fn set_position(&self, rect: &Rect, reference_hwnd: isize) -> colo...
    method invalidate (line 346) | pub fn invalidate(&self) {
    method callback (line 350) | pub extern "system" fn callback(

FILE: komorebi/src/border_manager/mod.rs
  type RenderTarget (line 66) | pub struct RenderTarget(pub ID2D1HwndRenderTarget);
  type Target (line 70) | type Target = ID2D1HwndRenderTarget;
  method deref (line 72) | fn deref(&self) -> &Self::Target {
  type Notification (line 77) | pub enum Notification {
  type BorderInfo (line 83) | pub struct BorderInfo {
    method hwnd (line 89) | pub fn hwnd(&self) -> HWND {
  function channel (line 96) | pub fn channel() -> &'static (Sender<Notification>, Receiver<Notificatio...
  function event_tx (line 100) | fn event_tx() -> Sender<Notification> {
  function event_rx (line 104) | fn event_rx() -> Receiver<Notification> {
  function window_border (line 108) | pub fn window_border(hwnd: isize) -> Option<BorderInfo> {
  function send_notification (line 116) | pub fn send_notification(hwnd: Option<isize>) {
  function send_force_update (line 122) | pub fn send_force_update() {
  function destroy_all_borders (line 128) | pub fn destroy_all_borders() -> color_eyre::Result<()> {
  function window_kind_colour (line 161) | fn window_kind_colour(focus_kind: WindowKind) -> u32 {
  function listen_for_notifications (line 172) | pub fn listen_for_notifications(wm: Arc<Mutex<WindowManager>>) {
  function handle_notifications (line 187) | pub fn handle_notifications(wm: Arc<Mutex<WindowManager>>) -> color_eyre...
  function handle_floating_borders (line 653) | fn handle_floating_borders(
  function remove_borders (line 719) | fn remove_borders(
  function remove_border (line 747) | fn remove_border(
  function destroy_border (line 767) | fn destroy_border(border: Box<Border>) -> color_eyre::Result<()> {
  function delete_border (line 777) | pub fn delete_border(tracking_hwnd: isize) {
  function show_border (line 797) | pub fn show_border(tracking_hwnd: isize) {
  function hide_border (line 807) | pub fn hide_border(tracking_hwnd: isize) {
  type ZOrder (line 818) | pub enum ZOrder {
  function from (line 841) | fn from(val: ZOrder) -> Self {

FILE: komorebi/src/com/interfaces.rs
  type DesktopID (line 22) | type DesktopID = GUID;
  type ComIn (line 26) | pub struct ComIn<'a, T> {
  function new (line 32) | pub fn new(t: &'a T) -> Self {
  function unsafe_new_no_clone (line 39) | pub const unsafe fn unsafe_new_no_clone(t: T) -> Self {
  type Target (line 48) | type Target = T;
  method deref (line 49) | fn deref(&self) -> &Self::Target {
  constant CLSID_ImmersiveShell (line 55) | pub const CLSID_ImmersiveShell: GUID = GUID {
  type DWORD (line 63) | type DWORD = u32;
  type INT (line 65) | type INT = i32;
  type LPVOID (line 67) | type LPVOID = *mut c_void;
  type UINT (line 69) | type UINT = u32;
  type ULONG (line 71) | type ULONG = u32;
  type ULONGLONG (line 73) | type ULONGLONG = u64;
  type IAsyncCallback (line 75) | type IAsyncCallback = UINT;
  type IImmersiveMonitor (line 76) | type IImmersiveMonitor = UINT;
  type IApplicationViewOperation (line 77) | type IApplicationViewOperation = UINT;
  type IApplicationViewPosition (line 78) | type IApplicationViewPosition = UINT;
  type IImmersiveApplication (line 79) | type IImmersiveApplication = UINT;
  type IApplicationViewChangeListener (line 80) | type IApplicationViewChangeListener = UINT;
  type APPLICATION_VIEW_COMPATIBILITY_POLICY (line 83) | type APPLICATION_VIEW_COMPATIBILITY_POLICY = UINT;
  type APPLICATION_VIEW_CLOAK_TYPE (line 85) | type APPLICATION_VIEW_CLOAK_TYPE = UINT;
  type IServiceProvider (line 88) | pub unsafe trait IServiceProvider: IUnknown {
    method query_service (line 89) | pub unsafe fn query_service(
  type IApplicationView (line 98) | pub unsafe trait IApplicationView: IUnknown {
    method get_iids (line 100) | pub unsafe fn get_iids(
    method get_runtime_class_name (line 105) | pub unsafe fn get_runtime_class_name(&self, out_opt_class_name: *mut H...
    method get_trust_level (line 106) | pub unsafe fn get_trust_level(&self, ptr_trust_level: LPVOID) -> HRESULT;
    method set_focus (line 109) | pub unsafe fn set_focus(&self) -> HRESULT;
    method switch_to (line 110) | pub unsafe fn switch_to(&self) -> HRESULT;
    method try_invoke_back (line 112) | pub unsafe fn try_invoke_back(&self, ptr_async_callback: IAsyncCallbac...
    method get_thumbnail_window (line 113) | pub unsafe fn get_thumbnail_window(&self, out_hwnd: *mut HWND) -> HRES...
    method get_monitor (line 114) | pub unsafe fn get_monitor(&self, out_monitors: *mut *mut IImmersiveMon...
    method get_visibility (line 115) | pub unsafe fn get_visibility(&self, out_int: LPVOID) -> HRESULT;
    method set_cloak (line 116) | pub unsafe fn set_cloak(
    method get_position (line 121) | pub unsafe fn get_position(
    method set_position (line 126) | pub unsafe fn set_position(&self, view_position: *mut IApplicationView...
    method insert_after_window (line 127) | pub unsafe fn insert_after_window(&self, window: HWND) -> HRESULT;
    method get_extended_frame_position (line 128) | pub unsafe fn get_extended_frame_position(&self, rect: *mut RECT) -> H...
    method get_app_user_model_id (line 129) | pub unsafe fn get_app_user_model_id(&self, id: *mut PWSTR) -> HRESULT;
    method set_app_user_model_id (line 130) | pub unsafe fn set_app_user_model_id(&self, id: PCWSTR) -> HRESULT;
    method is_equal_by_app_user_model_id (line 131) | pub unsafe fn is_equal_by_app_user_model_id(&self, id: PCWSTR, out_res...
    method get_view_state (line 135) | pub unsafe fn get_view_state(&self, out_state: *mut UINT) -> HRESULT;
    method set_view_state (line 136) | pub unsafe fn set_view_state(&self, state: UINT) -> HRESULT;
    method get_neediness (line 137) | pub unsafe fn get_neediness(&self, out_neediness: *mut INT) -> HRESULT;
    method get_last_activation_timestamp (line 138) | pub unsafe fn get_last_activation_timestamp(&self, out_timestamp: *mut...
    method set_last_activation_timestamp (line 139) | pub unsafe fn set_last_activation_timestamp(&self, timestamp: ULONGLON...
    method get_virtual_desktop_id (line 140) | pub unsafe fn get_virtual_desktop_id(&self, out_desktop_guid: *mut Des...
    method set_virtual_desktop_id (line 141) | pub unsafe fn set_virtual_desktop_id(&self, desktop_guid: *const Deskt...
    method get_show_in_switchers (line 142) | pub unsafe fn get_show_in_switchers(&self, out_show: *mut INT) -> HRES...
    method set_show_in_switchers (line 143) | pub unsafe fn set_show_in_switchers(&self, show: INT) -> HRESULT;
    method get_scale_factor (line 144) | pub unsafe fn get_scale_factor(&self, out_scale_factor: *mut INT) -> H...
    method can_receive_input (line 145) | pub unsafe fn can_receive_input(&self, out_can: *mut BOOL) -> HRESULT;
    method get_compatibility_policy_type (line 146) | pub unsafe fn get_compatibility_policy_type(
    method set_compatibility_policy_type (line 150) | pub unsafe fn set_compatibility_policy_type(
    method get_size_constraints (line 155) | pub unsafe fn get_size_constraints(
    method get_size_constraints_for_dpi (line 161) | pub unsafe fn get_size_constraints_for_dpi(
    method set_size_constraints_for_dpi (line 167) | pub unsafe fn set_size_constraints_for_dpi(
    method on_min_size_preferences_updated (line 174) | pub unsafe fn on_min_size_preferences_updated(&self, window: HWND) -> ...
    method apply_operation (line 175) | pub unsafe fn apply_operation(&self, operation: *mut IApplicationViewO...
    method is_tray (line 176) | pub unsafe fn is_tray(&self, out_is: *mut BOOL) -> HRESULT;
    method is_in_high_zorder_band (line 177) | pub unsafe fn is_in_high_zorder_band(&self, out_is: *mut BOOL) -> HRES...
    method is_splash_screen_presented (line 178) | pub unsafe fn is_splash_screen_presented(&self, out_is: *mut BOOL) -> ...
    method flash (line 179) | pub unsafe fn flash(&self) -> HRESULT;
    method get_root_switchable_owner (line 180) | pub unsafe fn get_root_switchable_owner(&self, app_view: *mut IApplica...
    method enumerate_ownership_tree (line 181) | pub unsafe fn enumerate_ownership_tree(&self, objects: *mut IObjectArr...
    method get_enterprise_id (line 183) | pub unsafe fn get_enterprise_id(&self, out_id: *mut PWSTR) -> HRESULT;
    method is_mirrored (line 184) | pub unsafe fn is_mirrored(&self, out_is: *mut BOOL) -> HRESULT;
    method unknown1 (line 186) | pub unsafe fn unknown1(&self, arg: *mut INT) -> HRESULT;
    method unknown2 (line 187) | pub unsafe fn unknown2(&self, arg: *mut INT) -> HRESULT;
    method unknown3 (line 188) | pub unsafe fn unknown3(&self, arg: *mut INT) -> HRESULT;
    method unknown4 (line 189) | pub unsafe fn unknown4(&self, arg: INT) -> HRESULT;
    method unknown5 (line 190) | pub unsafe fn unknown5(&self, arg: *mut INT) -> HRESULT;
    method unknown6 (line 191) | pub unsafe fn unknown6(&self, arg: INT) -> HRESULT;
    method unknown7 (line 192) | pub unsafe fn unknown7(&self) -> HRESULT;
    method unknown8 (line 193) | pub unsafe fn unknown8(&self, arg: *mut INT) -> HRESULT;
    method unknown9 (line 194) | pub unsafe fn unknown9(&self, arg: INT) -> HRESULT;
    method unknown10 (line 195) | pub unsafe fn unknown10(&self, arg: INT, arg2: INT) -> HRESULT;
    method unknown11 (line 196) | pub unsafe fn unknown11(&self, arg: INT) -> HRESULT;
    method unknown12 (line 197) | pub unsafe fn unknown12(&self, arg: *mut SIZE) -> HRESULT;
  type IApplicationViewCollection (line 201) | pub unsafe trait IApplicationViewCollection: IUnknown {
    method get_views (line 202) | pub unsafe fn get_views(&self, out_views: *mut IObjectArray) -> HRESULT;
    method get_views_by_zorder (line 204) | pub unsafe fn get_views_by_zorder(&self, out_views: *mut IObjectArray)...
    method get_views_by_app_user_model_id (line 206) | pub unsafe fn get_views_by_app_user_model_id(
    method get_view_for_hwnd (line 212) | pub unsafe fn get_view_for_hwnd(
    method get_view_for_application (line 218) | pub unsafe fn get_view_for_application(
    method get_view_for_app_user_model_id (line 224) | pub unsafe fn get_view_for_app_user_model_id(
    method get_view_in_focus (line 230) | pub unsafe fn get_view_in_focus(&self, out_view: *mut IApplicationView...
    method try_get_last_active_visible_view (line 232) | pub unsafe fn try_get_last_active_visible_view(
    method refresh_collection (line 237) | pub unsafe fn refresh_collection(&self) -> HRESULT;
    method register_for_application_view_changes (line 239) | pub unsafe fn register_for_application_view_changes(
    method unregister_for_application_view_changes (line 245) | pub unsafe fn unregister_for_application_view_changes(&self, id: DWORD...

FILE: komorebi/src/com/mod.rs
  type ComInit (line 21) | struct ComInit();
    method new (line 24) | pub fn new() -> Self {
  method drop (line 33) | fn drop(&mut self) {
  function get_iservice_provider (line 44) | fn get_iservice_provider() -> IServiceProvider {
  function get_iapplication_view_collection (line 48) | fn get_iapplication_view_collection(provider: &IServiceProvider) -> IApp...
  function SetCloak (line 68) | pub extern "C" fn SetCloak(hwnd: HWND, cloak_type: u32, flags: i32) {

FILE: komorebi/src/container.rs
  type Container (line 13) | pub struct Container {
    method preselect (line 44) | pub fn preselect() -> Self {
    method is_preselect (line 52) | pub fn is_preselect(&self) -> bool {
    method hide (line 56) | pub fn hide(&self, omit: Option<isize>) {
    method restore (line 73) | pub fn restore(&self) {
    method load_focused_window (line 82) | pub fn load_focused_window(&mut self) {
    method hwnd_from_exe (line 94) | pub fn hwnd_from_exe(&self, exe: &str) -> Option<isize> {
    method idx_from_exe (line 106) | pub fn idx_from_exe(&self, exe: &str) -> Option<usize> {
    method contains_window (line 118) | pub fn contains_window(&self, hwnd: isize) -> bool {
    method idx_for_window (line 128) | pub fn idx_for_window(&self, hwnd: isize) -> Option<usize> {
    method remove_window_by_idx (line 138) | pub fn remove_window_by_idx(&mut self, idx: usize) -> Option<Window> {
    method remove_focused_window (line 144) | pub fn remove_focused_window(&mut self) -> Option<Window> {
    method add_window (line 149) | pub fn add_window(&mut self, window: Window) {
    method focus_window (line 162) | pub fn focus_window(&mut self, idx: usize) {
  method default (line 23) | fn default() -> Self {
  method locked (line 33) | fn locked(&self) -> bool {
  method set_locked (line 37) | fn set_locked(&mut self, locked: bool) -> &mut Self {
  function test_contains_window (line 174) | fn test_contains_window() {
  function test_remove_window_by_idx (line 191) | fn test_remove_window_by_idx() {
  function test_remove_focused_window (line 209) | fn test_remove_focused_window() {
  function test_add_window (line 230) | fn test_add_window() {
  function test_focus_window (line 241) | fn test_focus_window() {
  function test_idx_for_window (line 265) | fn test_idx_for_window() {
  function deserializes_with_missing_locked_field_defaults_to_false (line 280) | fn deserializes_with_missing_locked_field_defaults_to_false() {
  function serializes_and_deserializes (line 303) | fn serializes_and_deserializes() {

FILE: komorebi/src/core/animation.rs
  type AnimationStyle (line 12) | pub enum AnimationStyle {
    method deserialize (line 83) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
  method serialize (line 136) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>

FILE: komorebi/src/core/asc.rs
  type ApplicationSpecificConfiguration (line 14) | pub struct ApplicationSpecificConfiguration(pub BTreeMap<String, AscAppl...
    method load (line 39) | pub fn load(pathbuf: &PathBuf) -> eyre::Result<Self> {
    method format (line 44) | pub fn format(pathbuf: &PathBuf) -> eyre::Result<String> {
    method from (line 80) | fn from(value: Vec<ApplicationConfiguration>) -> Self {
  type AscApplicationRulesOrSchema (line 19) | pub enum AscApplicationRulesOrSchema {
  type Target (line 25) | type Target = BTreeMap<String, AscApplicationRulesOrSchema>;
  method deref (line 27) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 33) | fn deref_mut(&mut self) -> &mut Self::Target {
  type AscApplicationRules (line 52) | pub struct AscApplicationRules {

FILE: komorebi/src/core/config_generation.rs
  type ApplicationOptions (line 14) | pub enum ApplicationOptions {
    method raw_cfgen (line 24) | pub fn raw_cfgen(&self, kind: &ApplicationIdentifier, id: &str) -> Str...
    method cfgen (line 45) | pub fn cfgen(&self, kind: &ApplicationIdentifier, id: &str) -> String {
  type MatchingRule (line 57) | pub enum MatchingRule {
  type WorkspaceMatchingRule (line 67) | pub struct WorkspaceMatchingRule {
  type IdWithIdentifier (line 81) | pub struct IdWithIdentifier {
    method from (line 129) | fn from(value: IdWithIdentifierAndComment) -> Self {
  type MatchingStrategy (line 94) | pub enum MatchingStrategy {
  type IdWithIdentifierAndComment (line 119) | pub struct IdWithIdentifierAndComment {
  type ApplicationConfiguration (line 140) | pub struct ApplicationConfiguration {
    method populate_default_matching_strategies (line 151) | pub fn populate_default_matching_strategies(&mut self) {
  type ApplicationConfigurationGenerator (line 165) | pub struct ApplicationConfigurationGenerator;
    method load (line 168) | pub fn load(content: &str) -> eyre::Result<Vec<ApplicationConfiguratio...
    method format (line 172) | pub fn format(content: &str) -> eyre::Result<String> {
    method merge (line 182) | fn merge(
    method generate_pwsh (line 208) | pub fn generate_pwsh(
    method generate_ahk (line 262) | pub fn generate_ahk(

FILE: komorebi/src/core/mod.rs
  type SocketMessage (line 61) | pub enum SocketMessage {
    method as_bytes (line 262) | pub fn as_bytes(&self) -> eyre::Result<Vec<u8>> {
  type Err (line 268) | type Err = serde_json::Error;
  method from_str (line 270) | fn from_str(s: &str) -> eyre::Result<Self, Self::Err> {
  type SubscribeOptions (line 277) | pub struct SubscribeOptions {
  type StackbarMode (line 285) | pub enum StackbarMode {
  type StackbarLabel (line 297) | pub enum StackbarLabel {
  type BorderStyle (line 310) | pub enum BorderStyle {
  type BorderImplementation (line 325) | pub enum BorderImplementation {
  type WindowKind (line 349) | pub enum WindowKind {
  type StateQuery (line 367) | pub enum StateQuery {
  type ApplicationIdentifier (line 383) | pub enum ApplicationIdentifier {
  type FocusFollowsMouseImplementation (line 401) | pub enum FocusFollowsMouseImplementation {
  type WindowManagementBehaviour (line 411) | pub struct WindowManagementBehaviour {
  type WindowContainerBehaviour (line 440) | pub enum WindowContainerBehaviour {
  type FloatingLayerBehaviour (line 453) | pub enum FloatingLayerBehaviour {
    method should_float (line 477) | pub fn should_float(&self) -> bool {
  type Placement (line 466) | pub enum Placement {
    method should_center (line 486) | pub fn should_center(&self) -> bool {
    method should_resize (line 493) | pub fn should_resize(&self) -> bool {
  type MoveBehaviour (line 506) | pub enum MoveBehaviour {
  type CrossBoundaryBehaviour (line 521) | pub enum CrossBoundaryBehaviour {
  type HidingBehaviour (line 532) | pub enum HidingBehaviour {
  type OperationBehaviour (line 547) | pub enum OperationBehaviour {
  type WindowHandlingBehaviour (line 560) | pub enum WindowHandlingBehaviour {
  function deserializes (line 573) | fn deserializes() {

FILE: komorebi/src/core/pathext.rs
  type PathExt (line 11) | pub trait PathExt {
    method replace_env (line 18) | fn replace_env(&self) -> PathBuf;
    method replace_env (line 23) | fn replace_env(&self) -> PathBuf {
  function replace_env_in_path (line 82) | pub fn replace_env_in_path(input: &str) -> Result<PathBuf, std::convert:...
  type ResolvedPathBuf (line 89) | pub struct ResolvedPathBuf(PathBuf);
    method new (line 93) | pub fn new(path: PathBuf) -> Self {
    method serialize_as (line 105) | fn serialize_as<S>(path: &PathBuf, serializer: S) -> Result<S::Ok, S::...
    method deserialize_as (line 114) | fn deserialize_as<D>(deserializer: D) -> Result<PathBuf, D::Error>
    method schema_name (line 125) | fn schema_name() -> std::borrow::Cow<'static, str> {
    method json_schema (line 129) | fn json_schema(_generator: &mut schemars::SchemaGenerator) -> schemars...
  method from (line 99) | fn from(path: ResolvedPathBuf) -> Self {
  function resolve_option_hashmap_usize_path (line 143) | pub fn resolve_option_hashmap_usize_path<'de, D>(
  function expected (line 158) | fn expected<P: AsRef<Path>>(p: P) -> PathBuf {
  function resolve (line 163) | fn resolve<P: AsRef<Path>>(p: P) -> PathBuf {
  function resolves_env_vars (line 168) | fn resolves_env_vars() {

FILE: komorebi/src/focus_manager.rs
  type Notification (line 13) | pub struct Notification(isize);
  type Target (line 16) | type Target = isize;
  method deref (line 18) | fn deref(&self) -> &Self::Target {
  function channel (line 25) | pub fn channel() -> &'static (Sender<Notification>, Receiver<Notificatio...
  function event_tx (line 29) | fn event_tx() -> Sender<Notification> {
  function event_rx (line 33) | fn event_rx() -> Receiver<Notification> {
  function send_notification (line 40) | pub fn send_notification(hwnd: isize) {
  function listen_for_notifications (line 46) | pub fn listen_for_notifications(wm: Arc<Mutex<WindowManager>>) {
  function handle_notifications (line 61) | pub fn handle_notifications(wm: Arc<Mutex<WindowManager>>) -> color_eyre...

FILE: komorebi/src/lib.rs
  constant PUBLIC_KEY (line 261) | pub const PUBLIC_KEY: [u8; 32] = [
  type License (line 267) | pub struct License {
  type Lockable (line 277) | pub trait Lockable {
    method locked (line 279) | fn locked(&self) -> bool;
    method set_locked (line 281) | fn set_locked(&mut self, locked: bool) -> &mut Self;
  function current_virtual_desktop (line 285) | pub fn current_virtual_desktop() -> Option<Vec<u8>> {
  type NotificationEvent (line 331) | pub enum NotificationEvent {
  type VirtualDesktopNotification (line 340) | pub enum VirtualDesktopNotification {
  type Notification (line 347) | pub struct Notification {
  function notify_subscribers (line 352) | pub fn notify_subscribers(
  function load_configuration (line 436) | pub fn load_configuration() -> eyre::Result<()> {

FILE: komorebi/src/lockable_sequence.rs
  type LockableSequence (line 7) | pub trait LockableSequence<T: Lockable> {
    method insert_respecting_locks (line 9) | fn insert_respecting_locks(&mut self, idx: usize, value: T) -> usize;
    method remove_respecting_locks (line 11) | fn remove_respecting_locks(&mut self, idx: usize) -> Option<T>;
    method swap_respecting_locks (line 13) | fn swap_respecting_locks(&mut self, i: usize, j: usize);
  function insert_respecting_locks (line 21) | fn insert_respecting_locks(&mut self, mut idx: usize, value: T) -> usize {
  function remove_respecting_locks (line 52) | fn remove_respecting_locks(&mut self, idx: usize) -> Option<T> {
  function swap_respecting_locks (line 84) | fn swap_respecting_locks(&mut self, i: usize, j: usize) {
  type TestItem (line 98) | struct TestItem {
  method locked (line 104) | fn locked(&self) -> bool {
  method set_locked (line 108) | fn set_locked(&mut self, locked: bool) -> &mut Self {
  function vals (line 114) | fn vals(v: &VecDeque<TestItem>) -> Vec<i32> {
  function test_deque (line 118) | fn test_deque(items: &[(i32, bool)]) -> VecDeque<TestItem> {
  function test_insert_respecting_locks (line 127) | fn test_insert_respecting_locks() {
  function test_remove_respecting_locks (line 240) | fn test_remove_respecting_locks() {
  function test_swap_respecting_locks_various_cases (line 329) | fn test_swap_respecting_locks_various_cases() {

FILE: komorebi/src/main.rs
  function setup (line 61) | fn setup(log_level: LogLevel) -> eyre::Result<(WorkerGuard, WorkerGuard)> {
  function detect_deadlocks (line 139) | fn detect_deadlocks() {
  type LogLevel (line 164) | enum LogLevel {
  type Opts (line 175) | struct Opts {
  function main (line 199) | fn main() -> eyre::Result<()> {

FILE: komorebi/src/monitor.rs
  type Monitor (line 32) | pub struct Monitor {
    method new (line 112) | pub fn new(
    method placeholder (line 132) | pub fn placeholder() -> Self {
    method focused_workspace_name (line 154) | pub fn focused_workspace_name(&self) -> Option<String> {
    method focused_workspace_layout (line 160) | pub fn focused_workspace_layout(&self) -> Option<Layout> {
    method load_focused_workspace (line 170) | pub fn load_focused_workspace(&mut self, mouse_follows_focus: bool) ->...
    method update_workspaces_globals (line 186) | pub fn update_workspaces_globals(&mut self, offset: Option<Rect>) {
    method update_workspace_globals (line 225) | pub fn update_workspace_globals(&mut self, workspace_idx: usize, offse...
    method add_container (line 263) | pub fn add_container(
    method add_container_with_direction (line 286) | pub fn add_container_with_direction(
    method remove_workspace_by_idx (line 362) | pub fn remove_workspace_by_idx(&mut self, idx: usize) -> Option<Worksp...
    method ensure_workspace_count (line 376) | pub fn ensure_workspace_count(&mut self, ensure_count: usize) {
    method remove_workspaces (line 383) | pub fn remove_workspaces(&mut self) -> VecDeque<Workspace> {
    method move_container_to_workspace (line 388) | pub fn move_container_to_workspace(
    method focus_workspace (line 472) | pub fn focus_workspace(&mut self, idx: usize) -> eyre::Result<()> {
    method new_workspace_idx (line 499) | pub fn new_workspace_idx(&self) -> usize {
    method update_focused_workspace (line 503) | pub fn update_focused_workspace(&mut self, offset: Option<Rect>) -> ey...
  type MonitorInformation (line 56) | pub struct MonitorInformation {
    method from (line 66) | fn from(monitor: &Monitor) -> Self {
  function new (line 78) | pub fn new(
  function test_add_container (line 525) | fn test_add_container() {
  function test_remove_workspace_by_idx (line 545) | fn test_remove_workspace_by_idx() {
  function test_remove_workspaces (line 579) | fn test_remove_workspaces() {
  function test_remove_nonexistent_workspace (line 613) | fn test_remove_nonexistent_workspace() {
  function test_focus_workspace (line 632) | fn test_focus_workspace() {
  function test_new_workspace_idx (line 657) | fn test_new_workspace_idx() {
  function test_move_container_to_workspace (line 675) | fn test_move_container_to_workspace() {
  function test_move_container_to_nonexistent_workspace (line 739) | fn test_move_container_to_nonexistent_workspace() {
  function test_ensure_workspace_count_workspace_contains_two_workspaces (line 779) | fn test_ensure_workspace_count_workspace_contains_two_workspaces() {
  function test_ensure_workspace_count_only_default_workspace (line 805) | fn test_ensure_workspace_count_only_default_workspace() {

FILE: komorebi/src/monitor_reconciliator/hidden.rs
  type Hidden (line 48) | pub struct Hidden {
    method from (line 53) | fn from(hwnd: isize) -> Self {
    method hwnd (line 59) | pub const fn hwnd(self) -> HWND {
    method create (line 63) | pub fn create(name: &str) -> color_eyre::Result<Self> {
    method callback (line 161) | pub extern "system" fn callback(

FILE: komorebi/src/monitor_reconciliator/mod.rs
  type MonitorNotification (line 36) | pub enum MonitorNotification {
  function channel (line 57) | pub fn channel() -> &'static (Sender<MonitorNotification>, Receiver<Moni...
  function event_tx (line 61) | fn event_tx() -> Sender<MonitorNotification> {
  function event_rx (line 65) | fn event_rx() -> Receiver<MonitorNotification> {
  function send_notification (line 69) | pub fn send_notification(notification: MonitorNotification) {
  function display_change_in_progress (line 92) | pub fn display_change_in_progress(grace_period: std::time::Duration) -> ...
  function insert_in_monitor_cache (line 104) | pub fn insert_in_monitor_cache(serial_or_device_id: &str, monitor: Monit...
  function attached_display_devices (line 121) | pub fn attached_display_devices<F, I>(display_provider: F) -> color_eyre...
  function listen_for_notifications (line 220) | pub fn listen_for_notifications(wm: Arc<Mutex<WindowManager>>) -> color_...
  function handle_notifications (line 246) | pub fn handle_notifications<F, I>(
  type MockDevice (line 1002) | struct MockDevice {
  function from (line 1015) | fn from(mock: MockDevice) -> Self {
  type TestContext (line 1031) | struct TestContext {
  method drop (line 1036) | fn drop(&mut self) {
  function setup_window_manager (line 1046) | fn setup_window_manager() -> (WindowManager, TestContext) {
  function test_send_notification (line 1071) | fn test_send_notification() {
  function test_channel_bounded_capacity (line 1091) | fn test_channel_bounded_capacity() {
  function test_insert_in_monitor_cache (line 1123) | fn test_insert_in_monitor_cache() {
  function test_insert_two_monitors_cache (line 1148) | fn test_insert_two_monitors_cache() {
  function test_listen_for_notifications (line 1196) | fn test_listen_for_notifications() {
  function test_attached_display_devices (line 1222) | fn test_attached_display_devices() {

FILE: komorebi/src/process_command.rs
  function listen_for_commands (line 104) | pub fn listen_for_commands(wm: Arc<Mutex<WindowManager>>) {
  function listen_for_commands_tcp (line 147) | pub fn listen_for_commands_tcp(wm: Arc<Mutex<WindowManager>>, port: usiz...
  method process_command (line 193) | pub fn process_command(
  function read_commands_uds (line 2328) | pub fn read_commands_uds(
  function read_commands_tcp (line 2368) | pub fn read_commands_tcp(
  function send_socket_message (line 2435) | fn send_socket_message(socket: &PathBuf, message: SocketMessage) {
  function test_receive_socket_message (line 2446) | fn test_receive_socket_message() {

FILE: komorebi/src/process_event.rs
  function listen_for_events (line 45) | pub fn listen_for_events(wm: Arc<Mutex<WindowManager>>) {
  method process_event (line 91) | pub fn process_event(&mut self, event: WindowManagerEvent) -> eyre::Resu...
  method needs_reconciliation (line 872) | fn needs_reconciliation(&self, window: Window) -> color_eyre::Result<Opt...
  method perform_reconciliation (line 923) | fn perform_reconciliation(

FILE: komorebi/src/process_movement.rs
  function listen_for_movements (line 13) | pub fn listen_for_movements(wm: Arc<Mutex<WindowManager>>) {

FILE: komorebi/src/reaper.rs
  type ReaperNotification (line 29) | pub struct ReaperNotification(pub HashMap<isize, (usize, usize)>);
  function channel (line 34) | pub fn channel() -> &'static (Sender<ReaperNotification>, Receiver<Reape...
  function event_tx (line 38) | fn event_tx() -> Sender<ReaperNotification> {
  function event_rx (line 42) | fn event_rx() -> Receiver<ReaperNotification> {
  function send_notification (line 46) | pub fn send_notification(hwnds: HashMap<isize, (usize, usize)>) {
  function listen_for_notifications (line 52) | pub fn listen_for_notifications(
  function handle_notifications (line 72) | fn handle_notifications(wm: Arc<Mutex<WindowManager>>) -> color_eyre::Re...
  function watch_for_orphans (line 148) | fn watch_for_orphans(known_hwnds: HashMap<isize, (usize, usize)>) {
  function find_orphans (line 173) | fn find_orphans() -> color_eyre::Result<()> {

FILE: komorebi/src/ring.rs
  type Ring (line 8) | pub struct Ring<T> {
  method default (line 14) | fn default() -> Self {
  function elements (line 23) | pub const fn elements(&self) -> &VecDeque<T> {
  function elements_mut (line 27) | pub fn elements_mut(&mut self) -> &mut VecDeque<T> {
  function focus (line 31) | pub fn focus(&mut self, idx: usize) {
  function focused (line 35) | pub fn focused(&self) -> Option<&T> {
  function focused_idx (line 39) | pub const fn focused_idx(&self) -> usize {
  function focused_mut (line 43) | pub fn focused_mut(&mut self) -> Option<&mut T> {

FILE: komorebi/src/splash.rs
  function mdm_enrollment (line 16) | pub fn mdm_enrollment() -> eyre::Result<(bool, Option<String>)> {
  function is_valid_payload (line 40) | fn is_valid_payload(raw: &str, fresh: bool) -> eyre::Result<bool> {
  type ValidationFeedback (line 98) | pub enum ValidationFeedback {
  function from (line 106) | fn from(value: ValidationFeedback) -> Self {
  function should (line 117) | pub fn should() -> eyre::Result<ValidationFeedback> {

FILE: komorebi/src/stackbar_manager/mod.rs
  type Notification (line 43) | pub struct Notification;
  function channel (line 47) | pub fn channel() -> &'static (Sender<Notification>, Receiver<Notificatio...
  function event_tx (line 51) | fn event_tx() -> Sender<Notification> {
  function event_rx (line 55) | fn event_rx() -> Receiver<Notification> {
  function send_notification (line 59) | pub fn send_notification() {
  function should_have_stackbar (line 65) | pub fn should_have_stackbar(window_count: usize) -> bool {
  function listen_for_notifications (line 73) | pub fn listen_for_notifications(wm: Arc<Mutex<WindowManager>>) {
  function handle_notifications (line 88) | pub fn handle_notifications(wm: Arc<Mutex<WindowManager>>) -> color_eyre...

FILE: komorebi/src/stackbar_manager/stackbar.rs
  type Stackbar (line 81) | pub struct Stackbar {
    method from (line 86) | fn from(value: isize) -> Self {
    method hwnd (line 92) | pub const fn hwnd(&self) -> HWND {
    method create (line 96) | pub fn create(id: &str) -> color_eyre::Result<Self> {
    method destroy (line 160) | pub fn destroy(&self) -> color_eyre::Result<()> {
    method update (line 164) | pub fn update(
    method get_position_from_container_layout (line 304) | pub fn get_position_from_container_layout(&self, layout: &Rect) -> Rect {
    method callback (line 311) | unsafe extern "system" fn callback(
  function wide_string (line 396) | fn wide_string(s: &str) -> Vec<u16> {

FILE: komorebi/src/state.rs
  type State (line 56) | pub struct State {
    method has_been_modified (line 73) | pub fn has_been_modified(&self, wm: &WindowManager) -> bool {
    method from (line 220) | fn from(wm: &WindowManager) -> Self {
  type GlobalState (line 123) | pub struct GlobalState {
  method default (line 158) | fn default() -> Self {

FILE: komorebi/src/static_config.rs
  type BorderColours (line 114) | pub struct BorderColours {
  type ThemeOptions (line 138) | pub struct ThemeOptions {
  type Wallpaper (line 189) | pub struct Wallpaper {
  type WorkspaceConfig (line 208) | pub struct WorkspaceConfig {
    method from (line 278) | fn from(value: &Workspace) -> Self {
  type MonitorConfig (line 372) | pub struct MonitorConfig {
    method from (line 401) | fn from(value: &Monitor) -> Self {
  type AppSpecificConfigurationPath (line 444) | pub enum AppSpecificConfigurationPath {
  type StaticConfig (line 455) | pub struct StaticConfig {
    method end_of_life (line 674) | pub fn end_of_life(raw: &str) {
    method aliases (line 701) | pub fn aliases(raw: &str) {
    method deprecated (line 735) | pub fn deprecated(raw: &str) {
    method from (line 803) | fn from(value: &WindowManager) -> Self {
    method apply_globals (line 922) | fn apply_globals(&mut self) -> eyre::Result<()> {
    method read_raw (line 1222) | pub fn read_raw(raw: &str) -> eyre::Result<Self> {
    method read (line 1226) | pub fn read(path: &PathBuf) -> eyre::Result<Self> {
    method preload (line 1232) | pub fn preload(
    method postload (line 1335) | pub fn postload(path: &PathBuf, wm: &Arc<Mutex<WindowManager>>) -> eyr...
    method reload (line 1507) | pub fn reload(path: &PathBuf, wm: &mut WindowManager) -> eyre::Result<...
  type AnimationsConfig (line 653) | pub struct AnimationsConfig {
  type TabsConfig (line 761) | pub struct TabsConfig {
  type StackbarConfig (line 785) | pub struct StackbarConfig {
  function populate_option (line 1718) | fn populate_option(
  function populate_rules (line 1744) | fn populate_rules(
  function handle_asc_file (line 1783) | fn handle_asc_file(
  function backwards_compat (line 1917) | fn backwards_compat() {
  function deserialize_custom_layout_rules (line 1946) | fn deserialize_custom_layout_rules() {

FILE: komorebi/src/theme_manager.rs
  type Notification (line 21) | pub struct Notification(KomorebiTheme);
  type Target (line 26) | type Target = KomorebiTheme;
  method deref (line 28) | fn deref(&self) -> &Self::Target {
  function channel (line 35) | pub fn channel() -> &'static (Sender<Notification>, Receiver<Notificatio...
  function event_tx (line 39) | fn event_tx() -> Sender<Notification> {
  function event_rx (line 43) | fn event_rx() -> Receiver<Notification> {
  function send_notification (line 50) | pub fn send_notification(theme: KomorebiTheme) {
  function listen_for_notifications (line 56) | pub fn listen_for_notifications() {
  function handle_notifications (line 71) | pub fn handle_notifications() -> color_eyre::Result<()> {

FILE: komorebi/src/transparency_manager.rs
  type Notification (line 24) | pub struct Notification;
  function known_hwnds (line 28) | pub fn known_hwnds() -> Vec<isize> {
  function channel (line 33) | pub fn channel() -> &'static (Sender<Notification>, Receiver<Notificatio...
  function event_tx (line 37) | fn event_tx() -> Sender<Notification> {
  function event_rx (line 41) | fn event_rx() -> Receiver<Notification> {
  function send_notification (line 45) | pub fn send_notification() {
  function listen_for_notifications (line 51) | pub fn listen_for_notifications(wm: Arc<Mutex<WindowManager>>) {
  function handle_notifications (line 66) | pub fn handle_notifications(wm: Arc<Mutex<WindowManager>>) -> color_eyre...

FILE: komorebi/src/window.rs
  type Window (line 68) | pub struct Window {
    method from (line 73) | fn from(value: isize) -> Self {
    method from (line 79) | fn from(value: HWND) -> Self {
    method hwnd (line 348) | pub const fn hwnd(self) -> HWND {
    method move_to_area (line 352) | pub fn move_to_area(&mut self, current_area: &Rect, target_area: &Rect...
    method center (line 419) | pub fn center(&mut self, work_area: &Rect, resize: bool) -> eyre::Resu...
    method set_position (line 446) | pub fn set_position(&self, layout: &Rect, top: bool) -> eyre::Result<(...
    method is_maximized (line 479) | pub fn is_maximized(self) -> bool {
    method is_miminized (line 483) | pub fn is_miminized(self) -> bool {
    method is_visible (line 487) | pub fn is_visible(self) -> bool {
    method hide_with_border (line 491) | pub fn hide_with_border(self, hide_border: bool) {
    method hide (line 510) | pub fn hide(self) {
    method restore_with_border (line 514) | pub fn restore_with_border(self, restore_border: bool) {
    method restore (line 537) | pub fn restore(self) {
    method minimize (line 541) | pub fn minimize(self) {
    method close (line 548) | pub fn close(self) -> eyre::Result<()> {
    method maximize (line 552) | pub fn maximize(self) {
    method unmaximize (line 564) | pub fn unmaximize(self) {
    method focus (line 576) | pub fn focus(self, mouse_follows_focus: bool) -> eyre::Result<()> {
    method is_focused (line 599) | pub fn is_focused(self) -> bool {
    method transparent (line 603) | pub fn transparent(self) -> eyre::Result<()> {
    method opaque (line 641) | pub fn opaque(self) -> eyre::Result<()> {
    method set_accent (line 676) | pub fn set_accent(self, colour: u32) -> eyre::Result<()> {
    method remove_accent (line 680) | pub fn remove_accent(self) -> eyre::Result<()> {
    method update_style (line 685) | pub fn update_style(self, style: &WindowStyle) -> eyre::Result<()> {
    method update_style (line 690) | pub fn update_style(self, style: &WindowStyle) -> eyre::Result<()> {
    method update_ex_style (line 695) | pub fn update_ex_style(self, style: &ExtendedWindowStyle) -> eyre::Res...
    method update_ex_style (line 700) | pub fn update_ex_style(self, style: &ExtendedWindowStyle) -> eyre::Res...
    method style (line 704) | pub fn style(self) -> eyre::Result<WindowStyle> {
    method ex_style (line 709) | pub fn ex_style(self) -> eyre::Result<ExtendedWindowStyle> {
    method title (line 714) | pub fn title(self) -> eyre::Result<String> {
    method path (line 718) | pub fn path(self) -> eyre::Result<String> {
    method exe (line 726) | pub fn exe(self) -> eyre::Result<String> {
    method process_id (line 734) | pub fn process_id(self) -> u32 {
    method class (line 739) | pub fn class(self) -> eyre::Result<String> {
    method is_cloaked (line 743) | pub fn is_cloaked(self) -> eyre::Result<bool> {
    method is_window (line 747) | pub fn is_window(self) -> bool {
    method remove_title_bar (line 751) | pub fn remove_title_bar(self) -> eyre::Result<()> {
    method add_title_bar (line 758) | pub fn add_title_bar(self) -> eyre::Result<()> {
    method raise (line 769) | pub fn raise(self) -> eyre::Result<()> {
    method lower (line 781) | pub fn lower(self) -> eyre::Result<()> {
    method should_manage (line 790) | pub fn should_manage(
  type WindowDetails (line 89) | pub struct WindowDetails {
    type Error (line 96) | type Error = eyre::ErrReport;
    method try_from (line 98) | fn try_from(value: Window) -> std::result::Result<Self, Self::Error> {
  method fmt (line 108) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  method serialize (line 130) | fn serialize<S>(&self, serializer: S) -> eyre::Result<S::Ok, S::Error>
  type MovementRenderDispatcher (line 162) | struct MovementRenderDispatcher {
    constant PREFIX (line 171) | const PREFIX: AnimationPrefix = AnimationPrefix::Movement;
    method new (line 173) | pub fn new(
  method get_animation_key (line 191) | fn get_animation_key(&self) -> String {
  method pre_render (line 195) | fn pre_render(&self) -> eyre::Result<()> {
  method render (line 202) | fn render(&self, progress: f64) -> eyre::Result<()> {
  method post_render (line 213) | fn post_render(&self) -> eyre::Result<()> {
  type TransparencyRenderDispatcher (line 236) | struct TransparencyRenderDispatcher {
    constant PREFIX (line 245) | const PREFIX: AnimationPrefix = AnimationPrefix::Transparency;
    method new (line 247) | pub fn new(
  method get_animation_key (line 265) | fn get_animation_key(&self) -> String {
  method pre_render (line 269) | fn pre_render(&self) -> eyre::Result<()> {
  method render (line 281) | fn render(&self, progress: f64) -> eyre::Result<()> {
  method post_render (line 289) | fn post_render(&self) -> eyre::Result<()> {
  type AspectRatio (line 306) | pub enum AspectRatio {
    method width_and_height (line 335) | pub fn width_and_height(self) -> (i32, i32) {
  method default (line 316) | fn default() -> Self {
  type PredefinedAspectRatio (line 324) | pub enum PredefinedAspectRatio {
  type RuleDebug (line 868) | pub struct RuleDebug {
  function window_is_eligible (line 893) | fn window_is_eligible(
  function should_act (line 1055) | pub fn should_act(
  function should_act_individual (line 1101) | pub fn should_act_individual(

FILE: komorebi/src/window_manager.rs
  type WindowManager (line 73) | pub struct WindowManager {
    method as_ref (line 98) | fn as_ref(&self) -> &Self {
    method new (line 131) | pub fn new(
    method init (line 175) | pub fn init(&mut self) -> eyre::Result<()> {
    method apply_state (line 182) | pub fn apply_state(&mut self, state: State) {
    method reload_configuration (line 328) | pub fn reload_configuration() {
    method reload_static_configuration (line 334) | pub fn reload_static_configuration(&mut self, pathbuf: &PathBuf) -> ey...
    method window_management_behaviour (line 339) | pub fn window_management_behaviour(
    method watch_configuration (line 414) | pub fn watch_configuration(&mut self, enable: bool) -> eyre::Result<()> {
    method configure_watcher (line 427) | fn configure_watcher(&mut self, enable: bool, config: PathBuf) -> eyre...
    method monitor_idx_in_direction (line 465) | pub fn monitor_idx_in_direction(&self, direction: OperationDirection) ...
    method direction_from_monitor_idx (line 497) | pub fn direction_from_monitor_idx(
    method add_window_handle_to_move_based_on_workspace_rule (line 527) | fn add_window_handle_to_move_based_on_workspace_rule(
    method enforce_workspace_rules (line 557) | pub fn enforce_workspace_rules(&mut self) -> eyre::Result<()> {
    method retile_all (line 740) | pub fn retile_all(&mut self, preserve_resize_dimensions: bool) -> eyre...
    method manage_focused_window (line 779) | pub fn manage_focused_window(&mut self) -> eyre::Result<()> {
    method unmanage_focused_window (line 786) | pub fn unmanage_focused_window(&mut self) -> eyre::Result<()> {
    method raise_window_at_cursor_pos (line 793) | pub fn raise_window_at_cursor_pos(&mut self) -> eyre::Result<()> {
    method transfer_window (line 857) | pub fn transfer_window(
    method transfer_container (line 984) | pub fn transfer_container(
    method swap_containers (line 1020) | pub fn swap_containers(
    method update_focused_workspace (line 1095) | pub fn update_focused_workspace(
    method resize_window (line 1170) | pub fn resize_window(
    method stop (line 1351) | pub fn stop(&mut self, ignore_restore: bool) -> eyre::Result<()> {
    method restore_all_windows (line 1385) | pub fn restore_all_windows(&mut self, ignore_restore: bool) -> eyre::R...
    method remove_all_accents (line 1439) | pub fn remove_all_accents(&mut self) -> eyre::Result<()> {
    method handle_unmanaged_window_behaviour (line 1462) | fn handle_unmanaged_window_behaviour(&self) -> eyre::Result<()> {
    method apply_wallpaper_for_monitor_workspace (line 1480) | pub fn apply_wallpaper_for_monitor_workspace(
    method update_focused_workspace_by_monitor_idx (line 1501) | pub fn update_focused_workspace_by_monitor_idx(&mut self, idx: usize) ...
    method swap_monitor_workspaces (line 1511) | pub fn swap_monitor_workspaces(
    method swap_focused_monitor (line 1582) | pub fn swap_focused_monitor(&mut self, idx: usize) -> eyre::Result<()> {
    method move_container_to_monitor (line 1594) | pub fn move_container_to_monitor(
    method move_container_to_workspace (line 1729) | pub fn move_container_to_workspace(
    method remove_focused_workspace (line 1752) | pub fn remove_focused_workspace(&mut self) -> Option<Workspace> {
    method move_workspace_to_monitor (line 1767) | pub fn move_workspace_to_monitor(&mut self, idx: usize) -> eyre::Resul...
    method focus_floating_window_in_direction (line 1792) | pub fn focus_floating_window_in_direction(
    method preselect_container_in_direction (line 2048) | pub fn preselect_container_in_direction(
    method focus_container_in_direction (line 2095) | pub fn focus_container_in_direction(
    method move_floating_window_in_direction (line 2268) | pub fn move_floating_window_in_direction(
    method move_container_in_direction (line 2345) | pub fn move_container_in_direction(
    method focus_floating_window_in_cycle_direction (line 2522) | pub fn focus_floating_window_in_cycle_direction(
    method focus_container_in_cycle_direction (line 2570) | pub fn focus_container_in_cycle_direction(
    method move_container_in_cycle_direction (line 2610) | pub fn move_container_in_cycle_direction(
    method cycle_container_window_in_direction (line 2634) | pub fn cycle_container_window_in_direction(
    method cycle_container_window_index_in_direction (line 2670) | pub fn cycle_container_window_index_in_direction(
    method focus_container_window (line 2706) | pub fn focus_container_window(&mut self, idx: usize) -> eyre::Result<(...
    method stack_all (line 2740) | pub fn stack_all(&mut self) -> eyre::Result<()> {
    method unstack_all (line 2778) | pub fn unstack_all(&mut self, update_workspace: bool) -> eyre::Result<...
    method add_window_to_container (line 2816) | pub fn add_window_to_container(&mut self, direction: OperationDirectio...
    method promote_container_to_front (line 2888) | pub fn promote_container_to_front(&mut self) -> eyre::Result<()> {
    method promote_container_swap (line 2905) | pub fn promote_container_swap(&mut self) -> eyre::Result<()> {
    method promote_focus_to_front (line 2938) | pub fn promote_focus_to_front(&mut self) -> eyre::Result<()> {
    method remove_window_from_container (line 2961) | pub fn remove_window_from_container(&mut self) -> eyre::Result<()> {
    method toggle_tiling (line 2977) | pub fn toggle_tiling(&mut self) -> eyre::Result<()> {
    method toggle_float (line 2984) | pub fn toggle_float(&mut self, force_float: bool) -> eyre::Result<()> {
    method toggle_lock (line 3012) | pub fn toggle_lock(&mut self) -> eyre::Result<()> {
    method float_window (line 3022) | pub fn float_window(&mut self) -> eyre::Result<()> {
    method unfloat_window (line 3046) | pub fn unfloat_window(&mut self) -> eyre::Result<()> {
    method toggle_monocle (line 3054) | pub fn toggle_monocle(&mut self) -> eyre::Result<()> {
    method monocle_on (line 3069) | pub fn monocle_on(&mut self) -> eyre::Result<()> {
    method monocle_off (line 3087) | pub fn monocle_off(&mut self) -> eyre::Result<()> {
    method cycle_monocle (line 3104) | pub fn cycle_monocle(&mut self, direction: CycleDirection) -> eyre::Re...
    method toggle_maximize (line 3125) | pub fn toggle_maximize(&mut self) -> eyre::Result<()> {
    method maximize_window (line 3139) | pub fn maximize_window(&mut self) -> eyre::Result<()> {
    method unmaximize_window (line 3147) | pub fn unmaximize_window(&mut self) -> eyre::Result<()> {
    method flip_layout (line 3155) | pub fn flip_layout(&mut self, layout_flip: Axis) -> eyre::Result<()> {
    method change_workspace_layout_default (line 3198) | pub fn change_workspace_layout_default(&mut self, layout: DefaultLayou...
    method cycle_layout (line 3232) | pub fn cycle_layout(&mut self, direction: CycleDirection) -> eyre::Res...
    method change_workspace_custom_layout (line 3255) | pub fn change_workspace_custom_layout<P>(&mut self, path: P) -> eyre::...
    method adjust_workspace_padding (line 3286) | pub fn adjust_workspace_padding(
    method adjust_container_padding (line 3305) | pub fn adjust_container_padding(
    method set_workspace_tiling (line 3324) | pub fn set_workspace_tiling(
    method add_workspace_layout_default_rule (line 3346) | pub fn add_workspace_layout_default_rule(
    method add_workspace_layout_custom_rule (line 3384) | pub fn add_workspace_layout_custom_rule<P>(
    method clear_workspace_layout_rules (line 3427) | pub fn clear_workspace_layout_rules(
    method set_workspace_layout_default (line 3461) | pub fn set_workspace_layout_default(
    method set_workspace_layout_custom (line 3495) | pub fn set_workspace_layout_custom<P>(
    method ensure_workspaces_for_monitor (line 3533) | pub fn ensure_workspaces_for_monitor(
    method ensure_named_workspaces_for_monitor (line 3551) | pub fn ensure_named_workspaces_for_monitor(
    method set_workspace_padding (line 3575) | pub fn set_workspace_padding(
    method set_workspace_name (line 3599) | pub fn set_workspace_name(
    method set_container_padding (line 3624) | pub fn set_container_padding(
    method focused_monitor_size (line 3647) | pub fn focused_monitor_size(&self) -> eyre::Result<Rect> {
    method focused_monitor_work_area (line 3654) | pub fn focused_monitor_work_area(&self) -> eyre::Result<Rect> {
    method focus_monitor (line 3662) | pub fn focus_monitor(&mut self, idx: usize) -> eyre::Result<()> {
    method monitor_idx_from_window (line 3674) | pub fn monitor_idx_from_window(&mut self, window: Window) -> Option<us...
    method monitor_idx_from_current_pos (line 3697) | pub fn monitor_idx_from_current_pos(&mut self) -> Option<usize> {
    method focused_workspace_idx (line 3720) | pub fn focused_workspace_idx(&self) -> eyre::Result<usize> {
    method focused_workspace (line 3727) | pub fn focused_workspace(&self) -> eyre::Result<&Workspace> {
    method focused_workspace_mut (line 3734) | pub fn focused_workspace_mut(&mut self) -> eyre::Result<&mut Workspace> {
    method focused_workspace_idx_for_monitor_idx (line 3741) | pub fn focused_workspace_idx_for_monitor_idx(&self, idx: usize) -> eyr...
    method focused_workspace_for_monitor_idx (line 3749) | pub fn focused_workspace_for_monitor_idx(&self, idx: usize) -> eyre::R...
    method focused_workspace_for_monitor_idx_mut (line 3757) | pub fn focused_workspace_for_monitor_idx_mut(
    method focus_workspace (line 3769) | pub fn focus_workspace(&mut self, idx: usize) -> eyre::Result<()> {
    method monitor_workspace_index_by_name (line 3784) | pub fn monitor_workspace_index_by_name(&mut self, name: &str) -> Optio...
    method new_workspace (line 3801) | pub fn new_workspace(&mut self) -> eyre::Result<()> {
    method focused_container (line 3815) | pub fn focused_container(&self) -> eyre::Result<&Container> {
    method focused_container_idx (line 3821) | pub fn focused_container_idx(&self) -> eyre::Result<usize> {
    method focused_container_mut (line 3825) | pub fn focused_container_mut(&mut self) -> eyre::Result<&mut Container> {
    method focused_window (line 3831) | pub fn focused_window(&self) -> eyre::Result<&Window> {
    method focused_window_mut (line 3837) | fn focused_window_mut(&mut self) -> eyre::Result<&mut Window> {
    method update_known_hwnds (line 3846) | pub fn update_known_hwnds(&mut self) {
  type EnforceWorkspaceRuleOp (line 106) | struct EnforceWorkspaceRuleOp {
    method is_origin (line 115) | const fn is_origin(&self, monitor_idx: usize, workspace_idx: usize) ->...
    method is_target (line 119) | const fn is_target(&self, monitor_idx: usize, workspace_idx: usize) ->...
    method is_enforced (line 123) | const fn is_enforced(&self) -> bool {
  type TestContext (line 3915) | struct TestContext {
  method drop (line 3920) | fn drop(&mut self) {
  function setup_window_manager (line 3928) | fn setup_window_manager() -> (WindowManager, TestContext) {
  function test_create_window_manager (line 3951) | fn test_create_window_manager() {
  function test_focus_workspace (line 3956) | fn test_focus_workspace() {
  function test_remove_focused_workspace (line 4002) | fn test_remove_focused_workspace() {
  function test_set_workspace_name (line 4053) | fn test_set_workspace_name() {
  function test_switch_focus_monitors (line 4096) | fn test_switch_focus_monitors() {
  function test_switch_focus_to_nonexistent_monitor (line 4187) | fn test_switch_focus_to_nonexistent_monitor() {
  function test_focused_monitor_size (line 4225) | fn test_focused_monitor_size() {
  function test_focus_container_in_cycle_direction (line 4257) | fn test_focus_container_in_cycle_direction() {
  function test_transfer_window (line 4308) | fn test_transfer_window() {
  function test_transfer_window_to_nonexistent_monitor (line 4408) | fn test_transfer_window_to_nonexistent_monitor() {
  function test_transfer_container (line 4466) | fn test_transfer_container() {
  function test_remove_window_from_container (line 4566) | fn test_remove_window_from_container() {
  function test_remove_nonexistent_window_from_container (line 4630) | fn test_remove_nonexistent_window_from_container() {
  function cycle_container_window_in_direction (line 4668) | fn cycle_container_window_in_direction() {
  function test_cycle_nonexistent_windows (line 4737) | fn test_cycle_nonexistent_windows() {
  function test_cycle_container_window_index_in_direction (line 4775) | fn test_cycle_container_window_index_in_direction() {
  function test_swap_containers (line 4844) | fn test_swap_containers() {
  function test_swap_container_with_nonexistent_container (line 4933) | fn test_swap_container_with_nonexistent_container() {
  function test_swap_monitor_workspaces (line 4998) | fn test_swap_monitor_workspaces() {
  function test_swap_workspace_with_nonexistent_monitor (line 5082) | fn test_swap_workspace_with_nonexistent_monitor() {
  function test_move_workspace_to_monitor (line 5128) | fn test_move_workspace_to_monitor() {
  function test_move_workspace_to_nonexistent_monitor (line 5197) | fn test_move_workspace_to_nonexistent_monitor() {
  function test_toggle_tiling (line 5233) | fn test_toggle_tiling() {
  function test_toggle_lock (line 5274) | fn test_toggle_lock() {
  function test_float_window (line 5327) | fn test_float_window() {
  function test_float_nonexistent_window (line 5405) | fn test_float_nonexistent_window() {
  function test_maximize_and_unmaximize_window (line 5439) | fn test_maximize_and_unmaximize_window() {
  function test_toggle_maximize (line 5529) | fn test_toggle_maximize() {
  function test_toggle_maximize_nonexistent_window (line 5585) | fn test_toggle_maximize_nonexistent_window() {
  function test_monocle_on_and_monocle_off (line 5620) | fn test_monocle_on_and_monocle_off() {
  function test_monocle_on_and_off_nonexistent_container (line 5691) | fn test_monocle_on_and_off_nonexistent_container() {
  function test_toggle_monocle (line 5726) | fn test_toggle_monocle() {
  function test_toggle_monocle_nonexistent_container (line 5797) | fn test_toggle_monocle_nonexistent_container() {
  function test_ensure_named_workspace_for_monitor (line 5825) | fn test_ensure_named_workspace_for_monitor() {
  function test_add_window_handle_to_move_based_on_workspace_rule (line 5898) | fn test_add_window_handle_to_move_based_on_workspace_rule() {

FILE: komorebi/src/window_manager_event.rs
  type WindowManagerEvent (line 17) | pub enum WindowManagerEvent {
    method window (line 87) | pub const fn window(self) -> Window {
    method hwnd (line 106) | pub const fn hwnd(self) -> isize {
    method title (line 110) | pub const fn title(self) -> &'static str {
    method winevent (line 129) | pub fn winevent(self) -> Option<String> {
    method from_win_event (line 148) | pub fn from_win_event(winevent: WinEvent, window: Window) -> Option<Se...
  method fmt (line 35) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {

FILE: komorebi/src/windows_api.rs
  type WindowsResult (line 181) | pub enum WindowsResult<T, E> {
  function from (line 204) | fn from(result: WindowsResult<T, E>) -> Self {
  type ProcessWindowsCrateResult (line 212) | pub trait ProcessWindowsCrateResult<T> {
    method process (line 213) | fn process(self) -> eyre::Result<T>;
  function process (line 239) | fn process(self) -> eyre::Result<T> {
  type WindowsApi (line 247) | pub struct WindowsApi;
    method enum_display_monitors (line 250) | pub fn enum_display_monitors(
    method valid_hmonitors (line 259) | pub fn valid_hmonitors() -> eyre::Result<Vec<(String, isize)>> {
    method load_monitor_information (line 271) | pub fn load_monitor_information(wm: &mut WindowManager) -> eyre::Resul...
    method enum_windows (line 412) | pub fn enum_windows(callback: WNDENUMPROC, callback_data_address: isiz...
    method load_workspace_information (line 416) | pub fn load_workspace_information(monitors: &mut Ring<Monitor>) -> eyr...
    method allow_set_foreground_window (line 451) | pub fn allow_set_foreground_window(process_id: u32) -> eyre::Result<()> {
    method monitor_from_window (line 455) | pub fn monitor_from_window(hwnd: isize) -> isize {
    method monitor_name_from_window (line 461) | pub fn monitor_name_from_window(hwnd: isize) -> eyre::Result<String> {
    method monitor_from_point (line 471) | pub fn monitor_from_point(point: POINT) -> isize {
    method position_window (line 480) | pub fn position_window(
    method bring_window_to_top (line 536) | pub fn bring_window_to_top(hwnd: isize) -> eyre::Result<()> {
    method raise_window (line 542) | pub fn raise_window(hwnd: isize) -> eyre::Result<()> {
    method lower_window (line 566) | pub fn lower_window(hwnd: isize) -> eyre::Result<()> {
    method set_border_pos (line 588) | pub fn set_border_pos(hwnd: isize, layout: &Rect, position: isize) -> ...
    method set_window_pos (line 610) | fn set_window_pos(hwnd: HWND, layout: &Rect, position: HWND, flags: u3...
    method move_window (line 626) | pub fn move_window(hwnd: isize, layout: &Rect, repaint: bool) -> eyre:...
    method show_window (line 639) | pub fn show_window(hwnd: isize, command: SHOW_WINDOW_CMD) {
    method minimize_window (line 657) | pub fn minimize_window(hwnd: isize) {
    method post_message (line 661) | fn post_message(hwnd: HWND, message: u32, wparam: WPARAM, lparam: LPAR...
    method close_window (line 665) | pub fn close_window(hwnd: isize) -> eyre::Result<()> {
    method hide_window (line 673) | pub fn hide_window(hwnd: isize) {
    method restore_window (line 677) | pub fn restore_window(hwnd: isize) {
    method unmaximize_window (line 681) | pub fn unmaximize_window(hwnd: isize) {
    method maximize_window (line 685) | pub fn maximize_window(hwnd: isize) {
    method foreground_window (line 689) | pub fn foreground_window() -> eyre::Result<isize> {
    method raise_and_focus_window (line 693) | pub fn raise_and_focus_window(hwnd: isize) -> eyre::Result<()> {
    method top_window (line 721) | pub fn top_window() -> eyre::Result<isize> {
    method desktop_window (line 725) | pub fn desktop_window() -> eyre::Result<isize> {
    method next_window (line 730) | pub fn next_window(hwnd: isize) -> eyre::Result<isize> {
    method alt_tab_windows (line 734) | pub fn alt_tab_windows() -> eyre::Result<Vec<Window>> {
    method top_visible_window (line 745) | pub fn top_visible_window() -> eyre::Result<isize> {
    method window_rect (line 760) | pub fn window_rect(hwnd: isize) -> eyre::Result<Rect> {
    method shadow_rect (line 779) | fn shadow_rect(hwnd: HWND) -> eyre::Result<Rect> {
    method round_rect (line 794) | pub fn round_rect(hdc: HDC, rect: &Rect, border_radius: i32) {
    method rectangle (line 808) | pub fn rectangle(hdc: HDC, rect: &Rect) {
    method set_cursor_pos (line 814) | fn set_cursor_pos(x: i32, y: i32) -> eyre::Result<()> {
    method cursor_pos (line 818) | pub fn cursor_pos() -> eyre::Result<POINT> {
    method window_from_point (line 825) | pub fn window_from_point(point: POINT) -> eyre::Result<isize> {
    method window_at_cursor_pos (line 829) | pub fn window_at_cursor_pos() -> eyre::Result<isize> {
    method center_cursor_in_rect (line 833) | pub fn center_cursor_in_rect(rect: &Rect) -> eyre::Result<()> {
    method window_thread_process_id (line 837) | pub fn window_thread_process_id(hwnd: isize) -> (u32, u32) {
    method current_process_id (line 852) | pub fn current_process_id() -> u32 {
    method process_id_to_session_id (line 856) | pub fn process_id_to_session_id() -> eyre::Result<u32> {
    method set_window_long_ptr_w (line 870) | fn set_window_long_ptr_w(
    method set_window_long_ptr_w (line 882) | fn set_window_long_ptr_w(
    method gwl_style (line 894) | pub fn gwl_style(hwnd: isize) -> eyre::Result<isize> {
    method gwl_style (line 899) | pub fn gwl_style(hwnd: isize) -> eyre::Result<i32> {
    method gwl_ex_style (line 904) | pub fn gwl_ex_style(hwnd: isize) -> eyre::Result<isize> {
    method gwl_ex_style (line 909) | pub fn gwl_ex_style(hwnd: isize) -> eyre::Result<i32> {
    method window_long_ptr_w (line 914) | fn window_long_ptr_w(hwnd: HWND, index: WINDOW_LONG_PTR_INDEX) -> eyre...
    method window_long_ptr_w (line 935) | fn window_long_ptr_w(hwnd: HWND, index: WINDOW_LONG_PTR_INDEX) -> eyre...
    method update_style (line 956) | pub fn update_style(hwnd: isize, new_value: isize) -> eyre::Result<()> {
    method update_style (line 961) | pub fn update_style(hwnd: isize, new_value: i32) -> eyre::Result<()> {
    method update_ex_style (line 966) | pub fn update_ex_style(hwnd: isize, new_value: isize) -> eyre::Result<...
    method update_ex_style (line 971) | pub fn update_ex_style(hwnd: isize, new_value: i32) -> eyre::Result<()> {
    method window_text_w (line 975) | pub fn window_text_w(hwnd: isize) -> eyre::Result<String> {
    method open_process (line 986) | fn open_process(
    method close_process (line 994) | pub fn close_process(handle: HANDLE) -> eyre::Result<()> {
    method process_handle (line 998) | pub fn process_handle(process_id: u32) -> eyre::Result<HANDLE> {
    method exe_path (line 1002) | pub fn exe_path(handle: HANDLE) -> eyre::Result<String> {
    method exe (line 1015) | pub fn exe(handle: HANDLE) -> eyre::Result<String> {
    method real_window_class_w (line 1023) | pub fn real_window_class_w(hwnd: isize) -> eyre::Result<String> {
    method dwm_get_window_attribute (line 1034) | pub fn dwm_get_window_attribute<T>(
    method is_window_cloaked (line 1051) | pub fn is_window_cloaked(hwnd: isize) -> eyre::Result<bool> {
    method is_window (line 1061) | pub fn is_window(hwnd: isize) -> bool {
    method is_window_visible (line 1065) | pub fn is_window_visible(hwnd: isize) -> bool {
    method is_iconic (line 1069) | pub fn is_iconic(hwnd: isize) -> bool {
    method is_zoomed (line 1073) | pub fn is_zoomed(hwnd: isize) -> bool {
    method monitor_info_w (line 1077) | pub fn monitor_info_w(hmonitor: HMONITOR) -> eyre::Result<MONITORINFOE...
    method monitor_device_path (line 1087) | pub fn monitor_device_path(hmonitor: isize) -> Option<String> {
    method monitor (line 1097) | pub fn monitor(hmonitor: isize) -> eyre::Result<Monitor> {
    method set_process_dpi_awareness_context (line 1140) | pub fn set_process_dpi_awareness_context() -> eyre::Result<()> {
    method system_parameters_info_w (line 1146) | pub fn system_parameters_info_w(
    method foreground_lock_timeout (line 1157) | pub fn foreground_lock_timeout() -> eyre::Result<()> {
    method focus_follows_mouse (line 1195) | pub fn focus_follows_mouse() -> eyre::Result<bool> {
    method enable_focus_follows_mouse (line 1209) | pub fn enable_focus_follows_mouse() -> eyre::Result<()> {
    method disable_focus_follows_mouse (line 1220) | pub fn disable_focus_follows_mouse() -> eyre::Result<()> {
    method module_handle_w (line 1229) | pub fn module_handle_w() -> eyre::Result<HMODULE> {
    method create_solid_brush (line 1233) | pub fn create_solid_brush(colour: u32) -> HBRUSH {
    method register_class_w (line 1237) | pub fn register_class_w(window_class: &WNDCLASSW) -> eyre::Result<u16> {
    method dpi_for_monitor (line 1241) | pub fn dpi_for_monitor(hmonitor: isize) -> eyre::Result<f32> {
    method monitors_have_same_dpi (line 1259) | pub fn monitors_have_same_dpi(hmonitor_a: isize, hmonitor_b: isize) ->...
    method round_corners (line 1266) | pub fn round_corners(hwnd: isize) -> eyre::Result<()> {
    method set_window_accent (line 1280) | pub fn set_window_accent(hwnd: isize, color: Option<u32>) -> eyre::Res...
    method create_border_window (line 1293) | pub fn create_border_window(
    method set_transparent (line 1317) | pub fn set_transparent(hwnd: isize, alpha: u8) -> eyre::Result<()> {
    method get_transparent (line 1331) | pub fn get_transparent(hwnd: isize) -> eyre::Result<u8> {
    method create_hidden_window (line 1346) | pub fn create_hidden_window(name: PCWSTR, instance: isize) -> eyre::Re...
    method register_power_setting_notification (line 1366) | pub fn register_power_setting_notification(
    method register_device_notification (line 1374) | pub fn register_device_notification(
    method invalidate_rect (line 1385) | pub fn invalidate_rect(hwnd: isize, rect: Option<&Rect>, erase: bool) ...
    method alt_is_pressed (line 1390) | pub fn alt_is_pressed() -> bool {
    method lbutton_is_pressed (line 1397) | pub fn lbutton_is_pressed() -> bool {
    method left_click (line 1404) | pub fn left_click() -> u32 {
    method wts_register_session_notification (line 1440) | pub fn wts_register_session_notification(hwnd: isize) -> eyre::Result<...
    method set_wallpaper (line 1444) | pub fn set_wallpaper(path: &Path, hmonitor: isize) -> eyre::Result<()> {
    method get_wallpaper (line 1468) | pub fn get_wallpaper(hmonitor: isize) -> eyre::Result<String> {

FILE: komorebi/src/windows_callbacks.rs
  function enum_window (line 25) | pub extern "system" fn enum_window(hwnd: HWND, lparam: LPARAM) -> BOOL {
  function alt_tab_windows (line 52) | pub extern "system" fn alt_tab_windows(hwnd: HWND, lparam: LPARAM) -> BO...
  function has_filtered_style (line 72) | fn has_filtered_style(hwnd: HWND) -> bool {
  function win_event_hook (line 81) | pub extern "system" fn win_event_hook(

FILE: komorebi/src/winevent.rs
  type WinEvent (line 95) | pub enum WinEvent {
    type Error (line 183) | type Error = ();
    method try_from (line 185) | fn try_from(value: u32) -> Result<Self, Self::Error> {

FILE: komorebi/src/winevent_listener.rs
  function start (line 24) | pub fn start() {
  function channel (line 58) | fn channel() -> &'static (Sender<WindowManagerEvent>, Receiver<WindowMan...
  function event_tx (line 62) | pub fn event_tx() -> Sender<WindowManagerEvent> {
  function event_rx (line 66) | pub fn event_rx() -> Receiver<WindowManagerEvent> {

FILE: komorebi/src/workspace.rs
  type Workspace (line 51) | pub struct Workspace {
    method load_static_config (line 167) | pub fn load_static_config(&mut self, config: &WorkspaceConfig) -> eyre...
    method hide (line 256) | pub fn hide(&mut self, omit: Option<isize>) {
    method apply_wallpaper (line 285) | pub fn apply_wallpaper(
    method restore (line 405) | pub fn restore(
    method update (line 462) | pub fn update(&mut self) -> eyre::Result<()> {
    method container_for_window (line 652) | pub fn container_for_window(&self, hwnd: isize) -> Option<&Container> {
    method focus_container_by_window (line 659) | pub fn focus_container_by_window(&mut self, hwnd: isize) -> eyre::Resu...
    method container_idx_from_current_point (line 690) | pub fn container_idx_from_current_point(&self) -> Option<usize> {
    method hwnd_from_exe (line 706) | pub fn hwnd_from_exe(&self, exe: &str) -> Option<isize> {
    method location_from_exe (line 737) | pub fn location_from_exe(&self, exe: &str) -> Option<WorkspaceWindowLo...
    method contains_managed_window (line 771) | pub fn contains_managed_window(&self, hwnd: isize) -> bool {
    method is_focused_window_monocle_or_maximized (line 793) | pub fn is_focused_window_monocle_or_maximized(&self) -> eyre::Result<b...
    method is_empty (line 810) | pub fn is_empty(&self) -> bool {
    method contains_window (line 817) | pub fn contains_window(&self, hwnd: isize) -> bool {
    method promote_container (line 845) | pub fn promote_container(&mut self) -> eyre::Result<()> {
    method add_container_to_back (line 869) | pub fn add_container_to_back(&mut self, container: Container) {
    method add_container_to_front (line 874) | pub fn add_container_to_front(&mut self, container: Container) {
    method insert_container_at_idx (line 881) | pub fn insert_container_at_idx(&mut self, idx: usize, container: Conta...
    method remove_container_by_idx (line 899) | pub fn remove_container_by_idx(&mut self, idx: usize) -> Option<Contai...
    method container_idx_for_window (line 909) | pub fn container_idx_for_window(&self, hwnd: isize) -> Option<usize> {
    method remove_window (line 920) | pub fn remove_window(&mut self, hwnd: isize) -> eyre::Result<()> {
    method remove_focused_container (line 991) | pub fn remove_focused_container(&mut self) -> Option<Container> {
    method remove_container (line 999) | pub fn remove_container(&mut self, idx: usize) -> Option<Container> {
    method preselect_container_idx (line 1006) | pub fn preselect_container_idx(&mut self, insertion_idx: usize) {
    method cancel_preselect (line 1011) | pub fn cancel_preselect(&mut self) {
    method new_idx_for_direction (line 1018) | pub fn new_idx_for_direction(&self, direction: OperationDirection) -> ...
    method new_idx_for_cycle_direction (line 1030) | pub fn new_idx_for_cycle_direction(&self, direction: CycleDirection) -...
    method move_window_to_container (line 1038) | pub fn move_window_to_container(&mut self, target_container_idx: usize...
    method new_container_for_focused_window (line 1078) | pub fn new_container_for_focused_window(&mut self) -> eyre::Result<()> {
    method new_container_for_floating_window (line 1102) | pub fn new_container_for_floating_window(&mut self) -> eyre::Result<()> {
    method new_container_for_window (line 1116) | pub fn new_container_for_window(&mut self, window: Window) {
    method new_floating_window (line 1134) | pub fn new_floating_window(&mut self) -> eyre::Result<()> {
    method enforce_resize_constraints (line 1182) | fn enforce_resize_constraints(&mut self) {
    method enforce_resize_constraints_for_bsp (line 1206) | fn enforce_resize_constraints_for_bsp(&mut self) {
    method enforce_resize_for_columns (line 1232) | fn enforce_resize_for_columns(&mut self) {
    method enforce_resize_for_rows (line 1255) | fn enforce_resize_for_rows(&mut self) {
    method enforce_resize_for_vertical_stack (line 1278) | fn enforce_resize_for_vertical_stack(&mut self) {
    method enforce_resize_for_right_vertical_stack (line 1311) | fn enforce_resize_for_right_vertical_stack(&mut self) {
    method enforce_resize_for_horizontal_stack (line 1344) | fn enforce_resize_for_horizontal_stack(&mut self) {
    method enforce_resize_for_ultrawide (line 1372) | fn enforce_resize_for_ultrawide(&mut self) {
    method enforce_resize_for_scrolling (line 1429) | fn enforce_resize_for_scrolling(&mut self) {
    method enforce_no_resize (line 1451) | fn enforce_no_resize(&mut self) {
    method new_monocle_container (line 1460) | pub fn new_monocle_container(&mut self) -> eyre::Result<()> {
    method reintegrate_monocle_container (line 1487) | pub fn reintegrate_monocle_container(&mut self) -> eyre::Result<()> {
    method cycle_monocle_container (line 1518) | pub fn cycle_monocle_container(&mut self, direction: CycleDirection) -...
    method new_maximized_window (line 1535) | pub fn new_maximized_window(&mut self) -> eyre::Result<()> {
    method reintegrate_maximized_window (line 1604) | pub fn reintegrate_maximized_window(&mut self) -> eyre::Result<()> {
    method focus_container (line 1641) | pub fn focus_container(&mut self, idx: usize) {
    method swap_containers (line 1647) | pub fn swap_containers(&mut self, i: usize, j: usize) {
    method remove_focused_floating_window (line 1652) | pub fn remove_focused_floating_window(&mut self) -> Option<Window> {
    method visible_windows (line 1674) | pub fn visible_windows(&self) -> Vec<Option<&Window>> {
    method visible_window_details (line 1694) | pub fn visible_window_details(&self) -> Vec<WindowDetails> {
    method focus_previous_container (line 1727) | pub fn focus_previous_container(&mut self) {
    method focus_last_container (line 1732) | fn focus_last_container(&mut self) {
    method focus_first_container (line 1736) | fn focus_first_container(&mut self) {
  type WorkspaceLayer (line 90) | pub enum WorkspaceLayer {
  method fmt (line 97) | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
  method default (line 109) | fn default() -> Self {
  type WorkspaceWindowLocation (line 144) | pub enum WorkspaceWindowLocation {
  type WorkspaceGlobals (line 154) | pub struct WorkspaceGlobals {
  function test_locked_containers_with_new_window (line 1749) | fn test_locked_containers_with_new_window() {
  function test_locked_containers_remove_window (line 1793) | fn test_locked_containers_remove_window() {
  function test_locked_containers_toggle_float (line 1815) | fn test_locked_containers_toggle_float() {
  function test_locked_containers_stack (line 1857) | fn test_locked_containers_stack() {
  function test_contains_window (line 1897) | fn test_contains_window() {
  function test_add_container_to_back (line 1916) | fn test_add_container_to_back() {
  function test_add_container_to_front (line 1945) | fn test_add_container_to_front() {
  function test_remove_non_existent_window (line 1974) | fn test_remove_non_existent_window() {
  function test_remove_focused_container (line 2001) | fn test_remove_focused_container() {
  function test_insert_container_at_idx (line 2043) | fn test_insert_container_at_idx() {
  function test_remove_container_by_idx (line 2069) | fn test_remove_container_by_idx() {
  function test_remove_container (line 2103) | fn test_remove_container() {
  function test_focus_container (line 2140) | fn test_focus_container() {
  function test_focus_previous_container (line 2169) | fn test_focus_previous_container() {
  function test_focus_last_container (line 2192) | fn test_focus_last_container() {
  function test_focus_first_container (line 2216) | fn test_focus_first_container() {
  function test_swap_containers (line 2239) | fn test_swap_containers() {
  function test_new_container_for_window (line 2281) | fn test_new_container_for_window() {
  function test_move_window_to_container (line 2302) | fn test_move_window_to_container() {
  function test_move_window_to_non_existent_container (line 2332) | fn test_move_window_to_non_existent_container() {
  function test_remove_window (line 2351) | fn test_remove_window() {
  function test_new_container_for_focused_window (line 2375) | fn test_new_container_for_focused_window() {
  function test_focus_container_by_window (line 2403) | fn test_focus_container_by_window() {
  function test_contains_managed_window (line 2438) | fn test_contains_managed_window() {
  function test_new_floating_window (line 2470) | fn test_new_floating_window() {
  function test_visible_windows (line 2498) | fn test_visible_windows() {

FILE: komorebic-no-console/src/main.rs
  constant CREATE_NO_WINDOW (line 7) | const CREATE_NO_WINDOW: u32 = 0x08000000;
  function main (line 9) | fn main() -> io::Result<()> {

FILE: komorebic/build.rs
  function main (line 3) | fn main() {

FILE: komorebic/src/main.rs
  type ConfigurationError (line 113) | struct ConfigurationError {
  type BooleanState (line 122) | enum BooleanState {
  function from (line 128) | fn from(b: BooleanState) -> Self {
  type ClearWorkspaceLayoutRules (line 289) | pub struct ClearWorkspaceLayoutRules {
  type WorkspaceCustomLayout (line 298) | pub struct WorkspaceCustomLayout {
  type NamedWorkspaceCustomLayout (line 311) | pub struct NamedWorkspaceCustomLayout {
  type WorkspaceLayoutRule (line 321) | pub struct WorkspaceLayoutRule {
  type NamedWorkspaceLayoutRule (line 336) | pub struct NamedWorkspaceLayoutRule {
  type WorkspaceCustomLayoutRule (line 348) | pub struct WorkspaceCustomLayoutRule {
  type NamedWorkspaceCustomLayoutRule (line 364) | pub struct NamedWorkspaceCustomLayoutRule {
  type Resize (line 377) | struct Resize {
  type ResizeAxis (line 385) | struct ResizeAxis {
  type ResizeDelta (line 393) | struct ResizeDelta {
  type InvisibleBorders (line 399) | struct InvisibleBorders {
  type GlobalWorkAreaOffset (line 411) | struct GlobalWorkAreaOffset {
  type MonitorWorkAreaOffset (line 423) | struct MonitorWorkAreaOffset {
  type WorkspaceWorkAreaOffset (line 437) | struct WorkspaceWorkAreaOffset {
  type MonitorIndexPreference (line 453) | struct MonitorIndexPreference {
  type DisplayIndexPreference (line 467) | struct DisplayIndexPreference {
  type EnsureWorkspaces (line 475) | struct EnsureWorkspaces {
  type EnsureNamedWorkspaces (line 483) | struct EnsureNamedWorkspaces {
  type FocusMonitorWorkspace (line 491) | struct FocusMonitorWorkspace {
  type SendToMonitorWorkspace (line 499) | pub struct SendToMonitorWorkspace {
  type MoveToMonitorWorkspace (line 507) | pub struct MoveToMonitorWorkspace {
  type InitialWorkspaceRule (line 621) | struct InitialWorkspaceRule {
  type InitialNamedWorkspaceRule (line 633) | struct InitialNamedWorkspaceRule {
  type WorkspaceRule (line 643) | struct WorkspaceRule {
  type NamedWorkspaceRule (line 655) | struct NamedWorkspaceRule {
  type ClearWorkspaceRules (line 665) | struct ClearWorkspaceRules {
  type ClearNamedWorkspaceRules (line 673) | struct ClearNamedWorkspaceRules {
  type ToggleFocusFollowsMouse (line 679) | struct ToggleFocusFollowsMouse {
  type FocusFollowsMouse (line 685) | struct FocusFollowsMouse {
  type Border (line 693) | struct Border {
  type Transparency (line 699) | struct Transparency {
  type TransparencyAlpha (line 705) | struct TransparencyAlpha {
  type BorderColour (line 711) | struct BorderColour {
  type BorderWidth (line 723) | struct BorderWidth {
  type BorderOffset (line 729) | struct BorderOffset {
  type BorderStyle (line 734) | struct BorderStyle {
  type BorderImplementation (line 741) | struct BorderImplementation {
  type StackbarMode (line 748) | struct StackbarMode {
  type Animation (line 755) | struct Animation {
  type AnimationDuration (line 764) | struct AnimationDuration {
  type AnimationFps (line 773) | struct AnimationFps {
  type AnimationStyle (line 779) | struct AnimationStyle {
  type Docgen (line 789) | struct Docgen {
  type Start (line 797) | struct Start {
  type Stop (line 831) | struct Stop {
  type Kill (line 851) | struct Kill {
  type SaveResize (line 868) | struct SaveResize {
  type LoadResize (line 875) | struct LoadResize {
  type LoadCustomLayout (line 882) | struct LoadCustomLayout {
  type SubscribeSocket (line 889) | struct SubscribeSocket {
  type UnsubscribeSocket (line 895) | struct UnsubscribeSocket {
  type SubscribePipe (line 901) | struct SubscribePipe {
  type UnsubscribePipe (line 907) | struct UnsubscribePipe {
  type AhkAppSpecificConfiguration (line 913) | struct AhkAppSpecificConfiguration {
  type PwshAppSpecificConfiguration (line 923) | struct PwshAppSpecificConfiguration {
  type FormatAppSpecificConfiguration (line 933) | struct FormatAppSpecificConfiguration {
  type ConvertAppSpecificConfiguration (line 940) | struct ConvertAppSpecificConfiguration {
  type AltFocusHack (line 947) | struct AltFocusHack {
  type EnableAutostart (line 953) | struct EnableAutostart {
  type Check (line 978) | struct Check {
  type ReplaceConfiguration (line 986) | struct ReplaceConfiguration {
  type EagerFocus (line 993) | struct EagerFocus {
  type ScrollingLayoutColumns (line 999) | struct ScrollingLayoutColumns {
  type LayoutRatios (line 1005) | struct LayoutRatios {
  type License (line 1015) | struct License {
  type Splash (line 1021) | struct Splash {
  type Opts (line 1027) | struct Opts {
  type SubCommand (line 1033) | enum SubCommand {
  function print_query (line 1574) | fn print_query(message: &SocketMessage) {
  function startup_dir (line 1581) | fn startup_dir() -> eyre::Result<PathBuf> {
  function main (line 1600) | fn main() -> eyre::Result<()> {
  function show_window (line 3405) | fn show_window(hwnd: HWND, command: SHOW_WINDOW_CMD) {
  function remove_transparency (line 3414) | fn remove_transparency(hwnd: isize) {
  function restore_window (line 3418) | fn restore_window(hwnd: isize) {
Condensed preview — 336 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,547K chars).
[
  {
    "path": ".czrc",
    "chars": 42,
    "preview": "{\n  \"path\": \"cz-conventional-changelog\"\n}\n"
  },
  {
    "path": ".envrc",
    "chars": 9,
    "preview": "use flake"
  },
  {
    "path": ".gitattributes",
    "chars": 16,
    "preview": "*.json text diff"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 29,
    "preview": "github: LGUG2Z\nko_fi: lgug2z\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2374,
    "preview": "name: Bug report\ndescription: File a bug report\nlabels: [bug]\ntitle: \"[BUG]: \"\nbody:\n  - type: markdown\n    attributes:\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 377,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Komorebi Documentation\n    url: https://lgug2z.github.io/komorebi/\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1226,
    "preview": "name: Feature request\ndescription: Suggest a new feature (Limited to Sponsors, Commercial License Holders, and Collabora"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 394,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  "
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 261,
    "preview": "<!--\n  Please follow the Conventional Commits specification.\n\n  If you need to update your PR with changes from `master`"
  },
  {
    "path": ".github/workflows/feature-check.yaml",
    "chars": 1586,
    "preview": "name: Feature Issue Check\n\non:\n  issues:\n    types: [ opened ]\n\njobs:\n  auto-close:\n    runs-on: ubuntu-latest\n    permi"
  },
  {
    "path": ".github/workflows/windows.yaml",
    "chars": 8868,
    "preview": "# Adapted from https://github.com/rust-lang/rustup/blob/master/.github/workflows/windows-builds-on-master.yaml\n\nname: Wi"
  },
  {
    "path": ".gitignore",
    "chars": 172,
    "preview": ".idea\n/dist\n/target\nCHANGELOG.md\ndummy.go\nkomorebic/applications.yaml\nkomorebic/applications.json\n/.vs\n/bar-schema\n/komo"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 1879,
    "preview": "# The Komorebi Code of Conduct\n\nThis document is based on the [Rust Code of\nConduct](https://www.rust-lang.org/policies/"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1971,
    "preview": "# Contributing to the Project\n\nThe project is a collection of contributions from both the project leaders and\ncommunity "
  },
  {
    "path": "Cargo.toml",
    "chars": 2145,
    "preview": "[workspace]\n\nresolver = \"2\"\nmembers = [\n  \"komorebi\",\n  \"komorebi-client\",\n  \"komorebi-gui\",\n  \"komorebi-layouts\",\n  \"ko"
  },
  {
    "path": "LICENSE.md",
    "chars": 3735,
    "preview": "# Komorebi License\n\nVersion 2.0.0\n\n## Acceptance\n\nIn order to get any license under these terms, you must agree\nto them "
  },
  {
    "path": "PRIVACY.md",
    "chars": 353,
    "preview": "# Privacy Policy for Komorebi\n\nNo data about your device(s) or _komorebi_ usage leave your device.\n\n## Data Maintained b"
  },
  {
    "path": "README.md",
    "chars": 23921,
    "preview": "# komorebi\n\nTiling Window Management for Windows.\n\n<p>\n  <a href=\"https://techforpalestine.org/learn-more\">\n    <img alt"
  },
  {
    "path": "check_schema_docs.py",
    "chars": 15764,
    "preview": "#!/usr/bin/env python3\n\"\"\"\nCheck schema.json and schema.bar.json for missing docstrings and map them to Rust source file"
  },
  {
    "path": "deny.toml",
    "chars": 2915,
    "preview": "[graph]\ntargets = [\n  \"x86_64-pc-windows-msvc\",\n  \"i686-pc-windows-msvc\",\n  \"aarch64-pc-windows-msvc\",\n]\nall-features = "
  },
  {
    "path": "dependencies.json",
    "chars": 75431,
    "preview": "{\n  \"licenses\": [\n    [\n      \"0BSD\",\n      [\n        \"adler 1.0.2 registry+https://github.com/rust-lang/crates.io-index"
  },
  {
    "path": "docs/cli/adjust-container-padding.md",
    "chars": 331,
    "preview": "# adjust-container-padding\n\n```\nAdjust container padding on the focused workspace\n\nUsage: komorebic.exe adjust-container"
  },
  {
    "path": "docs/cli/adjust-workspace-padding.md",
    "chars": 331,
    "preview": "# adjust-workspace-padding\n\n```\nAdjust workspace padding on the focused workspace\n\nUsage: komorebic.exe adjust-workspace"
  },
  {
    "path": "docs/cli/ahk-app-specific-configuration.md",
    "chars": 439,
    "preview": "# ahk-app-specific-configuration\n\n```\nGenerate common app-specific configurations and fixes to use in komorebi.ahk\n\nUsag"
  },
  {
    "path": "docs/cli/animation-duration.md",
    "chars": 447,
    "preview": "# animation-duration\n\n```\nSet the duration for movement animations in ms\n\nUsage: komorebic.exe animation-duration [OPTIO"
  },
  {
    "path": "docs/cli/animation-fps.md",
    "chars": 228,
    "preview": "# animation-fps\n\n```\nSet the frames per second for movement animations\n\nUsage: komorebic.exe animation-fps <FPS>\n\nArgume"
  },
  {
    "path": "docs/cli/animation-style.md",
    "chars": 986,
    "preview": "# animation-style\n\n```\nSet the ease function for movement animations\n\nUsage: komorebic.exe animation-style [OPTIONS]\n\nOp"
  },
  {
    "path": "docs/cli/animation.md",
    "chars": 425,
    "preview": "# animation\n\n```\nEnable or disable movement animations\n\nUsage: komorebic.exe animation [OPTIONS] <BOOLEAN_STATE>\n\nArgume"
  },
  {
    "path": "docs/cli/application-specific-configuration-schema.md",
    "chars": 207,
    "preview": "# application-specific-configuration-schema\n\n```\nGenerate a JSON Schema for applications.json\n\nUsage: komorebic.exe appl"
  },
  {
    "path": "docs/cli/bar-configuration.md",
    "chars": 149,
    "preview": "# bar-configuration\n\n```\nShow the path to komorebi.bar.json\n\nUsage: komorebic.exe bar-configuration\n\nOptions:\n  -h, --he"
  },
  {
    "path": "docs/cli/border-colour.md",
    "chars": 399,
    "preview": "# border-colour\n\n```\nSet the colour for a window border kind\n\nUsage: komorebic.exe border-colour [OPTIONS] <R> <G> <B>\n\n"
  },
  {
    "path": "docs/cli/border-implementation.md",
    "chars": 420,
    "preview": "# border-implementation\n\n```\nSet the border implementation\n\nUsage: komorebic.exe border-implementation <STYLE>\n\nArgument"
  },
  {
    "path": "docs/cli/border-offset.md",
    "chars": 206,
    "preview": "# border-offset\n\n```\nSet the border offset\n\nUsage: komorebic.exe border-offset <OFFSET>\n\nArguments:\n  <OFFSET>\n         "
  },
  {
    "path": "docs/cli/border-style.md",
    "chars": 412,
    "preview": "# border-style\n\n```\nSet the border style\n\nUsage: komorebic.exe border-style <STYLE>\n\nArguments:\n  <STYLE>\n          Desi"
  },
  {
    "path": "docs/cli/border-width.md",
    "chars": 200,
    "preview": "# border-width\n\n```\nSet the border width\n\nUsage: komorebic.exe border-width <WIDTH>\n\nArguments:\n  <WIDTH>\n          Desi"
  },
  {
    "path": "docs/cli/border.md",
    "chars": 209,
    "preview": "# border\n\n```\nEnable or disable borders\n\nUsage: komorebic.exe border <BOOLEAN_STATE>\n\nArguments:\n  <BOOLEAN_STATE>\n     "
  },
  {
    "path": "docs/cli/cancel-preselect.md",
    "chars": 195,
    "preview": "# cancel-preselect\n\n```\nCancel a workspace preselect set by the preselect-direction command, if one exists\n\nUsage: komor"
  },
  {
    "path": "docs/cli/change-layout.md",
    "chars": 346,
    "preview": "# change-layout\n\n```\nSet the layout on the focused workspace\n\nUsage: komorebic.exe change-layout <DEFAULT_LAYOUT>\n\nArgum"
  },
  {
    "path": "docs/cli/check.md",
    "chars": 259,
    "preview": "# check\n\n```\nCheck komorebi configuration and related files for common errors\n\nUsage: komorebic.exe check [OPTIONS]\n\nOpt"
  },
  {
    "path": "docs/cli/clear-all-workspace-rules.md",
    "chars": 190,
    "preview": "# clear-all-workspace-rules\n\n```\nRemove all application association rules for all workspaces\n\nUsage: komorebic.exe clear"
  },
  {
    "path": "docs/cli/clear-named-workspace-layout-rules.md",
    "chars": 277,
    "preview": "# clear-named-workspace-layout-rules\n\n```\nClear all dynamic layout rules for the specified workspace\n\nUsage: komorebic.e"
  },
  {
    "path": "docs/cli/clear-named-workspace-rules.md",
    "chars": 265,
    "preview": "# clear-named-workspace-rules\n\n```\nRemove all application association rules for a named workspace\n\nUsage: komorebic.exe "
  },
  {
    "path": "docs/cli/clear-session-float-rules.md",
    "chars": 160,
    "preview": "# clear-session-float-rules\n\n```\nClear all session float rules\n\nUsage: komorebic.exe clear-session-float-rules\n\nOptions:"
  },
  {
    "path": "docs/cli/clear-workspace-layout-rules.md",
    "chars": 361,
    "preview": "# clear-workspace-layout-rules\n\n```\nClear all dynamic layout rules for the specified workspace\n\nUsage: komorebic.exe cle"
  },
  {
    "path": "docs/cli/clear-workspace-rules.md",
    "chars": 376,
    "preview": "# clear-workspace-rules\n\n```\nRemove all application association rules for a workspace by monitor and workspace index\n\nUs"
  },
  {
    "path": "docs/cli/close-workspace.md",
    "chars": 166,
    "preview": "# close-workspace\n\n```\nClose the focused workspace (must be empty and unnamed)\n\nUsage: komorebic.exe close-workspace\n\nOp"
  },
  {
    "path": "docs/cli/close.md",
    "chars": 115,
    "preview": "# close\n\n```\nClose the focused window\n\nUsage: komorebic.exe close\n\nOptions:\n  -h, --help\n          Print help\n\n```\n"
  },
  {
    "path": "docs/cli/complete-configuration.md",
    "chars": 237,
    "preview": "# complete-configuration\n\n```\nFor legacy komorebi.ahk or komorebi.ps1 configurations, signal that the final configuratio"
  },
  {
    "path": "docs/cli/configuration.md",
    "chars": 137,
    "preview": "# configuration\n\n```\nShow the path to komorebi.json\n\nUsage: komorebic.exe configuration\n\nOptions:\n  -h, --help\n         "
  },
  {
    "path": "docs/cli/container-padding.md",
    "chars": 394,
    "preview": "# container-padding\n\n```\nSet the container padding for the specified workspace\n\nUsage: komorebic.exe container-padding <"
  },
  {
    "path": "docs/cli/convert-app-specific-configuration.md",
    "chars": 313,
    "preview": "# convert-app-specific-configuration\n\n```\nConvert a v1 ASC YAML file to a v2 ASC JSON file\n\nUsage: komorebic.exe convert"
  },
  {
    "path": "docs/cli/cross-monitor-move-behaviour.md",
    "chars": 616,
    "preview": "# cross-monitor-move-behaviour\n\n```\nSet the behaviour when moving windows across monitor boundaries\n\nUsage: komorebic.ex"
  },
  {
    "path": "docs/cli/cycle-empty-workspace.md",
    "chars": 292,
    "preview": "# cycle-empty-workspace\n\n```\nFocus the next empty workspace in the given cycle direction (if one exists)\n\nUsage: komoreb"
  },
  {
    "path": "docs/cli/cycle-focus.md",
    "chars": 256,
    "preview": "# cycle-focus\n\n```\nChange focus to the window in the specified cycle direction\n\nUsage: komorebic.exe cycle-focus <CYCLE_"
  },
  {
    "path": "docs/cli/cycle-layout.md",
    "chars": 230,
    "preview": "# cycle-layout\n\n```\nCycle between available layouts\n\nUsage: komorebic.exe cycle-layout <CYCLE_DIRECTION>\n\nArguments:\n  <"
  },
  {
    "path": "docs/cli/cycle-monitor.md",
    "chars": 247,
    "preview": "# cycle-monitor\n\n```\nFocus the monitor in the given cycle direction\n\nUsage: komorebic.exe cycle-monitor <CYCLE_DIRECTION"
  },
  {
    "path": "docs/cli/cycle-move-to-monitor.md",
    "chars": 284,
    "preview": "# cycle-move-to-monitor\n\n```\nMove the focused window to the monitor in the given cycle direction\n\nUsage: komorebic.exe c"
  },
  {
    "path": "docs/cli/cycle-move-to-workspace.md",
    "chars": 290,
    "preview": "# cycle-move-to-workspace\n\n```\nMove the focused window to the workspace in the given cycle direction\n\nUsage: komorebic.e"
  },
  {
    "path": "docs/cli/cycle-move-workspace-to-monitor.md",
    "chars": 300,
    "preview": "# cycle-move-workspace-to-monitor\n\n```\nMove the focused workspace monitor in the given cycle direction\n\nUsage: komorebic"
  },
  {
    "path": "docs/cli/cycle-move.md",
    "chars": 251,
    "preview": "# cycle-move\n\n```\nMove the focused window in the specified cycle direction\n\nUsage: komorebic.exe cycle-move <CYCLE_DIREC"
  },
  {
    "path": "docs/cli/cycle-send-to-monitor.md",
    "chars": 284,
    "preview": "# cycle-send-to-monitor\n\n```\nSend the focused window to the monitor in the given cycle direction\n\nUsage: komorebic.exe c"
  },
  {
    "path": "docs/cli/cycle-send-to-workspace.md",
    "chars": 290,
    "preview": "# cycle-send-to-workspace\n\n```\nSend the focused window to the workspace in the given cycle direction\n\nUsage: komorebic.e"
  },
  {
    "path": "docs/cli/cycle-stack-index.md",
    "chars": 300,
    "preview": "# cycle-stack-index\n\n```\nCycle the index of the focused window in the focused stack in the specified cycle direction\n\nUs"
  },
  {
    "path": "docs/cli/cycle-stack.md",
    "chars": 253,
    "preview": "# cycle-stack\n\n```\nCycle the focused stack in the specified cycle direction\n\nUsage: komorebic.exe cycle-stack <CYCLE_DIR"
  },
  {
    "path": "docs/cli/cycle-workspace.md",
    "chars": 253,
    "preview": "# cycle-workspace\n\n```\nFocus the workspace in the given cycle direction\n\nUsage: komorebic.exe cycle-workspace <CYCLE_DIR"
  },
  {
    "path": "docs/cli/data-directory.md",
    "chars": 169,
    "preview": "# data-directory\n\n```\nShow the path to komorebi's data directory in %LOCALAPPDATA%\n\nUsage: komorebic.exe data-directory\n"
  },
  {
    "path": "docs/cli/disable-autostart.md",
    "chars": 186,
    "preview": "# disable-autostart\n\n```\nDeletes the komorebi.lnk shortcut in shell:startup to disable autostart\n\nUsage: komorebic.exe d"
  },
  {
    "path": "docs/cli/display-index-preference.md",
    "chars": 389,
    "preview": "# display-index-preference\n\n```\nSet the display index preference for a monitor identified using its display name\n\nUsage:"
  },
  {
    "path": "docs/cli/eager-focus.md",
    "chars": 222,
    "preview": "# eager-focus\n\n```\nFocus the first managed window matching the given exe\n\nUsage: komorebic.exe eager-focus <EXE>\n\nArgume"
  },
  {
    "path": "docs/cli/enable-autostart.md",
    "chars": 429,
    "preview": "# enable-autostart\n\n```\nGenerates the komorebi.lnk shortcut in shell:startup to autostart komorebi\n\nUsage: komorebic.exe"
  },
  {
    "path": "docs/cli/enforce-workspace-rules.md",
    "chars": 220,
    "preview": "# enforce-workspace-rules\n\n```\nEnforce all workspace rules, including initial workspace rules that have already been app"
  },
  {
    "path": "docs/cli/ensure-named-workspaces.md",
    "chars": 323,
    "preview": "# ensure-named-workspaces\n\n```\nCreate these many named workspaces for the specified monitor\n\nUsage: komorebic.exe ensure"
  },
  {
    "path": "docs/cli/ensure-workspaces.md",
    "chars": 328,
    "preview": "# ensure-workspaces\n\n```\nCreate at least this many workspaces for the specified monitor\n\nUsage: komorebic.exe ensure-wor"
  },
  {
    "path": "docs/cli/fetch-app-specific-configuration.md",
    "chars": 239,
    "preview": "# fetch-app-specific-configuration\n\n```\nFetch the latest version of applications.json from komorebi-application-specific"
  },
  {
    "path": "docs/cli/flip-layout.md",
    "chars": 246,
    "preview": "# flip-layout\n\n```\nFlip the layout on the focused workspace\n\nUsage: komorebic.exe flip-layout <AXIS>\n\nArguments:\n  <AXIS"
  },
  {
    "path": "docs/cli/focus-last-workspace.md",
    "chars": 176,
    "preview": "# focus-last-workspace\n\n```\nFocus the last focused workspace on the focused monitor\n\nUsage: komorebic.exe focus-last-wor"
  },
  {
    "path": "docs/cli/focus-monitor-at-cursor.md",
    "chars": 175,
    "preview": "# focus-monitor-at-cursor\n\n```\nFocus the monitor at the current cursor location\n\nUsage: komorebic.exe focus-monitor-at-c"
  },
  {
    "path": "docs/cli/focus-monitor-workspace.md",
    "chars": 376,
    "preview": "# focus-monitor-workspace\n\n```\nFocus the specified workspace on the target monitor\n\nUsage: komorebic.exe focus-monitor-w"
  },
  {
    "path": "docs/cli/focus-monitor.md",
    "chars": 204,
    "preview": "# focus-monitor\n\n```\nFocus the specified monitor\n\nUsage: komorebic.exe focus-monitor <TARGET>\n\nArguments:\n  <TARGET>\n   "
  },
  {
    "path": "docs/cli/focus-named-workspace.md",
    "chars": 222,
    "preview": "# focus-named-workspace\n\n```\nFocus the specified workspace\n\nUsage: komorebic.exe focus-named-workspace <WORKSPACE>\n\nArgu"
  },
  {
    "path": "docs/cli/focus-stack-window.md",
    "chars": 240,
    "preview": "# focus-stack-window\n\n```\nFocus the specified window index in the focused stack\n\nUsage: komorebic.exe focus-stack-window"
  },
  {
    "path": "docs/cli/focus-workspace.md",
    "chars": 233,
    "preview": "# focus-workspace\n\n```\nFocus the specified workspace on the focused monitor\n\nUsage: komorebic.exe focus-workspace <TARGE"
  },
  {
    "path": "docs/cli/focus-workspaces.md",
    "chars": 228,
    "preview": "# focus-workspaces\n\n```\nFocus the specified workspace on all monitors\n\nUsage: komorebic.exe focus-workspaces <TARGET>\n\nA"
  },
  {
    "path": "docs/cli/focus.md",
    "chars": 253,
    "preview": "# focus\n\n```\nChange focus to the window in the specified direction\n\nUsage: komorebic.exe focus <OPERATION_DIRECTION>\n\nAr"
  },
  {
    "path": "docs/cli/focused-workspace-container-padding.md",
    "chars": 268,
    "preview": "# focused-workspace-container-padding\n\n```\nSet container padding on the focused workspace\n\nUsage: komorebic.exe focused-"
  },
  {
    "path": "docs/cli/focused-workspace-padding.md",
    "chars": 248,
    "preview": "# focused-workspace-padding\n\n```\nSet workspace padding on the focused workspace\n\nUsage: komorebic.exe focused-workspace-"
  },
  {
    "path": "docs/cli/force-focus.md",
    "chars": 166,
    "preview": "# force-focus\n\n```\nForcibly focus the window at the cursor with a left mouse click\n\nUsage: komorebic.exe force-focus\n\nOp"
  },
  {
    "path": "docs/cli/generate-static-config.md",
    "chars": 209,
    "preview": "# generate-static-config\n\n```\nGenerates a static configuration JSON file based on the current window manager state\n\nUsag"
  },
  {
    "path": "docs/cli/global-state.md",
    "chars": 159,
    "preview": "# global-state\n\n```\nShow a JSON representation of the current global state\n\nUsage: komorebic.exe global-state\n\nOptions:\n"
  },
  {
    "path": "docs/cli/global-work-area-offset.md",
    "chars": 553,
    "preview": "# global-work-area-offset\n\n```\nSet offsets to exclude parts of the work area from tiling\n\nUsage: komorebic.exe global-wo"
  },
  {
    "path": "docs/cli/gui.md",
    "chars": 125,
    "preview": "# gui\n\n```\nLaunch the komorebi-gui debugging tool\n\nUsage: komorebic.exe gui\n\nOptions:\n  -h, --help\n          Print help\n"
  },
  {
    "path": "docs/cli/identify-layered-application.md",
    "chars": 351,
    "preview": "# identify-layered-application\n\n```\nIdentify an application that has WS_EX_LAYERED, but should still be managed\n\nUsage: "
  },
  {
    "path": "docs/cli/identify-object-name-change-application.md",
    "chars": 366,
    "preview": "# identify-object-name-change-application\n\n```\nIdentify an application that sends EVENT_OBJECT_NAMECHANGE on launch\n\nUsa"
  },
  {
    "path": "docs/cli/identify-tray-application.md",
    "chars": 324,
    "preview": "# identify-tray-application\n\n```\nIdentify an application that closes to the system tray\n\nUsage: komorebic.exe identify-t"
  },
  {
    "path": "docs/cli/ignore-rule.md",
    "chars": 288,
    "preview": "# ignore-rule\n\n```\nAdd a rule to ignore the specified application\n\nUsage: komorebic.exe ignore-rule <IDENTIFIER> <ID>\n\nA"
  },
  {
    "path": "docs/cli/initial-named-workspace-rule.md",
    "chars": 408,
    "preview": "# initial-named-workspace-rule\n\n```\nAdd a rule to associate an application with a named workspace on first show\n\nUsage: "
  },
  {
    "path": "docs/cli/initial-workspace-rule.md",
    "chars": 488,
    "preview": "# initial-workspace-rule\n\n```\nAdd a rule to associate an application with a workspace on first show\n\nUsage: komorebic.ex"
  },
  {
    "path": "docs/cli/invisible-borders.md",
    "chars": 488,
    "preview": "# invisible-borders\n\n```\nSet the invisible border dimensions around each window\n\nUsage: komorebic.exe invisible-borders "
  },
  {
    "path": "docs/cli/kill.md",
    "chars": 379,
    "preview": "# kill\n\n```\nKill background processes started by komorebic\n\nUsage: komorebic.exe kill [OPTIONS]\n\nOptions:\n      --whkd\n "
  },
  {
    "path": "docs/cli/license.md",
    "chars": 271,
    "preview": "# license\n\n```\nSpecify an email associated with an Individual Commercial Use License\n\nUsage: komorebic.exe license <EMAI"
  },
  {
    "path": "docs/cli/load-resize.md",
    "chars": 248,
    "preview": "# load-resize\n\n```\nLoad the resize layout dimensions from a file\n\nUsage: komorebic.exe load-resize <PATH>\n\nArguments:\n  "
  },
  {
    "path": "docs/cli/log.md",
    "chars": 140,
    "preview": "# log\n\n```\nTail komorebi.exe's process logs (cancel with Ctrl-C)\n\nUsage: komorebic.exe log\n\nOptions:\n  -h, --help\n      "
  },
  {
    "path": "docs/cli/manage-rule.md",
    "chars": 295,
    "preview": "# manage-rule\n\n```\nAdd a rule to always manage the specified application\n\nUsage: komorebic.exe manage-rule <IDENTIFIER> "
  },
  {
    "path": "docs/cli/manage.md",
    "chars": 136,
    "preview": "# manage\n\n```\nForce komorebi to manage the focused window\n\nUsage: komorebic.exe manage\n\nOptions:\n  -h, --help\n          "
  },
  {
    "path": "docs/cli/minimize.md",
    "chars": 124,
    "preview": "# minimize\n\n```\nMinimize the focused window\n\nUsage: komorebic.exe minimize\n\nOptions:\n  -h, --help\n          Print help\n\n"
  },
  {
    "path": "docs/cli/monitor-index-preference.md",
    "chars": 568,
    "preview": "# monitor-index-preference\n\n```\nSet the monitor index preference for a monitor identified using its size\n\nUsage: komoreb"
  },
  {
    "path": "docs/cli/monitor-information.md",
    "chars": 160,
    "preview": "# monitor-information\n\n```\nShow information about connected monitors\n\nUsage: komorebic.exe monitor-information\n\nOptions:"
  },
  {
    "path": "docs/cli/monitor-work-area-offset.md",
    "chars": 631,
    "preview": "# monitor-work-area-offset\n\n```\nSet offsets for a monitor to exclude parts of the work area from tiling\n\nUsage: komorebi"
  },
  {
    "path": "docs/cli/mouse-follows-focus.md",
    "chars": 265,
    "preview": "# mouse-follows-focus\n\n```\nEnable or disable mouse follows focus on all workspaces\n\nUsage: komorebic.exe mouse-follows-f"
  },
  {
    "path": "docs/cli/move-to-last-workspace.md",
    "chars": 186,
    "preview": "# move-to-last-workspace\n\n```\nMove the focused window to the last focused monitor workspace\n\nUsage: komorebic.exe move-t"
  },
  {
    "path": "docs/cli/move-to-monitor-workspace.md",
    "chars": 387,
    "preview": "# move-to-monitor-workspace\n\n```\nMove the focused window to the specified monitor workspace\n\nUsage: komorebic.exe move-t"
  },
  {
    "path": "docs/cli/move-to-monitor.md",
    "chars": 229,
    "preview": "# move-to-monitor\n\n```\nMove the focused window to the specified monitor\n\nUsage: komorebic.exe move-to-monitor <TARGET>\n\n"
  },
  {
    "path": "docs/cli/move-to-named-workspace.md",
    "chars": 247,
    "preview": "# move-to-named-workspace\n\n```\nMove the focused window to the specified workspace\n\nUsage: komorebic.exe move-to-named-wo"
  },
  {
    "path": "docs/cli/move-to-workspace.md",
    "chars": 235,
    "preview": "# move-to-workspace\n\n```\nMove the focused window to the specified workspace\n\nUsage: komorebic.exe move-to-workspace <TAR"
  },
  {
    "path": "docs/cli/move-workspace-to-monitor.md",
    "chars": 252,
    "preview": "# move-workspace-to-monitor\n\n```\nMove the focused workspace to the specified monitor\n\nUsage: komorebic.exe move-workspac"
  },
  {
    "path": "docs/cli/move.md",
    "chars": 248,
    "preview": "# move\n\n```\nMove the focused window in the specified direction\n\nUsage: komorebic.exe move <OPERATION_DIRECTION>\n\nArgumen"
  },
  {
    "path": "docs/cli/named-workspace-container-padding.md",
    "chars": 330,
    "preview": "# named-workspace-container-padding\n\n```\nSet the container padding for the specified workspace\n\nUsage: komorebic.exe nam"
  },
  {
    "path": "docs/cli/named-workspace-layout-rule.md",
    "chars": 565,
    "preview": "# named-workspace-layout-rule\n\n```\nAdd a dynamic layout rule for the specified workspace\n\nUsage: komorebic.exe named-wor"
  },
  {
    "path": "docs/cli/named-workspace-layout.md",
    "chars": 408,
    "preview": "# named-workspace-layout\n\n```\nSet the layout for the specified workspace\n\nUsage: komorebic.exe named-workspace-layout <W"
  },
  {
    "path": "docs/cli/named-workspace-padding.md",
    "chars": 310,
    "preview": "# named-workspace-padding\n\n```\nSet the workspace padding for the specified workspace\n\nUsage: komorebic.exe named-workspa"
  },
  {
    "path": "docs/cli/named-workspace-rule.md",
    "chars": 378,
    "preview": "# named-workspace-rule\n\n```\nAdd a rule to associate an application with a named workspace\n\nUsage: komorebic.exe named-wo"
  },
  {
    "path": "docs/cli/named-workspace-tiling.md",
    "chars": 318,
    "preview": "# named-workspace-tiling\n\n```\nEnable or disable window tiling for the specified workspace\n\nUsage: komorebic.exe named-wo"
  },
  {
    "path": "docs/cli/new-workspace.md",
    "chars": 163,
    "preview": "# new-workspace\n\n```\nCreate and append a new workspace on the focused monitor\n\nUsage: komorebic.exe new-workspace\n\nOptio"
  },
  {
    "path": "docs/cli/notification-schema.md",
    "chars": 171,
    "preview": "# notification-schema\n\n```\nGenerate a JSON Schema of subscription notifications\n\nUsage: komorebic.exe notification-schem"
  },
  {
    "path": "docs/cli/preselect-direction.md",
    "chars": 316,
    "preview": "# preselect-direction\n\n```\nPreselect the specified direction for the next window to be spawned on supported layouts\n\nUsa"
  },
  {
    "path": "docs/cli/promote-focus.md",
    "chars": 152,
    "preview": "# promote-focus\n\n```\nPromote the user focus to the top of the tree\n\nUsage: komorebic.exe promote-focus\n\nOptions:\n  -h, -"
  },
  {
    "path": "docs/cli/promote-swap.md",
    "chars": 203,
    "preview": "# promote-swap\n\n```\nPromote the focused window to the largest tile by swapping container indices with the largest tile\n\n"
  },
  {
    "path": "docs/cli/promote-window.md",
    "chars": 263,
    "preview": "# promote-window\n\n```\nPromote the window in the specified direction\n\nUsage: komorebic.exe promote-window <OPERATION_DIRE"
  },
  {
    "path": "docs/cli/promote.md",
    "chars": 180,
    "preview": "# promote\n\n```\nPromote the focused window to the largest tile via container removal and re-insertion\n\nUsage: komorebic.e"
  },
  {
    "path": "docs/cli/pwsh-app-specific-configuration.md",
    "chars": 441,
    "preview": "# pwsh-app-specific-configuration\n\n```\nGenerate common app-specific configurations and fixes in a PowerShell script\n\nUsa"
  },
  {
    "path": "docs/cli/query.md",
    "chars": 377,
    "preview": "# query\n\n```\nQuery the current window manager state\n\nUsage: komorebic.exe query <STATE_QUERY>\n\nArguments:\n  <STATE_QUERY"
  },
  {
    "path": "docs/cli/quick-load-resize.md",
    "chars": 164,
    "preview": "# quick-load-resize\n\n```\nLoad the last quicksaved resize layout dimensions\n\nUsage: komorebic.exe quick-load-resize\n\nOpti"
  },
  {
    "path": "docs/cli/quick-save-resize.md",
    "chars": 161,
    "preview": "# quick-save-resize\n\n```\nQuicksave the current resize layout dimensions\n\nUsage: komorebic.exe quick-save-resize\n\nOptions"
  },
  {
    "path": "docs/cli/quickstart.md",
    "chars": 156,
    "preview": "# quickstart\n\n```\nGather example configurations for a new-user quickstart\n\nUsage: komorebic.exe quickstart\n\nOptions:\n  -"
  },
  {
    "path": "docs/cli/reload-configuration.md",
    "chars": 194,
    "preview": "# reload-configuration\n\n```\nReload legacy komorebi.ahk or komorebi.ps1 configurations (if they exist)\n\nUsage: komorebic."
  },
  {
    "path": "docs/cli/remove-title-bar.md",
    "chars": 298,
    "preview": "# remove-title-bar\n\n```\nWhitelist an application for title bar removal\n\nUsage: komorebic.exe remove-title-bar <IDENTIFIE"
  },
  {
    "path": "docs/cli/replace-configuration.md",
    "chars": 330,
    "preview": "# replace-configuration\n\n```\nReplace the configuration of a running instance of komorebi from a static configuration fil"
  },
  {
    "path": "docs/cli/resize-axis.md",
    "chars": 343,
    "preview": "# resize-axis\n\n```\nResize the focused window or primary column along the specified axis\n\nUsage: komorebic.exe resize-axi"
  },
  {
    "path": "docs/cli/resize-delta.md",
    "chars": 290,
    "preview": "# resize-delta\n\n```\nSet the resize delta (used by resize-edge and resize-axis)\n\nUsage: komorebic.exe resize-delta <PIXEL"
  },
  {
    "path": "docs/cli/resize-edge.md",
    "chars": 303,
    "preview": "# resize-edge\n\n```\nResize the focused window in the specified direction\n\nUsage: komorebic.exe resize-edge <EDGE> <SIZING"
  },
  {
    "path": "docs/cli/restore-windows.md",
    "chars": 157,
    "preview": "# restore-windows\n\n```\nRestore all hidden windows (debugging command)\n\nUsage: komorebic.exe restore-windows\n\nOptions:\n  "
  },
  {
    "path": "docs/cli/retile.md",
    "chars": 134,
    "preview": "# retile\n\n```\nForce the retiling of all managed windows\n\nUsage: komorebic.exe retile\n\nOptions:\n  -h, --help\n          Pr"
  },
  {
    "path": "docs/cli/save-resize.md",
    "chars": 251,
    "preview": "# save-resize\n\n```\nSave the current resize layout dimensions to a file\n\nUsage: komorebic.exe save-resize <PATH>\n\nArgumen"
  },
  {
    "path": "docs/cli/scrolling-layout-columns.md",
    "chars": 286,
    "preview": "# scrolling-layout-columns\n\n```\nSet the number of visible columns for the Scrolling layout on the focused workspace\n\nUsa"
  },
  {
    "path": "docs/cli/send-to-last-workspace.md",
    "chars": 186,
    "preview": "# send-to-last-workspace\n\n```\nSend the focused window to the last focused monitor workspace\n\nUsage: komorebic.exe send-t"
  },
  {
    "path": "docs/cli/send-to-monitor-workspace.md",
    "chars": 387,
    "preview": "# send-to-monitor-workspace\n\n```\nSend the focused window to the specified monitor workspace\n\nUsage: komorebic.exe send-t"
  },
  {
    "path": "docs/cli/send-to-monitor.md",
    "chars": 229,
    "preview": "# send-to-monitor\n\n```\nSend the focused window to the specified monitor\n\nUsage: komorebic.exe send-to-monitor <TARGET>\n\n"
  },
  {
    "path": "docs/cli/send-to-named-workspace.md",
    "chars": 247,
    "preview": "# send-to-named-workspace\n\n```\nSend the focused window to the specified workspace\n\nUsage: komorebic.exe send-to-named-wo"
  },
  {
    "path": "docs/cli/send-to-workspace.md",
    "chars": 235,
    "preview": "# send-to-workspace\n\n```\nSend the focused window to the specified workspace\n\nUsage: komorebic.exe send-to-workspace <TAR"
  },
  {
    "path": "docs/cli/session-float-rule.md",
    "chars": 187,
    "preview": "# session-float-rule\n\n```\nAdd a rule to float the foreground window for the rest of this session\n\nUsage: komorebic.exe s"
  },
  {
    "path": "docs/cli/session-float-rules.md",
    "chars": 147,
    "preview": "# session-float-rules\n\n```\nShow all session float rules\n\nUsage: komorebic.exe session-float-rules\n\nOptions:\n  -h, --help"
  },
  {
    "path": "docs/cli/socket-schema.md",
    "chars": 148,
    "preview": "# socket-schema\n\n```\nGenerate a JSON Schema of socket messages\n\nUsage: komorebic.exe socket-schema\n\nOptions:\n  -h, --hel"
  },
  {
    "path": "docs/cli/stack-all.md",
    "chars": 141,
    "preview": "# stack-all\n\n```\nStack all windows on the focused workspace\n\nUsage: komorebic.exe stack-all\n\nOptions:\n  -h, --help\n     "
  },
  {
    "path": "docs/cli/stack.md",
    "chars": 251,
    "preview": "# stack\n\n```\nStack the focused window in the specified direction\n\nUsage: komorebic.exe stack <OPERATION_DIRECTION>\n\nArgu"
  },
  {
    "path": "docs/cli/stackbar-mode.md",
    "chars": 252,
    "preview": "# stackbar-mode\n\n```\nSet the stackbar mode\n\nUsage: komorebic.exe stackbar-mode <MODE>\n\nArguments:\n  <MODE>\n          Des"
  },
  {
    "path": "docs/cli/start.md",
    "chars": 802,
    "preview": "# start\n\n```\nStart komorebi.exe as a background process\n\nUsage: komorebic.exe start [OPTIONS]\n\nOptions:\n  -c, --config <"
  },
  {
    "path": "docs/cli/state.md",
    "chars": 153,
    "preview": "# state\n\n```\nShow a JSON representation of the current window manager state\n\nUsage: komorebic.exe state\n\nOptions:\n  -h, "
  },
  {
    "path": "docs/cli/static-config-schema.md",
    "chars": 176,
    "preview": "# static-config-schema\n\n```\nGenerate a JSON Schema of the static configuration file\n\nUsage: komorebic.exe static-config-"
  },
  {
    "path": "docs/cli/stop.md",
    "chars": 393,
    "preview": "# stop\n\n```\nStop the komorebi.exe process and restore all hidden windows\n\nUsage: komorebic.exe stop [OPTIONS]\n\nOptions:\n"
  },
  {
    "path": "docs/cli/subscribe-pipe.md",
    "chars": 286,
    "preview": "# subscribe-pipe\n\n```\nSubscribe to komorebi events using a Named Pipe\n\nUsage: komorebic.exe subscribe-pipe <NAMED_PIPE>\n"
  },
  {
    "path": "docs/cli/subscribe-socket.md",
    "chars": 260,
    "preview": "# subscribe-socket\n\n```\nSubscribe to komorebi events using a Unix Domain Socket\n\nUsage: komorebic.exe subscribe-socket <"
  },
  {
    "path": "docs/cli/swap-workspaces-with-monitor.md",
    "chars": 261,
    "preview": "# swap-workspaces-with-monitor\n\n```\nSwap focused monitor workspaces with specified monitor\n\nUsage: komorebic.exe swap-wo"
  },
  {
    "path": "docs/cli/toggle-cross-monitor-move-behaviour.md",
    "chars": 217,
    "preview": "# toggle-cross-monitor-move-behaviour\n\n```\nToggle the behaviour when moving windows across monitor boundaries\n\nUsage: ko"
  },
  {
    "path": "docs/cli/toggle-float-override.md",
    "chars": 214,
    "preview": "# toggle-float-override\n\n```\nEnable or disable float override, which makes it so every new window opens in floating mode"
  },
  {
    "path": "docs/cli/toggle-float.md",
    "chars": 148,
    "preview": "# toggle-float\n\n```\nToggle floating mode for the focused window\n\nUsage: komorebic.exe toggle-float\n\nOptions:\n  -h, --hel"
  },
  {
    "path": "docs/cli/toggle-lock.md",
    "chars": 196,
    "preview": "# toggle-lock\n\n```\nToggle a lock for the focused container, ensuring it will not be displaced by any new windows\n\nUsage:"
  },
  {
    "path": "docs/cli/toggle-maximize.md",
    "chars": 160,
    "preview": "# toggle-maximize\n\n```\nToggle native maximization for the focused window\n\nUsage: komorebic.exe toggle-maximize\n\nOptions:"
  },
  {
    "path": "docs/cli/toggle-monocle.md",
    "chars": 154,
    "preview": "# toggle-monocle\n\n```\nToggle monocle mode for the focused container\n\nUsage: komorebic.exe toggle-monocle\n\nOptions:\n  -h,"
  },
  {
    "path": "docs/cli/toggle-mouse-follows-focus.md",
    "chars": 177,
    "preview": "# toggle-mouse-follows-focus\n\n```\nToggle mouse follows focus on all workspaces\n\nUsage: komorebic.exe toggle-mouse-follow"
  },
  {
    "path": "docs/cli/toggle-pause.md",
    "chars": 150,
    "preview": "# toggle-pause\n\n```\nToggle the paused state for all window tiling\n\nUsage: komorebic.exe toggle-pause\n\nOptions:\n  -h, --h"
  },
  {
    "path": "docs/cli/toggle-shortcuts.md",
    "chars": 149,
    "preview": "# toggle-shortcuts\n\n```\nToggle the komorebi-shortcuts helper\n\nUsage: komorebic.exe toggle-shortcuts\n\nOptions:\n  -h, --he"
  },
  {
    "path": "docs/cli/toggle-tiling.md",
    "chars": 152,
    "preview": "# toggle-tiling\n\n```\nToggle window tiling on the focused workspace\n\nUsage: komorebic.exe toggle-tiling\n\nOptions:\n  -h, -"
  },
  {
    "path": "docs/cli/toggle-title-bars.md",
    "chars": 161,
    "preview": "# toggle-title-bars\n\n```\nToggle title bars for whitelisted applications\n\nUsage: komorebic.exe toggle-title-bars\n\nOptions"
  },
  {
    "path": "docs/cli/toggle-transparency.md",
    "chars": 160,
    "preview": "# toggle-transparency\n\n```\nToggle transparency for unfocused windows\n\nUsage: komorebic.exe toggle-transparency\n\nOptions:"
  },
  {
    "path": "docs/cli/toggle-window-based-work-area-offset.md",
    "chars": 234,
    "preview": "# toggle-window-based-work-area-offset\n\n```\nToggle application of the window-based work area offset for the focused work"
  },
  {
    "path": "docs/cli/toggle-window-container-behaviour.md",
    "chars": 212,
    "preview": "# toggle-window-container-behaviour\n\n```\nToggle the behaviour for new windows (stacking or dynamic tiling)\n\nUsage: komor"
  },
  {
    "path": "docs/cli/toggle-workspace-float-override.md",
    "chars": 378,
    "preview": "# toggle-workspace-float-override\n\n```\nEnable or disable float override, which makes it so every new window opens in flo"
  },
  {
    "path": "docs/cli/toggle-workspace-layer.md",
    "chars": 195,
    "preview": "# toggle-workspace-layer\n\n```\nToggle between the Tiling and Floating layers on the focused workspace\n\nUsage: komorebic.e"
  },
  {
    "path": "docs/cli/toggle-workspace-window-container-behaviour.md",
    "chars": 366,
    "preview": "# toggle-workspace-window-container-behaviour\n\n```\nToggle the behaviour for new windows (stacking or dynamic tiling) for"
  },
  {
    "path": "docs/cli/transparency-alpha.md",
    "chars": 216,
    "preview": "# transparency-alpha\n\n```\nSet the alpha value for unfocused window transparency\n\nUsage: komorebic.exe transparency-alpha"
  },
  {
    "path": "docs/cli/transparency.md",
    "chars": 248,
    "preview": "# transparency\n\n```\nEnable or disable transparency for unfocused windows\n\nUsage: komorebic.exe transparency <BOOLEAN_STA"
  },
  {
    "path": "docs/cli/unmanage.md",
    "chars": 140,
    "preview": "# unmanage\n\n```\nUnmanage a window that was forcibly managed\n\nUsage: komorebic.exe unmanage\n\nOptions:\n  -h, --help\n      "
  },
  {
    "path": "docs/cli/unmanaged-window-operation-behaviour.md",
    "chars": 503,
    "preview": "# unmanaged-window-operation-behaviour\n\n```\nSet the operation behaviour when the focused window is not managed\n\nUsage: k"
  },
  {
    "path": "docs/cli/unstack-all.md",
    "chars": 147,
    "preview": "# unstack-all\n\n```\nUnstack all windows in the focused container\n\nUsage: komorebic.exe unstack-all\n\nOptions:\n  -h, --help"
  },
  {
    "path": "docs/cli/unstack.md",
    "chars": 121,
    "preview": "# unstack\n\n```\nUnstack the focused window\n\nUsage: komorebic.exe unstack\n\nOptions:\n  -h, --help\n          Print help\n\n```"
  },
  {
    "path": "docs/cli/unsubscribe-pipe.md",
    "chars": 283,
    "preview": "# unsubscribe-pipe\n\n```\nUnsubscribe from komorebi events\n\nUsage: komorebic.exe unsubscribe-pipe <NAMED_PIPE>\n\nArguments:"
  },
  {
    "path": "docs/cli/unsubscribe-socket.md",
    "chars": 249,
    "preview": "# unsubscribe-socket\n\n```\nUnsubscribe from komorebi events\n\nUsage: komorebic.exe unsubscribe-socket <SOCKET>\n\nArguments:"
  },
  {
    "path": "docs/cli/visible-windows.md",
    "chars": 156,
    "preview": "# visible-windows\n\n```\nShow a JSON representation of visible windows\n\nUsage: komorebic.exe visible-windows\n\nOptions:\n  -"
  },
  {
    "path": "docs/cli/watch-configuration.md",
    "chars": 306,
    "preview": "# watch-configuration\n\n```\nEnable or disable watching of legacy komorebi.ahk or komorebi.ps1 configurations (if they exi"
  },
  {
    "path": "docs/cli/whkdrc.md",
    "chars": 116,
    "preview": "# whkdrc\n\n```\nShow the path to whkdrc\n\nUsage: komorebic.exe whkdrc\n\nOptions:\n  -h, --help\n          Print help\n\n```\n"
  },
  {
    "path": "docs/cli/window-hiding-behaviour.md",
    "chars": 682,
    "preview": "# window-hiding-behaviour\n\n```\nSet the window behaviour when switching workspaces / cycling stacks\n\nUsage: komorebic.exe"
  },
  {
    "path": "docs/cli/workspace-layout-rule.md",
    "chars": 649,
    "preview": "# workspace-layout-rule\n\n```\nAdd a dynamic layout rule for the specified workspace\n\nUsage: komorebic.exe workspace-layou"
  },
  {
    "path": "docs/cli/workspace-layout.md",
    "chars": 492,
    "preview": "# workspace-layout\n\n```\nSet the layout for the specified workspace\n\nUsage: komorebic.exe workspace-layout <MONITOR> <WOR"
  },
  {
    "path": "docs/cli/workspace-name.md",
    "chars": 388,
    "preview": "# workspace-name\n\n```\nSet the workspace name for the specified workspace\n\nUsage: komorebic.exe workspace-name <MONITOR> "
  },
  {
    "path": "docs/cli/workspace-padding.md",
    "chars": 394,
    "preview": "# workspace-padding\n\n```\nSet the workspace padding for the specified workspace\n\nUsage: komorebic.exe workspace-padding <"
  },
  {
    "path": "docs/cli/workspace-rule.md",
    "chars": 458,
    "preview": "# workspace-rule\n\n```\nAdd a rule to associate an application with a workspace\n\nUsage: komorebic.exe workspace-rule <IDEN"
  },
  {
    "path": "docs/cli/workspace-tiling.md",
    "chars": 402,
    "preview": "# workspace-tiling\n\n```\nEnable or disable window tiling for the specified workspace\n\nUsage: komorebic.exe workspace-tili"
  },
  {
    "path": "docs/cli/workspace-work-area-offset.md",
    "chars": 705,
    "preview": "# workspace-work-area-offset\n\n```\nSet offsets for a workspace to exclude parts of the work area from tiling\n\nUsage: komo"
  },
  {
    "path": "docs/common-workflows/animations.md",
    "chars": 792,
    "preview": "# Animations\n\nIf you would like to add window movement animations, ensure the following options are\ndefined in the `komo"
  },
  {
    "path": "docs/common-workflows/autohotkey.md",
    "chars": 824,
    "preview": "# AutoHotkey\n\nIf you would like to use Autohotkey, please make sure you have AutoHotKey v2\ninstalled.\n\nGenerally, users "
  }
]

// ... and 136 more files (download for full content)

About this extraction

This page contains the full source code of the LGUG2Z/komorebi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 336 files (2.3 MB), approximately 620.7k tokens, and a symbol index with 1617 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!