├── debian ├── compat ├── source │ └── format ├── rebootinto-cli.install ├── rebootinto-gtk.install ├── rebootinto-iui.install ├── rebootinto-tui.install ├── rebootinto-iced.install ├── .gitignore ├── changelog ├── rules ├── control └── copyright ├── .gitignore ├── tui ├── src │ ├── macros │ │ ├── mod.rs │ │ └── terminal_backend.rs │ ├── event.rs │ ├── item.rs │ ├── terminal_backend │ │ ├── mod.rs │ │ ├── termion.rs │ │ └── crossterm.rs │ ├── input_backend │ │ ├── mod.rs │ │ ├── termion.rs │ │ └── crossterm.rs │ ├── main.rs │ ├── stateful_list.rs │ └── ui.rs ├── manifest.rc ├── build.rs ├── rebootinto-tui.exe.manifest └── Cargo.toml ├── .vscode ├── settings.json └── launch.json ├── rust-toolchain.toml ├── .github ├── scripts │ ├── build_env │ │ ├── macos.sh │ │ ├── windows.sh │ │ └── linux.sh │ ├── packaging_env │ │ ├── linux │ │ │ └── equivs │ │ │ │ └── cargo │ │ ├── windows.sh │ │ └── linux.sh │ └── packaging │ │ ├── linux.sh │ │ └── windows.sh ├── dependabot.yml ├── actions │ ├── common-setup │ │ └── action.yml │ └── build-gtk-windows │ │ └── action.yml └── workflows │ └── code.yml ├── Cargo.toml ├── cli ├── manifest.rc ├── build.rs ├── rebootinto-cli.exe.manifest ├── Cargo.toml └── src │ └── main.rs ├── gtk ├── manifest.rc ├── build.rs ├── Cargo.toml ├── rebootinto-gtk.exe.manifest └── src │ └── main.rs ├── iced ├── manifest.rc ├── build.rs ├── Cargo.toml ├── rebootinto-iced.exe.manifest └── src │ ├── main.rs │ └── app.rs ├── iui ├── manifest.rc ├── build.rs ├── Cargo.toml ├── rebootinto-iui.exe.manifest └── src │ └── main.rs ├── efibootnext-mock ├── Cargo.toml └── src │ └── lib.rs ├── .cargo └── config.toml ├── .editorconfig ├── core ├── Cargo.toml └── src │ └── lib.rs ├── README.md ├── wix └── main.wxs └── Cargo.lock /debian/compat: -------------------------------------------------------------------------------- 1 | 10 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /debian/rebootinto-cli.install: -------------------------------------------------------------------------------- 1 | debian/tmp/usr/bin/rebootinto-cli 2 | -------------------------------------------------------------------------------- /debian/rebootinto-gtk.install: -------------------------------------------------------------------------------- 1 | debian/tmp/usr/bin/rebootinto-gtk 2 | -------------------------------------------------------------------------------- /debian/rebootinto-iui.install: -------------------------------------------------------------------------------- 1 | debian/tmp/usr/bin/rebootinto-iui 2 | -------------------------------------------------------------------------------- /debian/rebootinto-tui.install: -------------------------------------------------------------------------------- 1 | debian/tmp/usr/bin/rebootinto-tui 2 | -------------------------------------------------------------------------------- /debian/rebootinto-iced.install: -------------------------------------------------------------------------------- 1 | debian/tmp/usr/bin/rebootinto-iced 2 | -------------------------------------------------------------------------------- /tui/src/macros/mod.rs: -------------------------------------------------------------------------------- 1 | //! The crate macros. 2 | 3 | #[macro_use] 4 | mod terminal_backend; 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "rust-analyzer.checkOnSave.command": "clippy" 4 | } 5 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "nightly-2023-08-11" 3 | components = ["rustfmt", "clippy"] 4 | profile = "minimal" 5 | -------------------------------------------------------------------------------- /.github/scripts/build_env/macos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | brew install \ 5 | ninja \ 6 | meson \ 7 | llvm \ 8 | gtk4 9 | -------------------------------------------------------------------------------- /debian/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | 3 | !.gitignore 4 | !*.install 5 | !changelog 6 | !compat 7 | !control 8 | !copyright 9 | !rules 10 | !source 11 | !source/format 12 | -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | rebootinto (0.0.1) unstable; urgency=medium 2 | 3 | * Initial Release. 4 | 5 | -- MOZGIII Fri, 13 Mar 2020 19:10:37 +0300 6 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = [ 4 | "efibootnext-mock", 5 | "core", 6 | "cli", 7 | "tui", 8 | "iui", 9 | "iced", 10 | "gtk", 11 | ] 12 | -------------------------------------------------------------------------------- /cli/manifest.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 3 | #define RT_MANIFEST 24 4 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "rebootinto-cli.exe.manifest" 5 | -------------------------------------------------------------------------------- /gtk/manifest.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 3 | #define RT_MANIFEST 24 4 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "rebootinto-gtk.exe.manifest" 5 | -------------------------------------------------------------------------------- /iced/manifest.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 3 | #define RT_MANIFEST 24 4 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "rebootinto-iced.exe.manifest" 5 | -------------------------------------------------------------------------------- /iui/manifest.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 3 | #define RT_MANIFEST 24 4 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "rebootinto-iui.exe.manifest" 5 | -------------------------------------------------------------------------------- /tui/manifest.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 3 | #define RT_MANIFEST 24 4 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "rebootinto-tui.exe.manifest" 5 | -------------------------------------------------------------------------------- /.github/scripts/packaging_env/linux/equivs/cargo: -------------------------------------------------------------------------------- 1 | Section: misc 2 | Priority: optional 3 | Standards-Version: 3.9.2 4 | 5 | Package: cargo 6 | Description: a fake cargo to fulfill the dependency requirement 7 | -------------------------------------------------------------------------------- /.github/scripts/build_env/windows.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | choco install -y --no-progress \ 5 | ninja \ 6 | llvm \ 7 | vswhere 8 | 9 | choco install -y --no-progress --source python \ 10 | meson 11 | -------------------------------------------------------------------------------- /cli/build.rs: -------------------------------------------------------------------------------- 1 | //! Build script to include the manifest into the executable on Windows. 2 | 3 | fn main() { 4 | println!("cargo:rerun-if-changed=manifest.rc"); 5 | embed_resource::compile("manifest.rc", embed_resource::NONE); 6 | } 7 | -------------------------------------------------------------------------------- /efibootnext-mock/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-efibootnext-mock" 3 | version = "0.1.0" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | publish = false 7 | 8 | [dependencies] 9 | thiserror = "1" 10 | -------------------------------------------------------------------------------- /gtk/build.rs: -------------------------------------------------------------------------------- 1 | //! Build script to include the manifest into the executable on Windows. 2 | 3 | fn main() { 4 | println!("cargo:rerun-if-changed=manifest.rc"); 5 | embed_resource::compile("manifest.rc", embed_resource::NONE); 6 | } 7 | -------------------------------------------------------------------------------- /iced/build.rs: -------------------------------------------------------------------------------- 1 | //! Build script to include the manifest into the executable on Windows. 2 | 3 | fn main() { 4 | println!("cargo:rerun-if-changed=manifest.rc"); 5 | embed_resource::compile("manifest.rc", embed_resource::NONE); 6 | } 7 | -------------------------------------------------------------------------------- /iui/build.rs: -------------------------------------------------------------------------------- 1 | //! Build script to include the manifest into the executable on Windows. 2 | 3 | fn main() { 4 | println!("cargo:rerun-if-changed=manifest.rc"); 5 | embed_resource::compile("manifest.rc", embed_resource::NONE); 6 | } 7 | -------------------------------------------------------------------------------- /tui/build.rs: -------------------------------------------------------------------------------- 1 | //! Build script to include the manifest into the executable on Windows. 2 | 3 | fn main() { 4 | println!("cargo:rerun-if-changed=manifest.rc"); 5 | embed_resource::compile("manifest.rc", embed_resource::NONE); 6 | } 7 | -------------------------------------------------------------------------------- /.github/scripts/packaging_env/windows.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | # Build upon the build environment. 5 | .github/scripts/build_env/windows.sh 6 | 7 | dotnet tool install --global wix --version 4.0.0-rc.1 8 | wix extension add --global WixToolset.UI.wixext/4.0.0-rc.1 9 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: cargo 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | open-pull-requests-limit: 10 8 | - package-ecosystem: github-actions 9 | directory: "/" 10 | schedule: 11 | interval: daily 12 | open-pull-requests-limit: 10 13 | -------------------------------------------------------------------------------- /.github/scripts/build_env/linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | sudo apt-get -qq update 5 | 6 | sudo apt-get install -y \ 7 | libgtk-3-dev \ 8 | python3 \ 9 | python3-pip \ 10 | python3-setuptools \ 11 | python3-wheel \ 12 | ninja-build \ 13 | llvm \ 14 | libgtk-4-dev 15 | 16 | sudo pip3 install meson 17 | -------------------------------------------------------------------------------- /tui/src/event.rs: -------------------------------------------------------------------------------- 1 | //! App events. 2 | 3 | /// The app events. 4 | pub enum Event { 5 | /// App exit is requested. 6 | Quit, 7 | /// Up is pressed. 8 | Up, 9 | /// Down is pressed. 10 | Down, 11 | /// The enter key is pressed. 12 | Enter, 13 | 14 | /// Some other unsupported (read uninteresting) event has occured. 15 | Unsupported, 16 | } 17 | -------------------------------------------------------------------------------- /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [target.'cfg(all())'] 2 | rustflags = [ 3 | "-Dunsafe_code", 4 | "-Wclippy::all", 5 | "-Wclippy::cargo", 6 | "-Wmissing_docs", 7 | "-Wclippy::missing_docs_in_private_items", 8 | "-Wclippy::clone_on_ref_ptr", 9 | "-Wclippy::await_holding_lock", 10 | # A few exceptions. 11 | "-Aclippy::cargo-common-metadata", 12 | "-Aclippy::derive-partial-eq-without-eq", 13 | ] 14 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.rs] 13 | indent_style = space 14 | indent_size = 4 15 | 16 | [*.manifest] 17 | indent_style = space 18 | indent_size = 4 19 | 20 | [debian/rules] 21 | indent_style = tab 22 | indent_size = 4 23 | -------------------------------------------------------------------------------- /cli/rebootinto-cli.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tui/rebootinto-tui.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /tui/src/item.rs: -------------------------------------------------------------------------------- 1 | //! The UI item implementation. 2 | 3 | use crate::core; 4 | 5 | use ratatui::text::Text; 6 | 7 | /// The UI item. 8 | #[derive(Debug)] 9 | pub struct Item { 10 | /// The load option. 11 | pub load_option: core::LoadOption, 12 | } 13 | 14 | impl AsRef for Item { 15 | fn as_ref(&self) -> &str { 16 | self.load_option.description.as_ref() 17 | } 18 | } 19 | 20 | impl<'a> From<&'a Item> for Text<'a> { 21 | fn from(value: &'a Item) -> Self { 22 | Text::raw(value.as_ref()) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.github/scripts/packaging/linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | ARTIFACTS_DIR="$1" 5 | 6 | CARGO_PATH="$(dirname "$(which cargo)")" 7 | 8 | # TODO: do not build the code again 9 | gbp buildpackage \ 10 | --git-ignore-branch \ 11 | --git-builder=debuild \ 12 | --prepend-path "$CARGO_PATH" \ 13 | -i -I \ 14 | --no-sign \ 15 | --no-pre-clean \ 16 | --no-check-builddeps \ 17 | --build=binary 18 | 19 | mkdir -p "$ARTIFACTS_DIR" 20 | 21 | ARTIFACTS=( 22 | ../*.deb 23 | ) 24 | 25 | cp -t "$ARTIFACTS_DIR" "${ARTIFACTS[@]}" 26 | -------------------------------------------------------------------------------- /.github/scripts/packaging/windows.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | ARTIFACTS_DIR="$1" 5 | 6 | set -x 7 | 8 | wix build wix/main.wxs \ 9 | -ext WixToolset.UI.wixext \ 10 | -o target/wix/rebootinto.msi 11 | 12 | mkdir -p "$ARTIFACTS_DIR" 13 | 14 | ARTIFACTS=( 15 | target/wix/*.msi 16 | target/release/rebootinto-cli.exe 17 | target/release/rebootinto-tui.exe 18 | target/release/rebootinto-iui.exe 19 | target/release/rebootinto-iced.exe 20 | target/release/rebootinto-gtk.exe 21 | ) 22 | 23 | cp -t "$ARTIFACTS_DIR" "${ARTIFACTS[@]}" 24 | -------------------------------------------------------------------------------- /iced/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-iced" 3 | version = "0.1.0" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | description = "The iced-based GUI tool for rebooting into other OS." 7 | license = "MIT" 8 | repository = "https://github.com/MOZGIII/rebootinto" 9 | keywords = ["rebootinto", "reboot", "efi", "uefi", "ui", "gui", "iced"] 10 | categories = ["gui"] 11 | 12 | [dependencies] 13 | rebootinto-core = { path = "../core" } 14 | 15 | anyhow = "1" 16 | iced = "0.10" 17 | 18 | [build-dependencies] 19 | embed-resource = "2.3" 20 | -------------------------------------------------------------------------------- /tui/src/terminal_backend/mod.rs: -------------------------------------------------------------------------------- 1 | //! The terminal backend. 2 | 3 | #[cfg(feature = "crossterm_backend")] 4 | mod crossterm; 5 | #[cfg(feature = "crossterm_backend")] 6 | pub use self::crossterm::Crossterm as Impl; 7 | 8 | #[cfg(feature = "termion_backend")] 9 | mod termion; 10 | #[cfg(feature = "termion_backend")] 11 | pub use self::termion::Termion as Impl; 12 | 13 | /// The backend. 14 | pub trait Backend: ratatui::backend::Backend { 15 | /// Constrct and initializer a new backend. 16 | fn new() -> Result 17 | where 18 | Self: Sized; 19 | } 20 | -------------------------------------------------------------------------------- /cli/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-cli" 3 | version = "0.1.0" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | description = "The command line tool for rebooting into other OS." 7 | license = "MIT" 8 | repository = "https://github.com/MOZGIII/rebootinto" 9 | keywords = ["rebootinto", "reboot", "efi", "uefi", "cli"] 10 | categories = ["command-line-utilities"] 11 | 12 | [dependencies] 13 | rebootinto-core = { path = "../core" } 14 | 15 | anyhow = "1" 16 | clap = { version = "4.3", features = ["derive", "env"] } 17 | 18 | [build-dependencies] 19 | embed-resource = "2.3" 20 | -------------------------------------------------------------------------------- /gtk/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-gtk" 3 | version = "0.1.0" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | description = "The GTK-based GUI tool for rebooting into other OS." 7 | license = "MIT" 8 | repository = "https://github.com/MOZGIII/rebootinto" 9 | keywords = ["rebootinto", "reboot", "efi", "uefi", "ui", "gui", "gtk"] 10 | categories = ["gui"] 11 | 12 | [dependencies] 13 | rebootinto-core = { path = "../core" } 14 | 15 | anyhow = "1" 16 | gtk = { version = "0.7.2", package = "gtk4", features = ["v4_2"] } 17 | 18 | [build-dependencies] 19 | embed-resource = "2.3" 20 | -------------------------------------------------------------------------------- /.github/scripts/packaging_env/linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | # Build upon the build environment. 5 | .github/scripts/build_env/linux.sh 6 | 7 | sudo apt-get install -y \ 8 | git-buildpackage \ 9 | equivs \ 10 | devscripts 11 | 12 | ( 13 | EQUIVS_TMP="$(mktemp -d)" 14 | trap 'rm -rf "$EQUIVS_TMP"' EXIT 15 | 16 | REPO_ROOT="$(pwd)" 17 | cd "$EQUIVS_TMP" 18 | equivs-build "$REPO_ROOT/.github/scripts/packaging_env/linux/equivs/cargo" 19 | sudo dpkg -i cargo_1.0_all.deb 20 | ) 21 | 22 | mk-build-deps \ 23 | --install \ 24 | --root-cmd sudo \ 25 | --remove 26 | 27 | git clean -f 28 | -------------------------------------------------------------------------------- /core/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-core" 3 | version = "0.1.2" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | description = "The core API for rebooting into other OS." 7 | license = "MIT" 8 | repository = "https://github.com/MOZGIII/rebootinto" 9 | keywords = ["rebootinto", "reboot", "efi", "uefi"] 10 | 11 | [dependencies] 12 | simplereboot = "0.1" 13 | thiserror = "1" 14 | 15 | [target.'cfg(not(target_os = "macos"))'.dependencies] 16 | efibootnext = "0.5" 17 | 18 | [target.'cfg(target_os = "macos")'.dependencies] 19 | rebootinto-efibootnext-mock = { path = "../efibootnext-mock" } 20 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | %: 3 | dh $@ 4 | 5 | export CARGO_HOME=debian/tmp/cargo 6 | 7 | override_dh_auto_clean: 8 | cargo clean 9 | 10 | override_dh_auto_test: 11 | cargo version 12 | cargo test --workspace --release 13 | 14 | override_dh_auto_build: 15 | cargo version 16 | cargo build --workspace --release 17 | 18 | override_dh_auto_install: 19 | mkdir -p debian/tmp/usr/bin/ 20 | cp \ 21 | target/release/rebootinto-cli \ 22 | target/release/rebootinto-tui \ 23 | target/release/rebootinto-iui \ 24 | target/release/rebootinto-iced \ 25 | target/release/rebootinto-gtk \ 26 | debian/tmp/usr/bin/ 27 | -------------------------------------------------------------------------------- /iui/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-iui" 3 | version = "0.1.0" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | description = "The IUI-based GUI tool for rebooting into other OS." 7 | license = "MIT" 8 | repository = "https://github.com/MOZGIII/rebootinto" 9 | keywords = ["rebootinto", "reboot", "efi", "uefi", "ui", "gui", "iui"] 10 | categories = ["gui"] 11 | 12 | [dependencies] 13 | rebootinto-core = { path = "../core" } 14 | 15 | anyhow = "1" 16 | 17 | [dependencies.iui] 18 | git = "https://github.com/MOZGIII/libui-rs.git" 19 | rev = "5d526e4d8d817a0736f60835259070ffa58b8b42" 20 | features = ["static"] 21 | 22 | [build-dependencies] 23 | embed-resource = "2.3" 24 | -------------------------------------------------------------------------------- /tui/src/input_backend/mod.rs: -------------------------------------------------------------------------------- 1 | //! The input backend implementations. 2 | 3 | pub use crate::event::Event; 4 | use std::iter::Iterator; 5 | 6 | /// Input backend for the terminal. 7 | pub trait InputBackend: Iterator {} 8 | 9 | #[cfg(feature = "crossterm_backend")] 10 | mod crossterm; 11 | #[cfg(feature = "crossterm_backend")] 12 | pub use self::crossterm::*; 13 | 14 | #[cfg(feature = "termion_backend")] 15 | mod termion; 16 | #[cfg(feature = "termion_backend")] 17 | pub use self::termion::*; 18 | 19 | #[test] 20 | fn create_input_backend_casts_to_input_backend() { 21 | let mut concrete = self::create_input_backend(); 22 | let _backend: &mut dyn InputBackend = &mut concrete; 23 | } 24 | -------------------------------------------------------------------------------- /tui/src/terminal_backend/termion.rs: -------------------------------------------------------------------------------- 1 | //! The terminal backend implementation via [`termion`]. 2 | 3 | use super::Backend; 4 | use ratatui::backend::TermionBackend; 5 | use std::io; 6 | use termion::input::MouseTerminal; 7 | use termion::raw::{IntoRawMode, RawTerminal}; 8 | use termion::screen::{AlternateScreen, IntoAlternateScreen}; 9 | 10 | /// The [`termion`] backend. 11 | pub struct Termion { 12 | /// The underlying implementation handle. 13 | inner: TermionBackend>>>, 14 | } 15 | 16 | impl Backend for Termion { 17 | fn new() -> Result { 18 | let stdout = io::stdout().into_raw_mode()?; 19 | let stdout = MouseTerminal::from(stdout); 20 | let stdout = stdout.into_alternate_screen()?; 21 | let inner = TermionBackend::new(stdout); 22 | let backend = Self { inner }; 23 | Ok(backend) 24 | } 25 | } 26 | 27 | delegate_backend_impl!(Termion, self => self.inner); 28 | -------------------------------------------------------------------------------- /tui/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rebootinto-tui" 3 | version = "0.1.0" 4 | authors = ["MOZGIII "] 5 | edition = "2021" 6 | description = "The Terminal UI tool for rebooting into other OS." 7 | license = "MIT" 8 | repository = "https://github.com/MOZGIII/rebootinto" 9 | keywords = ["rebootinto", "reboot", "efi", "uefi", "tui", "ratatui"] 10 | 11 | [dependencies] 12 | rebootinto-core = { path = "../core" } 13 | 14 | anyhow = "1" 15 | 16 | [dependencies.ratatui] 17 | version = "0.23" 18 | default-features = false 19 | optional = true 20 | 21 | [dependencies.termion] 22 | version = "2.0" 23 | optional = true 24 | 25 | [dependencies.crossterm] 26 | version = "0.27" 27 | optional = true 28 | 29 | [features] 30 | crossterm_backend = ["crossterm", "ratatui", "ratatui/crossterm"] 31 | crossterm_backend_sync_input = ["crossterm_backend"] 32 | termion_backend = ["termion", "ratatui", "ratatui/termion"] 33 | default = ["crossterm_backend"] 34 | 35 | [build-dependencies] 36 | embed-resource = "2.3" 37 | -------------------------------------------------------------------------------- /gtk/rebootinto-gtk.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /iui/rebootinto-iui.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /iced/rebootinto-iced.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: rebootinto 2 | Section: utils 3 | Priority: optional 4 | Maintainer: MOZGIII 5 | Build-Depends: debhelper (>= 10), dh-exec, cargo, clang, meson, pkg-config, libgtk-3-dev 6 | Standards-Version: 4.1.2 7 | Homepage: https://github.com/MOZGIII/rebootinto 8 | Vcs-Git: https://github.com/MOZGIII/rebootinto.git 9 | Vcs-Browser: https://github.com/MOZGIII/rebootinto 10 | 11 | Package: rebootinto 12 | Architecture: any 13 | Depends: ${shlibs:Depends}, ${misc:Depends}, rebootinto-cli, rebootinto-tui, rebootinto-iui, rebootinto-gtk 14 | Description: Tools for rebooting into other OS. 15 | 16 | Package: rebootinto-cli 17 | Architecture: any 18 | Depends: ${shlibs:Depends}, ${misc:Depends} 19 | Description: The command line tool for rebooting into other OS. 20 | 21 | Package: rebootinto-tui 22 | Architecture: any 23 | Depends: ${shlibs:Depends}, ${misc:Depends} 24 | Description: The Terminal UI tool for rebooting into other OS. 25 | 26 | Package: rebootinto-iui 27 | Architecture: any 28 | Depends: ${shlibs:Depends}, ${misc:Depends} 29 | Description: The IUI-based GUI tool for rebooting into other OS. 30 | 31 | Package: rebootinto-iced 32 | Architecture: any 33 | Depends: ${shlibs:Depends}, ${misc:Depends} 34 | Description: The iced-based GUI tool for rebooting into other OS. 35 | 36 | Package: rebootinto-gtk 37 | Architecture: any 38 | Depends: ${shlibs:Depends}, ${misc:Depends} 39 | Description: The GTK-based GUI tool for rebooting into other OS. 40 | -------------------------------------------------------------------------------- /debian/copyright: -------------------------------------------------------------------------------- 1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: rebootinto 3 | Source: https://github.com/MOZGIII/rebootinto 4 | 5 | Files: * 6 | Copyright: 2019 MOZGIII 7 | License: GPL-3.0+ 8 | 9 | Files: debian/* 10 | Copyright: 2020 MOZGIII 11 | License: GPL-3.0+ 12 | 13 | License: GPL-3.0+ 14 | This program is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 | . 19 | This package is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details. 23 | . 24 | You should have received a copy of the GNU General Public License 25 | along with this program. If not, see . 26 | . 27 | On Debian systems, the complete text of the GNU General 28 | Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". 29 | 30 | # Please also look if there are files or directories which have a 31 | # different copyright/license attached and list them here. 32 | # Please avoid picking licenses with terms that are more restrictive than the 33 | # packaged work, as it may make Debian's contributions unacceptable upstream. 34 | -------------------------------------------------------------------------------- /tui/src/input_backend/termion.rs: -------------------------------------------------------------------------------- 1 | //! The [`termion`] input backend implementation. 2 | 3 | use super::InputBackend; 4 | use crate::event::Event; 5 | use std::io; 6 | use termion::event::{Event as TermionEvent, Key}; 7 | use termion::input::{Events, TermRead}; 8 | 9 | /// The [`termion`] input backend. 10 | pub struct TermionInputBackend { 11 | iter: Events, 12 | } 13 | 14 | impl InputBackend for TermionInputBackend {} 15 | 16 | impl Iterator for TermionInputBackend { 17 | type Item = Event; 18 | 19 | fn next(&mut self) -> Option { 20 | let evt = match self.iter.next() { 21 | None => return None, 22 | Some(Ok(evt)) => evt, 23 | Some(Err(_)) => return None, 24 | }; 25 | Some(match evt { 26 | TermionEvent::Key(Key::Char('q')) | TermionEvent::Key(Key::Esc) => Event::Quit, 27 | TermionEvent::Key(Key::Down) => Event::Down, 28 | TermionEvent::Key(Key::Up) => Event::Up, 29 | TermionEvent::Key(Key::Char('\n')) => Event::Enter, 30 | _ => Event::Unsupported, 31 | }) 32 | } 33 | } 34 | 35 | /// Create a [`TermionInputBackend`]. 36 | pub fn create_input_backend() -> TermionInputBackend { 37 | TermionInputBackend { 38 | iter: io::stdin().events(), 39 | } 40 | } 41 | 42 | #[test] 43 | fn casts_to_input_backend() { 44 | let mut concrete = create_input_backend(); 45 | let _backend: &mut dyn InputBackend = &mut concrete; 46 | } 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rebootinto 2 | 3 | Instruct your system to reboot into a particular OS. 4 | 5 | Currently only supports UEFI-powered systems. 6 | 7 | ## Apps 8 | 9 | This project provides the following apps: 10 | 11 | - `rebootinto-cli` - a command-line interface; 12 | - `rebootinto-tui` - a terminal user interface; 13 | - `rebootinto-iui` - a graphical user interface (based on `libiui`); 14 | - `rebootinto-iced` - a graphical user interface (based on `iced` crate). 15 | - `rebootinto-gtk` - a graphical user interface (based on `gtk` crate). 16 | 17 | ## Installation 18 | 19 | ### Github Releases 20 | 21 | Grab packages from the [Github releases](https://github.com/MOZGIII/rebootinto/releases). 22 | 23 | Not all installation artifacts are currently uploaded to the Github releases. 24 | Use other installation methods if you didn't find what you were looking for. 25 | 26 | ### CI Artifacts 27 | 28 | You can download prebuilt binaries from CI system artifacts storage. 29 | Find a commit that has a CI build associated and grab stuff from there. 30 | As with Github Releases, not everything is currently built there, so if you 31 | didn't find what you were looking for - try other installation methods. 32 | 33 | - [Github Actions](https://github.com/MOZGIII/rebootinto/actions) 34 | 35 | ### Source installation 36 | 37 | > When building on Windows, use Visual Studio shell, or somehow otherwise point 38 | > the build system to the Windows Resource Compiler. 39 | 40 | You'll need a [`Rust` installation](https://www.rust-lang.org/tools/install) (stable). 41 | 42 | 1. Clone the repo and `cd` into it. 43 | 44 | 2. `cargo build --release` 45 | 46 | 3. Install built executables. 47 | -------------------------------------------------------------------------------- /tui/src/macros/terminal_backend.rs: -------------------------------------------------------------------------------- 1 | //! The terminal backend utility macros. 2 | 3 | /// Delegate the implementation of the [`ratatui`] backend. 4 | #[macro_export] 5 | macro_rules! delegate_backend_impl { 6 | ($impl_for:ty, $this:ident => $to:expr) => { 7 | use ratatui::backend::Backend as TuiBackend; 8 | use ratatui::buffer::Cell; 9 | use ratatui::layout::Rect; 10 | 11 | impl TuiBackend for $impl_for { 12 | fn draw<'a, I>(&mut $this, content: I) -> std::io::Result<()> 13 | where 14 | I: Iterator, 15 | { 16 | TuiBackend::draw(&mut $to, content) 17 | } 18 | fn hide_cursor(&mut $this) -> std::io::Result<()> { 19 | TuiBackend::hide_cursor(&mut $to) 20 | } 21 | fn show_cursor(&mut $this) -> std::io::Result<()> { 22 | TuiBackend::show_cursor(&mut $to) 23 | } 24 | fn get_cursor(&mut $this) -> std::io::Result<(u16, u16)> { 25 | TuiBackend::get_cursor(&mut $to) 26 | } 27 | fn set_cursor(&mut $this, x: u16, y: u16) -> std::io::Result<()> { 28 | TuiBackend::set_cursor(&mut $to, x, y) 29 | } 30 | fn clear(&mut $this) -> std::io::Result<()> { 31 | TuiBackend::clear(&mut $to) 32 | } 33 | fn size(&$this) -> std::io::Result { 34 | TuiBackend::size(&$to) 35 | } 36 | fn flush(&mut $this) -> std::io::Result<()> { 37 | TuiBackend::flush(&mut $to) 38 | } 39 | } 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "lldb", 9 | "request": "launch", 10 | "name": "Debug unit tests in library 'rebootinto-core'", 11 | "cargo": { 12 | "args": [ 13 | "test", 14 | "--no-run", 15 | "--lib", 16 | "--package=rebootinto-core" 17 | ], 18 | "filter": { 19 | "name": "rebootinto-core", 20 | "kind": "lib" 21 | } 22 | }, 23 | "args": [], 24 | "cwd": "${workspaceFolder}" 25 | }, 26 | { 27 | "type": "lldb", 28 | "request": "launch", 29 | "name": "Debug executable 'rebootinto-tui'", 30 | "cargo": { 31 | "args": [ 32 | "build", 33 | "--bin=rebootinto-tui", 34 | "--package=rebootinto-tui" 35 | ], 36 | "filter": { 37 | "name": "rebootinto-tui", 38 | "kind": "bin" 39 | } 40 | }, 41 | "args": [], 42 | "cwd": "${workspaceFolder}" 43 | }, 44 | { 45 | "type": "lldb", 46 | "request": "launch", 47 | "name": "Debug unit tests in executable 'rebootinto-tui'", 48 | "cargo": { 49 | "args": [ 50 | "test", 51 | "--no-run", 52 | "--bin=rebootinto-tui", 53 | "--package=rebootinto-tui" 54 | ], 55 | "filter": { 56 | "name": "rebootinto-tui", 57 | "kind": "bin" 58 | } 59 | }, 60 | "args": [], 61 | "cwd": "${workspaceFolder}" 62 | } 63 | ] 64 | } -------------------------------------------------------------------------------- /iced/src/main.rs: -------------------------------------------------------------------------------- 1 | //! An iced-based GUI app for rebootinto. 2 | 3 | #![windows_subsystem = "windows"] 4 | 5 | use rebootinto_core as core; 6 | 7 | use iced::{Application, Settings}; 8 | 9 | mod app; 10 | 11 | fn main() { 12 | if let Err(err) = run() { 13 | match std::env::var("PANIC_ON_ERROR") { 14 | Ok(ref val) if val == "true" => panic!("Error: {err}"), 15 | _ => {} 16 | } 17 | 18 | eprintln!("Error: {err}"); 19 | std::process::exit(1); 20 | } 21 | } 22 | 23 | /// Compute an estimate of the height of the window to accomodate the contents 24 | /// based on the amount of items, taking the padding and spacing into account. 25 | fn estimate_window_height(items: usize) -> u32 { 26 | let padding = (app::LAYOUT_PADDING as u32) * 2; 27 | 28 | let displayed_items_estimate = items.try_into().unwrap_or(10); 29 | 30 | let spacing = if displayed_items_estimate > 0 { 31 | (displayed_items_estimate - 1) * (app::LAYOUT_SPACING as u32) 32 | } else { 33 | 0 34 | }; 35 | 36 | let assumed_button_height = 31; 37 | let content = displayed_items_estimate * assumed_button_height; 38 | 39 | padding + spacing + content 40 | } 41 | 42 | /// Run the app and return the error. 43 | fn run() -> Result<(), anyhow::Error> { 44 | let mut backend = core::Backend::init()?; 45 | let load_options = backend 46 | .load_options()? 47 | .collect::, core::LoadOptionError>>()?; 48 | 49 | let size = (350, estimate_window_height(load_options.len())); 50 | 51 | let mut settings = Settings::with_flags(app::Init { 52 | backend, 53 | load_options, 54 | }); 55 | settings.window.size = size; 56 | app::App::run(settings)?; 57 | Ok(()) 58 | } 59 | -------------------------------------------------------------------------------- /tui/src/input_backend/crossterm.rs: -------------------------------------------------------------------------------- 1 | //! The [`crossterm`] input backend implementation. 2 | 3 | use super::InputBackend; 4 | use crate::event::Event; 5 | use crossterm::event::{read, Event as CrosstermEvent, KeyCode, KeyEvent}; 6 | 7 | /// The [`crossterm`] input backend. 8 | pub struct CrosstermInputBackend; 9 | 10 | impl Iterator for CrosstermInputBackend { 11 | type Item = Event; 12 | 13 | fn next(&mut self) -> Option { 14 | let evt = match read() { 15 | Err(_) => return None, 16 | Ok(evt) => evt, 17 | }; 18 | Some(match evt { 19 | CrosstermEvent::Key(KeyEvent { 20 | code: KeyCode::Char('q'), 21 | .. 22 | }) 23 | | CrosstermEvent::Key(KeyEvent { 24 | code: KeyCode::Esc, .. 25 | }) => Event::Quit, 26 | CrosstermEvent::Key(KeyEvent { 27 | code: KeyCode::Down, 28 | .. 29 | }) => Event::Down, 30 | CrosstermEvent::Key(KeyEvent { 31 | code: KeyCode::Up, .. 32 | }) => Event::Up, 33 | CrosstermEvent::Key(KeyEvent { 34 | code: KeyCode::Char('\n'), 35 | .. 36 | }) 37 | | CrosstermEvent::Key(KeyEvent { 38 | code: KeyCode::Enter, 39 | .. 40 | }) => Event::Enter, 41 | _ => Event::Unsupported, 42 | }) 43 | } 44 | } 45 | 46 | impl InputBackend for CrosstermInputBackend {} 47 | 48 | /// Create a [`CrosstermInputBackend`]. 49 | pub fn create_input_backend() -> CrosstermInputBackend { 50 | CrosstermInputBackend 51 | } 52 | 53 | #[test] 54 | fn casts_to_input_backend() { 55 | use super::InputBackend; 56 | let mut concrete = create_input_backend(); 57 | let _backend: &mut dyn InputBackend = &mut concrete; 58 | } 59 | -------------------------------------------------------------------------------- /tui/src/main.rs: -------------------------------------------------------------------------------- 1 | //! A [`ratatui`]-based CLI app for rebootinto. 2 | 3 | use rebootinto_core as core; 4 | 5 | use ratatui::Terminal; 6 | 7 | #[macro_use] 8 | mod macros; 9 | 10 | mod event; 11 | mod input_backend; 12 | mod item; 13 | mod stateful_list; 14 | mod terminal_backend; 15 | mod ui; 16 | 17 | use item::Item; 18 | use terminal_backend::Backend; 19 | use ui::BootNextSelectorUI; 20 | 21 | fn main() { 22 | if let Err(err) = run() { 23 | match std::env::var("PANIC_ON_ERROR") { 24 | Ok(ref val) if val == "true" => panic!("Error: {err}"), 25 | _ => {} 26 | } 27 | 28 | eprintln!("Error: {err}"); 29 | std::process::exit(1); 30 | } 31 | } 32 | 33 | /// Run the app and return the error. 34 | fn run() -> Result<(), anyhow::Error> { 35 | let mut backend = core::Backend::init()?; 36 | let load_options = backend 37 | .load_options()? 38 | .collect::, core::LoadOptionError>>()?; 39 | 40 | if load_options.is_empty() { 41 | anyhow::bail!("no load options"); 42 | } 43 | 44 | let reboot_into = { 45 | let backend = terminal_backend::Impl::new()?; 46 | let mut terminal = Terminal::new(backend)?; 47 | terminal.hide_cursor()?; 48 | 49 | let mut input = input_backend::create_input_backend(); 50 | 51 | let mut items: Vec = load_options 52 | .into_iter() 53 | .map(|load_option| Item { load_option }) 54 | .collect(); 55 | let mut ui = BootNextSelectorUI::new(&mut terminal, &mut input, &items, 0); 56 | 57 | let selected_item_idx = ui.run()?; 58 | terminal.show_cursor()?; 59 | drop(terminal); 60 | 61 | selected_item_idx.map(|e| items.swap_remove(e).load_option) 62 | }; 63 | 64 | if let Some(reboot_into) = reboot_into { 65 | println!("Rebooting into: {}", &reboot_into); 66 | backend.reboot_into(reboot_into.number)?; 67 | } else { 68 | println!("Reboot cancelled"); 69 | } 70 | Ok(()) 71 | } 72 | -------------------------------------------------------------------------------- /.github/actions/common-setup/action.yml: -------------------------------------------------------------------------------- 1 | name: "Common setup" 2 | description: "Apply the common setup steps for this codebase" 3 | inputs: 4 | platformCacheKey: 5 | description: "The key for the cache for the platform; if empty the caching will be disabled" 6 | required: false 7 | default: "" 8 | modeCacheKey: 9 | description: "The key for the cache for the mode" 10 | required: false 11 | default: "" 12 | requiresRust: 13 | description: "Requires rust to be installed" 14 | required: false 15 | default: "true" 16 | isOnSelfHostedRunner: 17 | description: "Enable if running on a self-hosted runner" 18 | required: false 19 | default: "false" 20 | buildEnvScript: 21 | description: "The script to run to bootstrap the given environment" 22 | required: false 23 | default: "" 24 | runs: 25 | using: "composite" 26 | steps: 27 | - name: Cache 28 | uses: Swatinem/rust-cache@v2 29 | with: 30 | key: ${{ inputs.modeCacheKey == '' && inputs.platformCacheKey || ''}} 31 | shared-key: ${{ inputs.modeCacheKey != '' && format('{0}-{1}', inputs.platformCacheKey, inputs.modeCacheKey) || '' }} 32 | if: ${{ inputs.platformCacheKey != '' && inputs.isOnSelfHostedRunner != 'true' && inputs.requiresRust == 'true' }} 33 | 34 | - name: Install rust toolchain 35 | shell: bash 36 | run: rustup show 37 | if: ${{ inputs.requiresRust == 'true' }} 38 | 39 | - name: Set up Vistual Studio Command Prompt (Windows only) 40 | uses: ilammy/msvc-dev-cmd@v1 41 | if: runner.os == 'Windows' 42 | 43 | - name: Build GTK (Windows only) 44 | uses: ./.github/actions/build-gtk-windows 45 | if: runner.os == 'Windows' 46 | 47 | - name: Prepare the build environment 48 | run: ${{ inputs.buildEnvScript }} 49 | shell: bash 50 | if: ${{ inputs.buildEnvScript != 'skip' }} 51 | 52 | - name: Print build environment info 53 | shell: bash 54 | run: | 55 | set -x 56 | cargo --version 57 | cargo clippy --version 58 | env 59 | -------------------------------------------------------------------------------- /tui/src/terminal_backend/crossterm.rs: -------------------------------------------------------------------------------- 1 | //! The terminal backend implementation via [`crossterm`]. 2 | 3 | use super::Backend; 4 | use crossterm::{ 5 | execute, 6 | terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, 7 | }; 8 | use ratatui::backend::CrosstermBackend; 9 | 10 | /// The [`crossterm`] backend. 11 | pub struct Crossterm { 12 | /// The underlying implementation handle. 13 | inner: CrosstermBackend>, 14 | } 15 | 16 | impl Backend for Crossterm { 17 | fn new() -> Result { 18 | let stdout = std::io::stdout(); 19 | let stdout = AlternateScreenWriter::new(stdout)?; 20 | let inner = CrosstermBackend::new(stdout); 21 | let backend = Self { inner }; 22 | Ok(backend) 23 | } 24 | } 25 | 26 | delegate_backend_impl!(Crossterm, self => self.inner); 27 | 28 | /// The writer that wraps `W` and manages the alternate screen mode 29 | /// and raw mode. 30 | struct AlternateScreenWriter(W); 31 | 32 | impl AlternateScreenWriter { 33 | /// Create a new [`AlternateScreenWriter`] over `w`. 34 | pub fn new(mut w: W) -> std::io::Result { 35 | enable_raw_mode()?; 36 | execute!(&mut w, EnterAlternateScreen)?; 37 | Ok(Self(w)) 38 | } 39 | } 40 | 41 | impl Drop for AlternateScreenWriter { 42 | fn drop(&mut self) { 43 | execute!(&mut self.0, LeaveAlternateScreen).unwrap(); 44 | disable_raw_mode().unwrap(); 45 | } 46 | } 47 | 48 | impl std::io::Write for AlternateScreenWriter { 49 | fn write(&mut self, buf: &[u8]) -> std::io::Result { 50 | std::io::Write::write(&mut self.0, buf) 51 | } 52 | 53 | fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result { 54 | std::io::Write::write_vectored(&mut self.0, bufs) 55 | } 56 | 57 | fn flush(&mut self) -> std::io::Result<()> { 58 | std::io::Write::flush(&mut self.0) 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /tui/src/stateful_list.rs: -------------------------------------------------------------------------------- 1 | //! A stateful list implementation. 2 | 3 | use ratatui::widgets::ListState; 4 | 5 | /// The stateful list. 6 | /// 7 | /// Bind the [`ListState`] and its state together. 8 | pub struct StatefulList<'a, T> { 9 | /// The [`tui`] list state. 10 | state: ListState, 11 | /// The list that are being managed. 12 | items: &'a [T], 13 | } 14 | 15 | impl<'a, T> StatefulList<'a, T> { 16 | /// Construct a stateful list with the given `items` and the `current_item`. 17 | /// 18 | /// The `current_item` selection on construction is required by design. 19 | pub fn new(items: &'a [T], current_item: usize) -> Self { 20 | let mut state = ListState::default(); 21 | state.select(Some(current_item)); 22 | Self { state, items } 23 | } 24 | 25 | /// Select next list item. 26 | pub fn next(&mut self) { 27 | let new = match self.state.selected() { 28 | Some(current) => { 29 | if current >= self.items.len() - 1 { 30 | 0 31 | } else { 32 | current + 1 33 | } 34 | } 35 | None => 0, 36 | }; 37 | self.state.select(Some(new)); 38 | } 39 | 40 | /// Select previous list item. 41 | pub fn previous(&mut self) { 42 | let new = match self.state.selected() { 43 | Some(current) => { 44 | if current > 0 { 45 | current - 1 46 | } else { 47 | self.items.len() - 1 48 | } 49 | } 50 | None => 0, 51 | }; 52 | self.state.select(Some(new)); 53 | } 54 | 55 | /// Return the currently selected index. 56 | pub fn selected_index(&self) -> usize { 57 | self.state.selected().unwrap() 58 | } 59 | 60 | /// Expose the params required for rendering. 61 | pub fn render_params(&mut self) -> (std::slice::Iter<'_, T>, &mut ListState) { 62 | let state = &mut self.state; 63 | let iter = self.items.iter(); 64 | (iter, state) 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /efibootnext-mock/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! The mock `efibootnext` crate implementation. 2 | 3 | /// A mock `Adapter`. 4 | #[derive(Debug, Default)] 5 | pub struct Adapter { 6 | /// Just a dummy private items to make linters happy. 7 | _private: (), 8 | } 9 | 10 | /// The mock [`LoadOption`] type. 11 | #[derive(Debug, Clone, PartialEq, Eq)] 12 | pub struct LoadOption { 13 | /// Number of the load option. 14 | pub number: u16, 15 | /// Description of the load option. 16 | pub description: String, 17 | } 18 | 19 | impl std::fmt::Display for LoadOption { 20 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 21 | f.write_str(&self.description) 22 | } 23 | } 24 | 25 | /// The load options to provide. 26 | const MOCK_ITEMS: &[&str] = &["Ubuntu", "Windows", "Arch", "USB Boot"]; 27 | 28 | impl Adapter { 29 | /// Mock `load_options` call. 30 | pub fn load_options( 31 | &self, 32 | ) -> Result< 33 | impl Iterator>, 34 | error::EnumerateLoadOptionsError, 35 | > { 36 | Ok(MOCK_ITEMS.iter().copied().enumerate().map(|(num, item)| { 37 | Ok(LoadOption { 38 | number: num.try_into().unwrap(), 39 | description: item.into(), 40 | }) 41 | })) 42 | } 43 | 44 | /// Mock `set_boot_next` call. 45 | pub fn set_boot_next(&self, _num: u16) -> Result<(), error::SetBootNextError> { 46 | match std::env::var("MOCK_SET_BOOT_ERROR") { 47 | Ok(val) if val == "true" => Err(error::SetBootNextError), 48 | _ => Ok(()), 49 | } 50 | } 51 | } 52 | 53 | /// Mock errors. 54 | pub mod error { 55 | /// Mock `EnumerateLoadOptionsError`. 56 | #[derive(Debug, thiserror::Error)] 57 | #[error("mock EnumerateLoadOptionsError")] 58 | pub struct EnumerateLoadOptionsError; 59 | 60 | /// Mock `GetLoadOptionError`. 61 | #[derive(Debug, thiserror::Error)] 62 | #[error("mock GetLoadOptionError")] 63 | pub struct GetLoadOptionError; 64 | 65 | /// Mock `SetBootNextError`. 66 | #[derive(Debug, thiserror::Error)] 67 | #[error("mock SetBootNextError")] 68 | pub struct SetBootNextError; 69 | } 70 | -------------------------------------------------------------------------------- /tui/src/ui.rs: -------------------------------------------------------------------------------- 1 | //! The UI implementation. 2 | 3 | use crate::event::Event; 4 | use crate::input_backend::InputBackend; 5 | use ratatui::style::{Modifier, Style}; 6 | use ratatui::widgets::{List, ListItem}; 7 | use ratatui::Terminal; 8 | 9 | use crate::item::Item; 10 | use crate::stateful_list::StatefulList; 11 | 12 | /// The UI for selecting the boot option to use as [`BootNext`]. 13 | pub struct BootNextSelectorUI<'a, B: ratatui::backend::Backend> { 14 | /// The terminal backend. 15 | terminal: &'a mut Terminal, 16 | /// The input backend. 17 | input: &'a mut dyn InputBackend, 18 | /// The UI state. 19 | state: StatefulList<'a, Item>, 20 | } 21 | 22 | impl<'a, B: ratatui::backend::Backend> BootNextSelectorUI<'a, B> { 23 | /// Construct a new [`Self`]. 24 | pub fn new( 25 | terminal: &'a mut Terminal, 26 | input: &'a mut dyn InputBackend, 27 | items: &'a [Item], 28 | current_item: usize, 29 | ) -> Self { 30 | let state = StatefulList::new(items, current_item); 31 | Self { 32 | terminal, 33 | input, 34 | state, 35 | } 36 | } 37 | 38 | /// Execute the UI and return the selected load option index (if any). 39 | pub fn run(&mut self) -> Result, anyhow::Error> { 40 | let result = loop { 41 | let state = &mut self.state; 42 | 43 | { 44 | let (iter, state) = state.render_params(); 45 | self.terminal.draw(|f| { 46 | let rect = f.size(); 47 | let style = Style::default(); 48 | let list = List::new(iter.map(ListItem::new).collect::>()) 49 | .highlight_style(style.add_modifier(Modifier::BOLD)) 50 | .highlight_symbol("- "); 51 | f.render_stateful_widget(list, rect, state) 52 | })?; 53 | } 54 | 55 | let evt = match self.input.next() { 56 | Some(evt) => evt, 57 | None => continue, 58 | }; 59 | match evt { 60 | Event::Quit => break None, 61 | Event::Down => state.next(), 62 | Event::Up => state.previous(), 63 | Event::Enter => break Some(state.selected_index()), 64 | _ => {} 65 | } 66 | }; 67 | Ok(result) 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /.github/actions/build-gtk-windows/action.yml: -------------------------------------------------------------------------------- 1 | name: "Build GTK" 2 | description: "Build GTK from source on Windows using msvc toolchain" 3 | runs: 4 | using: "composite" 5 | steps: 6 | - uses: actions/cache@v3 7 | id: cache 8 | with: 9 | path: c:/gnome 10 | key: ${{ runner.os }}-gtk 11 | restore-keys: | 12 | ${{ runner.os }}-gtk 13 | 14 | - name: Set up the PATH environment 15 | shell: bash 16 | run: | 17 | echo "C:\pkg-config-lite-0.28-1\bin" >>"$GITHUB_PATH" 18 | echo "C:\gnome\bin" >>"$GITHUB_PATH" 19 | echo "PKG_CONFIG_PATH=C:\gnome\lib\pkgconfig" >>"$GITHUB_ENV" 20 | 21 | - name: Install pkgconfig-lite 22 | shell: pwsh 23 | run: | 24 | Invoke-WebRequest -Uri https://deac-fra.dl.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip -OutFile /pkg_config_lite.zip -MaximumRetryCount 5 25 | Expand-Archive /pkg_config_lite.zip -DestinationPath C:\ 26 | ls C:\ 27 | ls C:\pkg-config-lite-0.28-1 28 | ls C:\pkg-config-lite-0.28-1\bin 29 | pkg-config --version 30 | 31 | - name: Clone GTK 32 | shell: pwsh 33 | working-directory: / 34 | if: steps.cache.outputs.cache-hit != 'true' 35 | run: | 36 | git clone https://gitlab.gnome.org/GNOME/gtk.git --depth 1 37 | 38 | - name: Setup Python 39 | uses: actions/setup-python@v2 40 | with: 41 | python-version: '3.x' 42 | 43 | - name: Install Python Dependencies 44 | shell: pwsh 45 | run: pip install meson ninja 46 | 47 | - name: Prepare GTK build 48 | shell: pwsh 49 | working-directory: /gtk 50 | if: steps.cache.outputs.cache-hit != 'true' 51 | run: | 52 | meson setup builddir ` 53 | --prefix="C:/gnome" ` 54 | --backend=ninja ` 55 | -Dbackend_max_links=1 ` 56 | -Dbuild-demos=false ` 57 | -Dbuild-tests=false ` 58 | -Dmedia-gstreamer=disabled ` 59 | -Dbuild-examples=false ` 60 | -Dglib:tests=false ` 61 | -Dharfbuzz:tests=disabled ` 62 | -Dharfbuzz:docs=disabled ` 63 | -Dgraphene:tests=false ` 64 | -Dgdk-pixbuf:tests=false ` 65 | -Dcairo:tests=disabled 66 | 67 | - name: Build and install GTK 68 | shell: pwsh 69 | working-directory: /gtk 70 | if: steps.cache.outputs.cache-hit != 'true' 71 | run: | 72 | meson install -C builddir 73 | 74 | - name: List the contents 75 | shell: bash 76 | run: | 77 | ls -laR "C:/gnome" 78 | -------------------------------------------------------------------------------- /iui/src/main.rs: -------------------------------------------------------------------------------- 1 | //! An iui-based GUI app for rebootinto. 2 | 3 | #![windows_subsystem = "windows"] 4 | 5 | use rebootinto_core as core; 6 | 7 | use iui::controls::{Button, Label, VerticalBox}; 8 | use iui::prelude::*; 9 | 10 | use std::cell::RefCell; 11 | use std::rc::Rc; 12 | 13 | fn main() { 14 | if let Err(err) = run() { 15 | match std::env::var("PANIC_ON_ERROR") { 16 | Ok(ref val) if val == "true" => panic!("Error: {err}"), 17 | _ => {} 18 | } 19 | 20 | eprintln!("Error: {err}"); 21 | std::process::exit(1); 22 | } 23 | } 24 | 25 | /// Run the app and return the error. 26 | fn run() -> Result<(), anyhow::Error> { 27 | let mut backend = core::Backend::init()?; 28 | let load_options = backend 29 | .load_options()? 30 | .collect::, core::LoadOptionError>>()?; 31 | 32 | let backend = Rc::new(RefCell::new(backend)); 33 | 34 | let ui = UI::init().map_err(|err| anyhow::format_err!("UI init error: {err}"))?; 35 | 36 | let mut win = Window::new(&ui, "Reboot Into", 200, 200, WindowType::NoMenubar); 37 | 38 | let mut vbox_rebooting = VerticalBox::new(&ui); 39 | let mut lbl_reboot = Label::new(&ui, "Rebooting..."); 40 | lbl_reboot.show(&ui); 41 | vbox_rebooting.append(&ui, lbl_reboot.clone(), LayoutStrategy::Stretchy); 42 | 43 | let mut vbox_buttons = VerticalBox::new(&ui); 44 | vbox_buttons.set_padded(&ui, true); 45 | 46 | for load_option in load_options { 47 | let mut button = Button::new(&ui, &load_option.description); 48 | button.on_clicked(&ui, { 49 | let backend = Rc::clone(&backend); 50 | let ui = ui.clone(); 51 | let mut win = win.clone(); 52 | let mut lbl_reboot = lbl_reboot.clone(); 53 | let vbox_rebooting = vbox_rebooting.clone(); 54 | move |_btn| { 55 | let load_option = load_option.clone(); 56 | let mut backend = backend.borrow_mut(); 57 | if let Err(err) = backend.reboot_into(load_option.number) { 58 | win.modal_err(&ui, "Reboot error", &format!("Error: {err}")); 59 | } else { 60 | let text = format!("Rebooting into:\n{}", load_option.description); 61 | lbl_reboot.set_text(&ui, &text); 62 | win.set_child(&ui, vbox_rebooting.clone()); 63 | } 64 | } 65 | }); 66 | vbox_buttons.append(&ui, button, LayoutStrategy::Compact); 67 | } 68 | 69 | win.set_child(&ui, vbox_buttons); 70 | 71 | win.show(&ui); 72 | ui.main(); 73 | 74 | Ok(()) 75 | } 76 | -------------------------------------------------------------------------------- /core/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! The core implementation of the rebootinto. 2 | 3 | #[cfg(target_os = "macos")] 4 | use rebootinto_efibootnext_mock as efibootnext; 5 | 6 | pub use efibootnext::LoadOption; 7 | 8 | /// The backend providing the rebootinto flow. 9 | pub struct Backend { 10 | /// The cross-platform adapter to interact with the boot options of the EFI firmware. 11 | adapter: efibootnext::Adapter, 12 | } 13 | 14 | impl Backend { 15 | /// Run all the necessary initialization and prepare a new [`Self`]. 16 | pub fn init() -> Result { 17 | Ok(Self { 18 | adapter: efibootnext::Adapter::default(), 19 | }) 20 | } 21 | 22 | /// Provide an iterator over the available load options. 23 | pub fn load_options( 24 | &mut self, 25 | ) -> Result> + '_, LoadOptionsError> 26 | { 27 | let iter = self 28 | .adapter 29 | .load_options() 30 | .map_err(LoadOptionsError::Efibootnext)?; 31 | Ok(iter.map(|result| result.map_err(LoadOptionError::Efibootnext))) 32 | } 33 | 34 | /// Perform the reboot operation into the given load option. 35 | pub fn reboot_into(&mut self, num: u16) -> Result<(), RebootIntoError> { 36 | self.adapter 37 | .set_boot_next(num) 38 | .map_err(RebootIntoError::SetBootNext)?; 39 | simplereboot::reboot().map_err(RebootIntoError::Reboot)?; 40 | Ok(()) 41 | } 42 | } 43 | 44 | /// An error that can occur during the initialization. 45 | #[derive(Debug, thiserror::Error)] 46 | pub enum InitError {} 47 | 48 | /// An error that can occur at the `load_options` call. 49 | #[derive(Debug, thiserror::Error)] 50 | pub enum LoadOptionsError { 51 | /// Something went wrong while getting the load option. 52 | #[error("enumerating load options error: {0}")] 53 | Efibootnext(efibootnext::error::EnumerateLoadOptionsError), 54 | } 55 | 56 | /// An error that can occur at the `load_options` call. 57 | #[derive(Debug, thiserror::Error)] 58 | pub enum LoadOptionError { 59 | /// Something went wrong while getting the load option. 60 | #[error("load option error: {0}")] 61 | Efibootnext(efibootnext::error::GetLoadOptionError), 62 | } 63 | 64 | /// An error that can occur at the `reboot_into` call. 65 | #[derive(Debug, thiserror::Error)] 66 | pub enum RebootIntoError { 67 | /// Something went wrong when setting the `BootNext` EFI variable. 68 | #[error("set BootNext error: {0}")] 69 | SetBootNext(efibootnext::error::SetBootNextError), 70 | /// Something went wrong during the reboot. 71 | #[error("reboot error: {0}")] 72 | Reboot(std::io::Error), 73 | } 74 | -------------------------------------------------------------------------------- /gtk/src/main.rs: -------------------------------------------------------------------------------- 1 | //! A GTK-based GUI app for rebootinto. 2 | 3 | #![windows_subsystem = "windows"] 4 | 5 | use std::cell::RefCell; 6 | use std::rc::Rc; 7 | 8 | use gtk::glib::{clone, gformat}; 9 | use rebootinto_core as core; 10 | 11 | use gtk::{prelude::*, Button, Orientation, PolicyType, ScrolledWindow}; 12 | use gtk::{Application, ApplicationWindow}; 13 | 14 | /// The Application ID. 15 | const APP_ID: &str = "mozgiii.Rebootinto"; 16 | 17 | fn main() { 18 | if let Err(err) = run() { 19 | match std::env::var("PANIC_ON_ERROR") { 20 | Ok(ref val) if val == "true" => panic!("Error: {err}"), 21 | _ => {} 22 | } 23 | 24 | eprintln!("Error: {err}"); 25 | std::process::exit(1); 26 | } 27 | } 28 | 29 | /// Run the app and return the error. 30 | fn run() -> Result<(), anyhow::Error> { 31 | let mut backend = core::Backend::init()?; 32 | let load_options = backend 33 | .load_options()? 34 | .collect::, core::LoadOptionError>>()?; 35 | 36 | let reboot_into = Rc::new(RefCell::new(None)); 37 | 38 | let app = Application::builder().application_id(APP_ID).build(); 39 | app.connect_activate(clone!(@strong reboot_into => move |app| { 40 | let buttons_box = gtk::Box::builder() 41 | .orientation(Orientation::Vertical) 42 | .homogeneous(true) 43 | .margin_top(6) 44 | .margin_bottom(6) 45 | .margin_start(6) 46 | .margin_end(6) 47 | .build(); 48 | 49 | for load_option in &load_options { 50 | let button = Button::builder() 51 | .label(gformat!("{}", &load_option)) 52 | .margin_top(6) 53 | .margin_bottom(6) 54 | .margin_start(6) 55 | .margin_end(6) 56 | .build(); 57 | 58 | button.connect_clicked(clone!(@strong app, @strong reboot_into, @strong load_option => move |_| { 59 | *reboot_into.borrow_mut() = Some(load_option.clone()); 60 | app.quit(); 61 | })); 62 | 63 | buttons_box.append(&button); 64 | } 65 | 66 | let scrolled_window = ScrolledWindow::builder() 67 | .hscrollbar_policy(PolicyType::Never) 68 | .propagate_natural_height(true) 69 | .child(&buttons_box) 70 | .build(); 71 | 72 | let window = ApplicationWindow::builder() 73 | .application(app) 74 | .title("Rebootinto") 75 | .default_width(350) 76 | .default_height(200) 77 | .child(&scrolled_window) 78 | .build(); 79 | window.show(); 80 | })); 81 | 82 | let exit_code = app.run(); 83 | if exit_code.value() != 0 { 84 | anyhow::bail!("error exit: {exit_code:?}") 85 | } 86 | 87 | drop(app); 88 | 89 | if let Some(ref reboot_into) = *reboot_into.borrow() { 90 | println!("Rebooting into: {}", &reboot_into); 91 | backend.reboot_into(reboot_into.number)?; 92 | } else { 93 | println!("Reboot cancelled"); 94 | } 95 | 96 | Ok(()) 97 | } 98 | -------------------------------------------------------------------------------- /cli/src/main.rs: -------------------------------------------------------------------------------- 1 | //! A clap-based CLI app for rebootinto. 2 | 3 | use clap::{Parser, Subcommand}; 4 | 5 | use rebootinto_core as core; 6 | 7 | /// The command line app invocation. 8 | #[derive(Parser)] 9 | #[command(version)] 10 | #[command(about = "Reboot into the specified boot option.", long_about = None)] 11 | struct Invocation { 12 | /// The command that is invoked. 13 | #[command(subcommand)] 14 | command: Command, 15 | } 16 | 17 | /// CLI commands. 18 | #[derive(Subcommand)] 19 | enum Command { 20 | /// Prints possible boot options. 21 | List, 22 | /// Reboot into the specified boot option. 23 | Reboot { 24 | /// The value to set `BootNext` to. 25 | load_option: String, 26 | /// The format to expect the load option value in. 27 | #[arg(short, long, env = "LOAD_OPTION_FORMAT", value_enum, default_value_t = LoadOptionFormat::Hex)] 28 | format: LoadOptionFormat, 29 | }, 30 | } 31 | 32 | fn main() { 33 | if let Err(err) = run() { 34 | match std::env::var("PANIC_ON_ERROR") { 35 | Ok(ref val) if val == "true" => panic!("Error: {err}"), 36 | _ => {} 37 | } 38 | 39 | eprintln!("Error: {err}"); 40 | std::process::exit(1); 41 | } 42 | } 43 | 44 | /// Run the app and return the error. 45 | fn run() -> Result<(), anyhow::Error> { 46 | let mut backend = core::Backend::init()?; 47 | 48 | let invocation = Invocation::parse(); 49 | 50 | match invocation.command { 51 | Command::List => { 52 | for load_option_result in backend.load_options()? { 53 | let load_option = load_option_result?; 54 | println!("{:04X} {}", load_option.number, load_option.description); 55 | } 56 | Ok(()) 57 | } 58 | Command::Reboot { 59 | load_option, 60 | format, 61 | } => { 62 | let load_option: u16 = format.parse_boot_next(&load_option)?; 63 | 64 | backend.reboot_into(load_option)?; 65 | 66 | println!("{load_option:04X}"); 67 | Ok(()) 68 | } 69 | } 70 | } 71 | 72 | /// The format of the `BootNext` value. 73 | #[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)] 74 | pub enum LoadOptionFormat { 75 | /// The value is a hex number. 76 | #[value(alias("h"))] 77 | #[value(alias("hexadecimal"))] 78 | Hex, 79 | /// The value is a decimal number. 80 | #[value(alias("d"))] 81 | #[value(alias("decimal"))] 82 | Dec, 83 | } 84 | 85 | impl LoadOptionFormat { 86 | /// Radix of the underlying numeric format. 87 | pub fn radix(&self) -> u32 { 88 | match self { 89 | LoadOptionFormat::Hex => 16, 90 | LoadOptionFormat::Dec => 10, 91 | } 92 | } 93 | 94 | /// Parse the `BootNext` value using the format. 95 | pub fn parse_boot_next(&self, value: &str) -> Result { 96 | let val = u16::from_str_radix(value, self.radix()).map_err(|err| { 97 | anyhow::format_err!("unable to parse the boot option in {self} format: {err}") 98 | })?; 99 | Ok(val) 100 | } 101 | } 102 | 103 | impl std::fmt::Display for LoadOptionFormat { 104 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 105 | match self { 106 | Self::Dec => f.write_str("decimal"), 107 | Self::Hex => f.write_str("hex"), 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /.github/workflows/code.yml: -------------------------------------------------------------------------------- 1 | name: code 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | schedule: 9 | - cron: "0 20 * * 0" 10 | 11 | concurrency: 12 | group: ${{ github.workflow }}-${{ github.ref || github.run_id }} 13 | cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} 14 | 15 | defaults: 16 | run: 17 | shell: bash 18 | 19 | jobs: 20 | test: 21 | name: ${{ matrix.rust-toolchain.name }} / ${{ matrix.platform.name }} / ${{ matrix.mode.name }} 22 | runs-on: ${{ matrix.platform.os }} 23 | strategy: 24 | matrix: 25 | rust-toolchain: 26 | - name: stable 27 | allow-fail: false 28 | 29 | platform: 30 | - name: Linux 31 | os: ubuntu-latest 32 | cacheKey: ubuntu-latest 33 | buildEnvScript: .github/scripts/build_env/linux.sh 34 | env: {} 35 | experimental: false 36 | - name: Windows 37 | os: windows-latest 38 | cacheKey: windows-latest 39 | buildEnvScript: .github/scripts/build_env/windows.sh 40 | env: 41 | CARGO_INCREMENTAL: "0" 42 | experimental: false 43 | 44 | mode: 45 | - name: clippy 46 | cargoCommand: clippy 47 | cargoArgs: --workspace -- -D warnings 48 | - name: test 49 | cargoCommand: test 50 | cargoArgs: --workspace 51 | - name: build 52 | cargoCommand: build 53 | cargoArgs: --workspace 54 | 55 | fail-fast: false 56 | continue-on-error: ${{ matrix.platform.experimental || matrix.rust-toolchain.allow-fail }} 57 | env: ${{ matrix.platform.env }} 58 | steps: 59 | - name: Job config 60 | run: echo "$MATRIX_CONTEXT" 61 | env: 62 | MATRIX_CONTEXT: ${{ toJson(matrix) }} 63 | 64 | - name: Checkout 65 | uses: actions/checkout@v4 66 | 67 | - uses: ./.github/actions/common-setup 68 | with: 69 | platformCacheKey: ${{ matrix.platform.cacheKey }} 70 | buildEnvScript: ${{ matrix.platform.buildEnvScript }} 71 | timeout-minutes: 25 72 | 73 | - name: Run cargo ${{ matrix.mode.cargoCommand }} 74 | uses: actions-rs/cargo@v1 75 | with: 76 | command: ${{ matrix.mode.cargoCommand }} 77 | args: ${{ matrix.mode.cargoArgs }} 78 | 79 | package: 80 | name: stable / ${{ matrix.platform.name }} / package 81 | runs-on: ${{ matrix.platform.os }} 82 | strategy: 83 | matrix: 84 | platform: 85 | - name: Windows 86 | os: windows-latest 87 | packagingEnvScript: .github/scripts/packaging_env/windows.sh 88 | packagingScript: .github/scripts/packaging/windows.sh 89 | env: 90 | CARGO_INCREMENTAL: "0" 91 | experimental: false 92 | - name: Linux 93 | os: ubuntu-latest 94 | packagingEnvScript: .github/scripts/packaging_env/linux.sh 95 | packagingScript: .github/scripts/packaging/linux.sh 96 | env: {} 97 | experimental: false 98 | 99 | fail-fast: false 100 | env: ${{ matrix.platform.env }} 101 | steps: 102 | - name: Job config 103 | run: echo "$MATRIX_CONTEXT" 104 | env: 105 | MATRIX_CONTEXT: ${{ toJson(matrix) }} 106 | 107 | - name: Checkout 108 | uses: actions/checkout@v4 109 | 110 | - uses: ./.github/actions/common-setup 111 | with: 112 | platformCacheKey: ${{ matrix.platform.cacheKey }} 113 | buildEnvScript: ${{ matrix.platform.packagingEnvScript }} 114 | timeout-minutes: 25 115 | 116 | - name: Run cargo build (release) 117 | uses: actions-rs/cargo@v1 118 | with: 119 | command: build 120 | args: --release --workspace 121 | 122 | - name: Do the packaging 123 | run: ${{ matrix.platform.packagingScript }} "${{ github.workspace }}/target/artifacts" 124 | 125 | - name: Upload packaged artifacts 126 | uses: actions/upload-artifact@v3 127 | with: 128 | name: ${{ matrix.platform.name }} Build 129 | path: ${{ github.workspace }}/target/artifacts 130 | -------------------------------------------------------------------------------- /iced/src/app.rs: -------------------------------------------------------------------------------- 1 | //! The iced app. 2 | 3 | use iced::{ 4 | alignment, executor, 5 | widget::{button, container, scrollable, text, Column}, 6 | Application, Command, Element, Length, Theme, 7 | }; 8 | 9 | use super::core; 10 | 11 | /// Initialization params. 12 | pub struct Init { 13 | /// The core backend. 14 | pub backend: core::Backend, 15 | /// The load options. 16 | pub load_options: Vec, 17 | } 18 | 19 | /// The button data. 20 | struct ButtonData { 21 | /// The load option of the button. 22 | load_option: core::LoadOption, 23 | } 24 | 25 | /// The app. 26 | pub struct App { 27 | /// The core backend. 28 | backend: core::Backend, 29 | /// The buttons. 30 | buttons: Vec, 31 | /// The app state. 32 | state: State, 33 | } 34 | 35 | /// The possible states of the app. 36 | enum State { 37 | /// User is choosing the input. 38 | Choosing, 39 | /// Reboot is in progress. 40 | Rebooting { 41 | /// The index of the load option. 42 | index: usize, 43 | }, 44 | /// An error has occured. 45 | Error { 46 | /// The error that occured. 47 | error: core::RebootIntoError, 48 | }, 49 | } 50 | 51 | /// The application control messages. 52 | #[derive(Debug, Clone, Copy)] 53 | pub enum Message { 54 | /// The button is pressed. 55 | ButtonPressed(usize), 56 | } 57 | 58 | /// The standard layout padding. 59 | pub const LAYOUT_PADDING: u16 = 10; 60 | /// The standard layout spacing. 61 | pub const LAYOUT_SPACING: u16 = 10; 62 | 63 | impl Application for App { 64 | type Executor = executor::Default; 65 | type Message = Message; 66 | type Theme = Theme; 67 | type Flags = Init; 68 | 69 | fn new(init: Self::Flags) -> (Self, Command) { 70 | let Init { 71 | backend, 72 | load_options, 73 | } = init; 74 | let buttons = load_options 75 | .into_iter() 76 | .map(|load_option| ButtonData { load_option }) 77 | .collect(); 78 | 79 | let app = Self { 80 | backend, 81 | buttons, 82 | state: State::Choosing, 83 | }; 84 | (app, Command::none()) 85 | } 86 | 87 | fn title(&self) -> String { 88 | String::from("Rebootinto") 89 | } 90 | 91 | fn theme(&self) -> Self::Theme { 92 | Theme::Dark 93 | } 94 | 95 | fn update(&mut self, message: Message) -> Command { 96 | match message { 97 | Message::ButtonPressed(index) => { 98 | let load_option = &self.buttons[index].load_option; 99 | self.state = match self.backend.reboot_into(load_option.number) { 100 | Ok(()) => State::Rebooting { index }, 101 | Err(error) => State::Error { error }, 102 | }; 103 | Command::none() 104 | } 105 | } 106 | } 107 | 108 | fn view(&self) -> Element<'_, Message> { 109 | match self.state { 110 | State::Choosing => { 111 | let button = |index: usize, load_option: &core::LoadOption| { 112 | button( 113 | text(&load_option.description) 114 | .width(Length::Fill) 115 | .height(Length::Fill) 116 | .horizontal_alignment(alignment::Horizontal::Center) 117 | .vertical_alignment(alignment::Vertical::Center), 118 | ) 119 | .width(Length::Fill) 120 | .on_press(Message::ButtonPressed(index)) 121 | .into() 122 | }; 123 | 124 | let buttons = Column::with_children( 125 | self.buttons 126 | .iter() 127 | .enumerate() 128 | .map(|(index, ButtonData { load_option })| button(index, load_option)) 129 | .collect(), 130 | ) 131 | .padding(LAYOUT_PADDING) 132 | .spacing(LAYOUT_SPACING); 133 | 134 | container(scrollable(buttons)) 135 | .width(Length::Fill) 136 | .height(Length::Fill) 137 | .into() 138 | } 139 | State::Rebooting { index } => { 140 | let load_option = &self.buttons[index].load_option; 141 | text_view(format!("Rebooting into {load_option}")) 142 | } 143 | State::Error { ref error } => text_view(format!("Error: {error}")), 144 | } 145 | } 146 | } 147 | 148 | /// Render text with the standard padding. 149 | fn text_view<'a>(label: impl ToString) -> Element<'a, Message> { 150 | let text = text(label).width(Length::Fill).height(Length::Fill); 151 | container(text) 152 | .padding(LAYOUT_PADDING) 153 | .width(Length::Fill) 154 | .height(Length::Fill) 155 | .into() 156 | } 157 | -------------------------------------------------------------------------------- /wix/main.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ab_glyph" 7 | version = "0.2.21" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" 10 | dependencies = [ 11 | "ab_glyph_rasterizer", 12 | "owned_ttf_parser", 13 | ] 14 | 15 | [[package]] 16 | name = "ab_glyph_rasterizer" 17 | version = "0.1.8" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" 20 | 21 | [[package]] 22 | name = "addr2line" 23 | version = "0.21.0" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 26 | dependencies = [ 27 | "gimli", 28 | ] 29 | 30 | [[package]] 31 | name = "adler" 32 | version = "1.0.2" 33 | source = "registry+https://github.com/rust-lang/crates.io-index" 34 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 35 | 36 | [[package]] 37 | name = "ahash" 38 | version = "0.7.6" 39 | source = "registry+https://github.com/rust-lang/crates.io-index" 40 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 41 | dependencies = [ 42 | "getrandom", 43 | "once_cell", 44 | "version_check", 45 | ] 46 | 47 | [[package]] 48 | name = "ahash" 49 | version = "0.8.3" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" 52 | dependencies = [ 53 | "cfg-if", 54 | "once_cell", 55 | "version_check", 56 | ] 57 | 58 | [[package]] 59 | name = "aho-corasick" 60 | version = "1.0.5" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" 63 | dependencies = [ 64 | "memchr", 65 | ] 66 | 67 | [[package]] 68 | name = "aliasable" 69 | version = "0.1.3" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 72 | 73 | [[package]] 74 | name = "allocator-api2" 75 | version = "0.2.16" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" 78 | 79 | [[package]] 80 | name = "android-activity" 81 | version = "0.4.3" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" 84 | dependencies = [ 85 | "android-properties", 86 | "bitflags 1.3.2", 87 | "cc", 88 | "jni-sys", 89 | "libc", 90 | "log", 91 | "ndk", 92 | "ndk-context", 93 | "ndk-sys", 94 | "num_enum 0.6.1", 95 | ] 96 | 97 | [[package]] 98 | name = "android-properties" 99 | version = "0.2.2" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 102 | 103 | [[package]] 104 | name = "android_system_properties" 105 | version = "0.1.5" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 108 | dependencies = [ 109 | "libc", 110 | ] 111 | 112 | [[package]] 113 | name = "anstream" 114 | version = "0.5.0" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" 117 | dependencies = [ 118 | "anstyle", 119 | "anstyle-parse", 120 | "anstyle-query", 121 | "anstyle-wincon", 122 | "colorchoice", 123 | "utf8parse", 124 | ] 125 | 126 | [[package]] 127 | name = "anstyle" 128 | version = "1.0.2" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" 131 | 132 | [[package]] 133 | name = "anstyle-parse" 134 | version = "0.2.1" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" 137 | dependencies = [ 138 | "utf8parse", 139 | ] 140 | 141 | [[package]] 142 | name = "anstyle-query" 143 | version = "1.0.0" 144 | source = "registry+https://github.com/rust-lang/crates.io-index" 145 | checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" 146 | dependencies = [ 147 | "windows-sys 0.48.0", 148 | ] 149 | 150 | [[package]] 151 | name = "anstyle-wincon" 152 | version = "2.1.0" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" 155 | dependencies = [ 156 | "anstyle", 157 | "windows-sys 0.48.0", 158 | ] 159 | 160 | [[package]] 161 | name = "anyhow" 162 | version = "1.0.75" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" 165 | 166 | [[package]] 167 | name = "approx" 168 | version = "0.5.1" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" 171 | dependencies = [ 172 | "num-traits", 173 | ] 174 | 175 | [[package]] 176 | name = "arrayref" 177 | version = "0.3.7" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" 180 | 181 | [[package]] 182 | name = "arrayvec" 183 | version = "0.7.4" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" 186 | 187 | [[package]] 188 | name = "ash" 189 | version = "0.37.3+1.3.251" 190 | source = "registry+https://github.com/rust-lang/crates.io-index" 191 | checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" 192 | dependencies = [ 193 | "libloading 0.7.4", 194 | ] 195 | 196 | [[package]] 197 | name = "autocfg" 198 | version = "1.1.0" 199 | source = "registry+https://github.com/rust-lang/crates.io-index" 200 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 201 | 202 | [[package]] 203 | name = "backtrace" 204 | version = "0.3.69" 205 | source = "registry+https://github.com/rust-lang/crates.io-index" 206 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 207 | dependencies = [ 208 | "addr2line", 209 | "cc", 210 | "cfg-if", 211 | "libc", 212 | "miniz_oxide", 213 | "object", 214 | "rustc-demangle", 215 | ] 216 | 217 | [[package]] 218 | name = "bindgen" 219 | version = "0.66.1" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" 222 | dependencies = [ 223 | "bitflags 2.4.0", 224 | "cexpr", 225 | "clang-sys", 226 | "lazy_static", 227 | "lazycell", 228 | "log", 229 | "peeking_take_while", 230 | "prettyplease", 231 | "proc-macro2", 232 | "quote", 233 | "regex", 234 | "rustc-hash", 235 | "shlex", 236 | "syn 2.0.29", 237 | "which", 238 | ] 239 | 240 | [[package]] 241 | name = "bit-set" 242 | version = "0.5.3" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 245 | dependencies = [ 246 | "bit-vec", 247 | ] 248 | 249 | [[package]] 250 | name = "bit-vec" 251 | version = "0.6.3" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 254 | 255 | [[package]] 256 | name = "bitflags" 257 | version = "1.3.2" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 260 | 261 | [[package]] 262 | name = "bitflags" 263 | version = "2.4.0" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" 266 | 267 | [[package]] 268 | name = "block" 269 | version = "0.1.6" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 272 | 273 | [[package]] 274 | name = "block-sys" 275 | version = "0.1.0-beta.1" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" 278 | dependencies = [ 279 | "objc-sys", 280 | ] 281 | 282 | [[package]] 283 | name = "block2" 284 | version = "0.2.0-alpha.6" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" 287 | dependencies = [ 288 | "block-sys", 289 | "objc2-encode", 290 | ] 291 | 292 | [[package]] 293 | name = "bumpalo" 294 | version = "3.13.0" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" 297 | 298 | [[package]] 299 | name = "bytemuck" 300 | version = "1.13.1" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" 303 | dependencies = [ 304 | "bytemuck_derive", 305 | ] 306 | 307 | [[package]] 308 | name = "bytemuck_derive" 309 | version = "1.4.1" 310 | source = "registry+https://github.com/rust-lang/crates.io-index" 311 | checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" 312 | dependencies = [ 313 | "proc-macro2", 314 | "quote", 315 | "syn 2.0.29", 316 | ] 317 | 318 | [[package]] 319 | name = "byteorder" 320 | version = "1.4.3" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 323 | 324 | [[package]] 325 | name = "cairo-rs" 326 | version = "0.18.0" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "d859b656775a6b1dd078d3e5924884e6ea88aa649a7fdde03d5b2ec56ffcc10b" 329 | dependencies = [ 330 | "bitflags 2.4.0", 331 | "cairo-sys-rs", 332 | "glib", 333 | "libc", 334 | "once_cell", 335 | "thiserror", 336 | ] 337 | 338 | [[package]] 339 | name = "cairo-sys-rs" 340 | version = "0.18.0" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "bd4d115132e01c0165e3bf5f56aedee8980b0b96ede4eb000b693c05a8adb8ff" 343 | dependencies = [ 344 | "glib-sys", 345 | "libc", 346 | "system-deps", 347 | ] 348 | 349 | [[package]] 350 | name = "calloop" 351 | version = "0.10.6" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "52e0d00eb1ea24371a97d2da6201c6747a633dc6dc1988ef503403b4c59504a8" 354 | dependencies = [ 355 | "bitflags 1.3.2", 356 | "log", 357 | "nix 0.25.1", 358 | "slotmap", 359 | "thiserror", 360 | "vec_map", 361 | ] 362 | 363 | [[package]] 364 | name = "cassowary" 365 | version = "0.3.0" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" 368 | 369 | [[package]] 370 | name = "cc" 371 | version = "1.0.83" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 374 | dependencies = [ 375 | "jobserver", 376 | "libc", 377 | ] 378 | 379 | [[package]] 380 | name = "cexpr" 381 | version = "0.6.0" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 384 | dependencies = [ 385 | "nom", 386 | ] 387 | 388 | [[package]] 389 | name = "cfg-expr" 390 | version = "0.15.4" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9" 393 | dependencies = [ 394 | "smallvec", 395 | "target-lexicon", 396 | ] 397 | 398 | [[package]] 399 | name = "cfg-if" 400 | version = "1.0.0" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 403 | 404 | [[package]] 405 | name = "cfg_aliases" 406 | version = "0.1.1" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 409 | 410 | [[package]] 411 | name = "clang-sys" 412 | version = "1.6.1" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" 415 | dependencies = [ 416 | "glob", 417 | "libc", 418 | "libloading 0.7.4", 419 | ] 420 | 421 | [[package]] 422 | name = "clap" 423 | version = "4.4.2" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6" 426 | dependencies = [ 427 | "clap_builder", 428 | "clap_derive", 429 | ] 430 | 431 | [[package]] 432 | name = "clap_builder" 433 | version = "4.4.2" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08" 436 | dependencies = [ 437 | "anstream", 438 | "anstyle", 439 | "clap_lex", 440 | "strsim", 441 | ] 442 | 443 | [[package]] 444 | name = "clap_derive" 445 | version = "4.4.2" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" 448 | dependencies = [ 449 | "heck", 450 | "proc-macro2", 451 | "quote", 452 | "syn 2.0.29", 453 | ] 454 | 455 | [[package]] 456 | name = "clap_lex" 457 | version = "0.5.1" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" 460 | 461 | [[package]] 462 | name = "clipboard-win" 463 | version = "4.5.0" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" 466 | dependencies = [ 467 | "error-code", 468 | "str-buf", 469 | "winapi", 470 | ] 471 | 472 | [[package]] 473 | name = "clipboard_macos" 474 | version = "0.1.0" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95" 477 | dependencies = [ 478 | "objc", 479 | "objc-foundation", 480 | "objc_id", 481 | ] 482 | 483 | [[package]] 484 | name = "clipboard_wayland" 485 | version = "0.2.0" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "6f6364a9f7a66f2ac1a1a098aa1c7f6b686f2496c6ac5e5c0d773445df912747" 488 | dependencies = [ 489 | "smithay-clipboard", 490 | ] 491 | 492 | [[package]] 493 | name = "clipboard_x11" 494 | version = "0.4.0" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "983a7010836ecd04dde2c6d27a0cb56ec5d21572177e782bdcb24a600124e921" 497 | dependencies = [ 498 | "thiserror", 499 | "x11rb 0.9.0", 500 | ] 501 | 502 | [[package]] 503 | name = "cocoa" 504 | version = "0.24.1" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" 507 | dependencies = [ 508 | "bitflags 1.3.2", 509 | "block", 510 | "cocoa-foundation", 511 | "core-foundation", 512 | "core-graphics", 513 | "foreign-types", 514 | "libc", 515 | "objc", 516 | ] 517 | 518 | [[package]] 519 | name = "cocoa-foundation" 520 | version = "0.1.1" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" 523 | dependencies = [ 524 | "bitflags 1.3.2", 525 | "block", 526 | "core-foundation", 527 | "core-graphics-types", 528 | "foreign-types", 529 | "libc", 530 | "objc", 531 | ] 532 | 533 | [[package]] 534 | name = "codespan-reporting" 535 | version = "0.11.1" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 538 | dependencies = [ 539 | "termcolor", 540 | "unicode-width", 541 | ] 542 | 543 | [[package]] 544 | name = "colorchoice" 545 | version = "1.0.0" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 548 | 549 | [[package]] 550 | name = "com-rs" 551 | version = "0.2.1" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" 554 | 555 | [[package]] 556 | name = "core-foundation" 557 | version = "0.9.3" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 560 | dependencies = [ 561 | "core-foundation-sys", 562 | "libc", 563 | ] 564 | 565 | [[package]] 566 | name = "core-foundation-sys" 567 | version = "0.8.4" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" 570 | 571 | [[package]] 572 | name = "core-graphics" 573 | version = "0.22.3" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 576 | dependencies = [ 577 | "bitflags 1.3.2", 578 | "core-foundation", 579 | "core-graphics-types", 580 | "foreign-types", 581 | "libc", 582 | ] 583 | 584 | [[package]] 585 | name = "core-graphics-types" 586 | version = "0.1.2" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" 589 | dependencies = [ 590 | "bitflags 1.3.2", 591 | "core-foundation", 592 | "libc", 593 | ] 594 | 595 | [[package]] 596 | name = "cosmic-text" 597 | version = "0.9.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "b0b68966c2543609f8d92f9d33ac3b719b2a67529b0c6c0b3e025637b477eef9" 600 | dependencies = [ 601 | "aliasable", 602 | "fontdb", 603 | "libm", 604 | "log", 605 | "rangemap", 606 | "rustybuzz", 607 | "swash", 608 | "sys-locale", 609 | "unicode-bidi", 610 | "unicode-linebreak", 611 | "unicode-script", 612 | "unicode-segmentation", 613 | ] 614 | 615 | [[package]] 616 | name = "crc32fast" 617 | version = "1.3.2" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 620 | dependencies = [ 621 | "cfg-if", 622 | ] 623 | 624 | [[package]] 625 | name = "crossterm" 626 | version = "0.27.0" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" 629 | dependencies = [ 630 | "bitflags 2.4.0", 631 | "crossterm_winapi", 632 | "libc", 633 | "mio", 634 | "parking_lot 0.12.1", 635 | "signal-hook", 636 | "signal-hook-mio", 637 | "winapi", 638 | ] 639 | 640 | [[package]] 641 | name = "crossterm_winapi" 642 | version = "0.9.1" 643 | source = "registry+https://github.com/rust-lang/crates.io-index" 644 | checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 645 | dependencies = [ 646 | "winapi", 647 | ] 648 | 649 | [[package]] 650 | name = "crunchy" 651 | version = "0.2.2" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 654 | 655 | [[package]] 656 | name = "d3d12" 657 | version = "0.6.0" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da" 660 | dependencies = [ 661 | "bitflags 1.3.2", 662 | "libloading 0.7.4", 663 | "winapi", 664 | ] 665 | 666 | [[package]] 667 | name = "dispatch" 668 | version = "0.2.0" 669 | source = "registry+https://github.com/rust-lang/crates.io-index" 670 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 671 | 672 | [[package]] 673 | name = "dlib" 674 | version = "0.5.2" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 677 | dependencies = [ 678 | "libloading 0.8.0", 679 | ] 680 | 681 | [[package]] 682 | name = "downcast-rs" 683 | version = "1.2.0" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" 686 | 687 | [[package]] 688 | name = "efi-loadopt" 689 | version = "0.2.1" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "d4aee6d41d7f6ad011a08e15041f1d917361c0ca91ee03a9798b60d5c390fea3" 692 | dependencies = [ 693 | "byteorder", 694 | "thiserror", 695 | ] 696 | 697 | [[package]] 698 | name = "efibootnext" 699 | version = "0.5.0" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "eae1c81e1411193fd01fa2a719132cfd35fec99cbd2f93da88a1479b8cce44ab" 702 | dependencies = [ 703 | "efi-loadopt", 704 | "efivar", 705 | "thiserror", 706 | ] 707 | 708 | [[package]] 709 | name = "efivar" 710 | version = "1.4.0" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "2a93f818b384b2bc4696baee65bdaa8e35b0280fe04586af08d5c878552c45f3" 713 | dependencies = [ 714 | "bitflags 2.4.0", 715 | "byteorder", 716 | "failure", 717 | "lazy_static", 718 | "uuid", 719 | "winapi", 720 | ] 721 | 722 | [[package]] 723 | name = "either" 724 | version = "1.9.0" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" 727 | 728 | [[package]] 729 | name = "embed-resource" 730 | version = "1.8.0" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "e62abb876c07e4754fae5c14cafa77937841f01740637e17d78dc04352f32a5e" 733 | dependencies = [ 734 | "cc", 735 | "rustc_version", 736 | "toml 0.5.11", 737 | "vswhom", 738 | "winreg 0.10.1", 739 | ] 740 | 741 | [[package]] 742 | name = "embed-resource" 743 | version = "2.3.0" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "fd0a2c9b742a980060d22545a7a83b573acd6b73045b9de6370c9530ce652f27" 746 | dependencies = [ 747 | "cc", 748 | "rustc_version", 749 | "toml 0.7.6", 750 | "vswhom", 751 | "winreg 0.51.0", 752 | ] 753 | 754 | [[package]] 755 | name = "equivalent" 756 | version = "1.0.1" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 759 | 760 | [[package]] 761 | name = "error-code" 762 | version = "2.3.1" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" 765 | dependencies = [ 766 | "libc", 767 | "str-buf", 768 | ] 769 | 770 | [[package]] 771 | name = "etagere" 772 | version = "0.2.8" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "fcf22f748754352918e082e0039335ee92454a5d62bcaf69b5e8daf5907d9644" 775 | dependencies = [ 776 | "euclid", 777 | "svg_fmt", 778 | ] 779 | 780 | [[package]] 781 | name = "euclid" 782 | version = "0.22.9" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" 785 | dependencies = [ 786 | "num-traits", 787 | ] 788 | 789 | [[package]] 790 | name = "failure" 791 | version = "0.1.8" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" 794 | dependencies = [ 795 | "backtrace", 796 | "failure_derive", 797 | ] 798 | 799 | [[package]] 800 | name = "failure_derive" 801 | version = "0.1.8" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" 804 | dependencies = [ 805 | "proc-macro2", 806 | "quote", 807 | "syn 1.0.109", 808 | "synstructure", 809 | ] 810 | 811 | [[package]] 812 | name = "fast-srgb8" 813 | version = "1.0.0" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" 816 | 817 | [[package]] 818 | name = "fastrand" 819 | version = "1.9.0" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" 822 | dependencies = [ 823 | "instant", 824 | ] 825 | 826 | [[package]] 827 | name = "fdeflate" 828 | version = "0.3.0" 829 | source = "registry+https://github.com/rust-lang/crates.io-index" 830 | checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" 831 | dependencies = [ 832 | "simd-adler32", 833 | ] 834 | 835 | [[package]] 836 | name = "field-offset" 837 | version = "0.3.6" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" 840 | dependencies = [ 841 | "memoffset 0.9.0", 842 | "rustc_version", 843 | ] 844 | 845 | [[package]] 846 | name = "find-winsdk" 847 | version = "0.2.0" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "a8cbf17b871570c1f8612b763bac3e86290602bcf5dc3c5ce657e0e1e9071d9e" 850 | dependencies = [ 851 | "serde", 852 | "serde_derive", 853 | "winreg 0.5.1", 854 | ] 855 | 856 | [[package]] 857 | name = "flate2" 858 | version = "1.0.27" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" 861 | dependencies = [ 862 | "crc32fast", 863 | "miniz_oxide", 864 | ] 865 | 866 | [[package]] 867 | name = "fontdb" 868 | version = "0.14.1" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" 871 | dependencies = [ 872 | "log", 873 | "memmap2 0.6.2", 874 | "slotmap", 875 | "tinyvec", 876 | "ttf-parser", 877 | ] 878 | 879 | [[package]] 880 | name = "foreign-types" 881 | version = "0.3.2" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 884 | dependencies = [ 885 | "foreign-types-shared", 886 | ] 887 | 888 | [[package]] 889 | name = "foreign-types-shared" 890 | version = "0.1.1" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 893 | 894 | [[package]] 895 | name = "futures" 896 | version = "0.3.28" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" 899 | dependencies = [ 900 | "futures-channel", 901 | "futures-core", 902 | "futures-executor", 903 | "futures-io", 904 | "futures-sink", 905 | "futures-task", 906 | "futures-util", 907 | ] 908 | 909 | [[package]] 910 | name = "futures-channel" 911 | version = "0.3.28" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" 914 | dependencies = [ 915 | "futures-core", 916 | "futures-sink", 917 | ] 918 | 919 | [[package]] 920 | name = "futures-core" 921 | version = "0.3.28" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" 924 | 925 | [[package]] 926 | name = "futures-executor" 927 | version = "0.3.28" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" 930 | dependencies = [ 931 | "futures-core", 932 | "futures-task", 933 | "futures-util", 934 | "num_cpus", 935 | ] 936 | 937 | [[package]] 938 | name = "futures-io" 939 | version = "0.3.28" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" 942 | 943 | [[package]] 944 | name = "futures-macro" 945 | version = "0.3.28" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" 948 | dependencies = [ 949 | "proc-macro2", 950 | "quote", 951 | "syn 2.0.29", 952 | ] 953 | 954 | [[package]] 955 | name = "futures-sink" 956 | version = "0.3.28" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" 959 | 960 | [[package]] 961 | name = "futures-task" 962 | version = "0.3.28" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" 965 | 966 | [[package]] 967 | name = "futures-util" 968 | version = "0.3.28" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" 971 | dependencies = [ 972 | "futures-channel", 973 | "futures-core", 974 | "futures-io", 975 | "futures-macro", 976 | "futures-sink", 977 | "futures-task", 978 | "memchr", 979 | "pin-project-lite", 980 | "pin-utils", 981 | "slab", 982 | ] 983 | 984 | [[package]] 985 | name = "gdk-pixbuf" 986 | version = "0.18.0" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "bbc9c2ed73a81d556b65d08879ba4ee58808a6b1927ce915262185d6d547c6f3" 989 | dependencies = [ 990 | "gdk-pixbuf-sys", 991 | "gio", 992 | "glib", 993 | "libc", 994 | "once_cell", 995 | ] 996 | 997 | [[package]] 998 | name = "gdk-pixbuf-sys" 999 | version = "0.18.0" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" 1002 | dependencies = [ 1003 | "gio-sys", 1004 | "glib-sys", 1005 | "gobject-sys", 1006 | "libc", 1007 | "system-deps", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "gdk4" 1012 | version = "0.7.2" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "6982d9815ed6ac95b0467b189e81f29dea26d08a732926ec113e65744ed3f96c" 1015 | dependencies = [ 1016 | "cairo-rs", 1017 | "gdk-pixbuf", 1018 | "gdk4-sys", 1019 | "gio", 1020 | "glib", 1021 | "libc", 1022 | "pango", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "gdk4-sys" 1027 | version = "0.7.2" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0" 1030 | dependencies = [ 1031 | "cairo-sys-rs", 1032 | "gdk-pixbuf-sys", 1033 | "gio-sys", 1034 | "glib-sys", 1035 | "gobject-sys", 1036 | "libc", 1037 | "pango-sys", 1038 | "pkg-config", 1039 | "system-deps", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "gethostname" 1044 | version = "0.2.3" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" 1047 | dependencies = [ 1048 | "libc", 1049 | "winapi", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "getrandom" 1054 | version = "0.2.10" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" 1057 | dependencies = [ 1058 | "cfg-if", 1059 | "libc", 1060 | "wasi", 1061 | ] 1062 | 1063 | [[package]] 1064 | name = "gimli" 1065 | version = "0.28.0" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" 1068 | 1069 | [[package]] 1070 | name = "gio" 1071 | version = "0.18.1" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "7884cba6b1c5db1607d970cadf44b14a43913d42bc68766eea6a5e2fe0891524" 1074 | dependencies = [ 1075 | "futures-channel", 1076 | "futures-core", 1077 | "futures-io", 1078 | "futures-util", 1079 | "gio-sys", 1080 | "glib", 1081 | "libc", 1082 | "once_cell", 1083 | "pin-project-lite", 1084 | "smallvec", 1085 | "thiserror", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "gio-sys" 1090 | version = "0.18.1" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" 1093 | dependencies = [ 1094 | "glib-sys", 1095 | "gobject-sys", 1096 | "libc", 1097 | "system-deps", 1098 | "winapi", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "glam" 1103 | version = "0.24.1" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "42218cb640844e3872cc3c153dc975229e080a6c4733b34709ef445610550226" 1106 | 1107 | [[package]] 1108 | name = "glib" 1109 | version = "0.18.1" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "331156127e8166dd815cf8d2db3a5beb492610c716c03ee6db4f2d07092af0a7" 1112 | dependencies = [ 1113 | "bitflags 2.4.0", 1114 | "futures-channel", 1115 | "futures-core", 1116 | "futures-executor", 1117 | "futures-task", 1118 | "futures-util", 1119 | "gio-sys", 1120 | "glib-macros", 1121 | "glib-sys", 1122 | "gobject-sys", 1123 | "libc", 1124 | "memchr", 1125 | "once_cell", 1126 | "smallvec", 1127 | "thiserror", 1128 | ] 1129 | 1130 | [[package]] 1131 | name = "glib-macros" 1132 | version = "0.18.0" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "179643c50bf28d20d2f6eacd2531a88f2f5d9747dd0b86b8af1e8bb5dd0de3c0" 1135 | dependencies = [ 1136 | "heck", 1137 | "proc-macro-crate", 1138 | "proc-macro-error", 1139 | "proc-macro2", 1140 | "quote", 1141 | "syn 2.0.29", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "glib-sys" 1146 | version = "0.18.1" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" 1149 | dependencies = [ 1150 | "libc", 1151 | "system-deps", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "glob" 1156 | version = "0.3.1" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 1159 | 1160 | [[package]] 1161 | name = "glow" 1162 | version = "0.12.3" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" 1165 | dependencies = [ 1166 | "js-sys", 1167 | "slotmap", 1168 | "wasm-bindgen", 1169 | "web-sys", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "glyphon" 1174 | version = "0.3.0" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "5e87caa7459145f5e5f167bf34db4532901404c679e62339fb712a0e3ccf722a" 1177 | dependencies = [ 1178 | "cosmic-text", 1179 | "etagere", 1180 | "lru", 1181 | "wgpu", 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "gobject-sys" 1186 | version = "0.18.0" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" 1189 | dependencies = [ 1190 | "glib-sys", 1191 | "libc", 1192 | "system-deps", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "gpu-alloc" 1197 | version = "0.5.4" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62" 1200 | dependencies = [ 1201 | "bitflags 1.3.2", 1202 | "gpu-alloc-types", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "gpu-alloc-types" 1207 | version = "0.2.0" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" 1210 | dependencies = [ 1211 | "bitflags 1.3.2", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "gpu-allocator" 1216 | version = "0.22.0" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8" 1219 | dependencies = [ 1220 | "backtrace", 1221 | "log", 1222 | "thiserror", 1223 | "winapi", 1224 | "windows", 1225 | ] 1226 | 1227 | [[package]] 1228 | name = "gpu-descriptor" 1229 | version = "0.2.3" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a" 1232 | dependencies = [ 1233 | "bitflags 1.3.2", 1234 | "gpu-descriptor-types", 1235 | "hashbrown 0.12.3", 1236 | ] 1237 | 1238 | [[package]] 1239 | name = "gpu-descriptor-types" 1240 | version = "0.1.1" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" 1243 | dependencies = [ 1244 | "bitflags 1.3.2", 1245 | ] 1246 | 1247 | [[package]] 1248 | name = "graphene-rs" 1249 | version = "0.18.1" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401" 1252 | dependencies = [ 1253 | "glib", 1254 | "graphene-sys", 1255 | "libc", 1256 | ] 1257 | 1258 | [[package]] 1259 | name = "graphene-sys" 1260 | version = "0.18.1" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59" 1263 | dependencies = [ 1264 | "glib-sys", 1265 | "libc", 1266 | "pkg-config", 1267 | "system-deps", 1268 | ] 1269 | 1270 | [[package]] 1271 | name = "gsk4" 1272 | version = "0.7.2" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "cc25855255120f294d874acd6eaf4fbed7ce1cdc550e2d8415ea57fafbe816d5" 1275 | dependencies = [ 1276 | "cairo-rs", 1277 | "gdk4", 1278 | "glib", 1279 | "graphene-rs", 1280 | "gsk4-sys", 1281 | "libc", 1282 | "pango", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "gsk4-sys" 1287 | version = "0.7.2" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "e1ecf3a63bf1223d68f80f72cc896c4d8c80482fbce1c9a12c66d3de7290ee46" 1290 | dependencies = [ 1291 | "cairo-sys-rs", 1292 | "gdk4-sys", 1293 | "glib-sys", 1294 | "gobject-sys", 1295 | "graphene-sys", 1296 | "libc", 1297 | "pango-sys", 1298 | "system-deps", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "gtk4" 1303 | version = "0.7.2" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "a3b095b26f2a2df70be1805d3590eeb9d7a05ecb5be9649b82defc72dc56228c" 1306 | dependencies = [ 1307 | "cairo-rs", 1308 | "field-offset", 1309 | "futures-channel", 1310 | "gdk-pixbuf", 1311 | "gdk4", 1312 | "gio", 1313 | "glib", 1314 | "graphene-rs", 1315 | "gsk4", 1316 | "gtk4-macros", 1317 | "gtk4-sys", 1318 | "libc", 1319 | "pango", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "gtk4-macros" 1324 | version = "0.7.2" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f" 1327 | dependencies = [ 1328 | "anyhow", 1329 | "proc-macro-crate", 1330 | "proc-macro-error", 1331 | "proc-macro2", 1332 | "quote", 1333 | "syn 1.0.109", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "gtk4-sys" 1338 | version = "0.7.2" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "7b0bdde87c50317b4f355bcbb4a9c2c414ece1b7c824fb4ad4ba8f3bdb2c6603" 1341 | dependencies = [ 1342 | "cairo-sys-rs", 1343 | "gdk-pixbuf-sys", 1344 | "gdk4-sys", 1345 | "gio-sys", 1346 | "glib-sys", 1347 | "gobject-sys", 1348 | "graphene-sys", 1349 | "gsk4-sys", 1350 | "libc", 1351 | "pango-sys", 1352 | "system-deps", 1353 | ] 1354 | 1355 | [[package]] 1356 | name = "guillotiere" 1357 | version = "0.6.2" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" 1360 | dependencies = [ 1361 | "euclid", 1362 | "svg_fmt", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "half" 1367 | version = "2.3.1" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" 1370 | dependencies = [ 1371 | "cfg-if", 1372 | "crunchy", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "hashbrown" 1377 | version = "0.12.3" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1380 | dependencies = [ 1381 | "ahash 0.7.6", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "hashbrown" 1386 | version = "0.14.0" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" 1389 | dependencies = [ 1390 | "ahash 0.8.3", 1391 | "allocator-api2", 1392 | ] 1393 | 1394 | [[package]] 1395 | name = "hassle-rs" 1396 | version = "0.10.0" 1397 | source = "registry+https://github.com/rust-lang/crates.io-index" 1398 | checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" 1399 | dependencies = [ 1400 | "bitflags 1.3.2", 1401 | "com-rs", 1402 | "libc", 1403 | "libloading 0.7.4", 1404 | "thiserror", 1405 | "widestring", 1406 | "winapi", 1407 | ] 1408 | 1409 | [[package]] 1410 | name = "heck" 1411 | version = "0.4.1" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1414 | 1415 | [[package]] 1416 | name = "hermit-abi" 1417 | version = "0.3.2" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" 1420 | 1421 | [[package]] 1422 | name = "hexf-parse" 1423 | version = "0.2.1" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1426 | 1427 | [[package]] 1428 | name = "iced" 1429 | version = "0.10.0" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "c708807ec86f99dd729dc4d42db5239acf118cec14d3c5f57679dcfdbbc472b1" 1432 | dependencies = [ 1433 | "iced_core", 1434 | "iced_futures", 1435 | "iced_renderer", 1436 | "iced_widget", 1437 | "iced_winit", 1438 | "thiserror", 1439 | ] 1440 | 1441 | [[package]] 1442 | name = "iced_core" 1443 | version = "0.10.0" 1444 | source = "registry+https://github.com/rust-lang/crates.io-index" 1445 | checksum = "64d0bc4fbf018576d08d93f838e6058cc6f10bbc05e04ae249a2a44dffb4ebc8" 1446 | dependencies = [ 1447 | "bitflags 1.3.2", 1448 | "instant", 1449 | "log", 1450 | "palette", 1451 | "thiserror", 1452 | "twox-hash", 1453 | ] 1454 | 1455 | [[package]] 1456 | name = "iced_futures" 1457 | version = "0.7.0" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "14dab0054a9c7a1cbce227a8cd9ee4a094497b3d06094551ac6c1488d563802e" 1460 | dependencies = [ 1461 | "futures", 1462 | "iced_core", 1463 | "log", 1464 | "wasm-bindgen-futures", 1465 | "wasm-timer", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "iced_graphics" 1470 | version = "0.9.0" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "67ff14447a221e9e9205a13d84d7bbdf0636a3b1daa02cfca690ed09689c4d2b" 1473 | dependencies = [ 1474 | "bitflags 1.3.2", 1475 | "bytemuck", 1476 | "glam", 1477 | "half", 1478 | "iced_core", 1479 | "log", 1480 | "raw-window-handle", 1481 | "thiserror", 1482 | ] 1483 | 1484 | [[package]] 1485 | name = "iced_renderer" 1486 | version = "0.1.0" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "1033385b0db0099a0d13178c9ff93c1ce11e7d0177522acf578bf79febdb2af8" 1489 | dependencies = [ 1490 | "iced_graphics", 1491 | "iced_tiny_skia", 1492 | "iced_wgpu", 1493 | "log", 1494 | "raw-window-handle", 1495 | "thiserror", 1496 | ] 1497 | 1498 | [[package]] 1499 | name = "iced_runtime" 1500 | version = "0.1.1" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "7c6c89853e1250c6fac82c5015fa2144517be9b33d4b8e456f10e198b23e28bd" 1503 | dependencies = [ 1504 | "iced_core", 1505 | "iced_futures", 1506 | "thiserror", 1507 | ] 1508 | 1509 | [[package]] 1510 | name = "iced_style" 1511 | version = "0.9.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "d85c47d9d13e2281f75ddf98c865daf2101632bd2b855c401dd0b1c8b81a31a0" 1514 | dependencies = [ 1515 | "iced_core", 1516 | "once_cell", 1517 | "palette", 1518 | ] 1519 | 1520 | [[package]] 1521 | name = "iced_tiny_skia" 1522 | version = "0.1.0" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "c7715f6222c9470bbbd75a39f70478fa0d1bdfb81a377a34fd1b090ffccc480b" 1525 | dependencies = [ 1526 | "bytemuck", 1527 | "cosmic-text", 1528 | "iced_graphics", 1529 | "kurbo", 1530 | "log", 1531 | "raw-window-handle", 1532 | "rustc-hash", 1533 | "softbuffer", 1534 | "tiny-skia 0.10.0", 1535 | "twox-hash", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "iced_wgpu" 1540 | version = "0.11.1" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | checksum = "703f7c5de46b997ed7b18e05ec67059dcdf3beeac51e917c21071b021bb848b9" 1543 | dependencies = [ 1544 | "bitflags 1.3.2", 1545 | "bytemuck", 1546 | "futures", 1547 | "glam", 1548 | "glyphon", 1549 | "guillotiere", 1550 | "iced_graphics", 1551 | "log", 1552 | "once_cell", 1553 | "raw-window-handle", 1554 | "rustc-hash", 1555 | "twox-hash", 1556 | "wgpu", 1557 | ] 1558 | 1559 | [[package]] 1560 | name = "iced_widget" 1561 | version = "0.1.3" 1562 | source = "registry+https://github.com/rust-lang/crates.io-index" 1563 | checksum = "a177219ae51c3ba08f228ab932354b360cc669e94aec50c01e7c9b675f074c7c" 1564 | dependencies = [ 1565 | "iced_renderer", 1566 | "iced_runtime", 1567 | "iced_style", 1568 | "num-traits", 1569 | "thiserror", 1570 | "unicode-segmentation", 1571 | ] 1572 | 1573 | [[package]] 1574 | name = "iced_winit" 1575 | version = "0.10.0" 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" 1577 | checksum = "0ecea26fcc8074373f6011d2193d63445617d900a428eb4df66c0e5658408fb6" 1578 | dependencies = [ 1579 | "iced_graphics", 1580 | "iced_runtime", 1581 | "iced_style", 1582 | "log", 1583 | "raw-window-handle", 1584 | "thiserror", 1585 | "web-sys", 1586 | "winapi", 1587 | "window_clipboard", 1588 | "winit", 1589 | ] 1590 | 1591 | [[package]] 1592 | name = "indexmap" 1593 | version = "1.9.3" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1596 | dependencies = [ 1597 | "autocfg", 1598 | "hashbrown 0.12.3", 1599 | ] 1600 | 1601 | [[package]] 1602 | name = "indexmap" 1603 | version = "2.0.0" 1604 | source = "registry+https://github.com/rust-lang/crates.io-index" 1605 | checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" 1606 | dependencies = [ 1607 | "equivalent", 1608 | "hashbrown 0.14.0", 1609 | ] 1610 | 1611 | [[package]] 1612 | name = "indoc" 1613 | version = "2.0.3" 1614 | source = "registry+https://github.com/rust-lang/crates.io-index" 1615 | checksum = "2c785eefb63ebd0e33416dfcb8d6da0bf27ce752843a45632a67bf10d4d4b5c4" 1616 | 1617 | [[package]] 1618 | name = "instant" 1619 | version = "0.1.12" 1620 | source = "registry+https://github.com/rust-lang/crates.io-index" 1621 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1622 | dependencies = [ 1623 | "cfg-if", 1624 | "js-sys", 1625 | "wasm-bindgen", 1626 | "web-sys", 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "io-lifetimes" 1631 | version = "1.0.11" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" 1634 | dependencies = [ 1635 | "hermit-abi", 1636 | "libc", 1637 | "windows-sys 0.48.0", 1638 | ] 1639 | 1640 | [[package]] 1641 | name = "itertools" 1642 | version = "0.11.0" 1643 | source = "registry+https://github.com/rust-lang/crates.io-index" 1644 | checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" 1645 | dependencies = [ 1646 | "either", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "iui" 1651 | version = "0.3.0" 1652 | source = "git+https://github.com/MOZGIII/libui-rs.git?rev=5d526e4d8d817a0736f60835259070ffa58b8b42#5d526e4d8d817a0736f60835259070ffa58b8b42" 1653 | dependencies = [ 1654 | "bitflags 1.3.2", 1655 | "failure", 1656 | "libc", 1657 | "libui-sys", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "jni-sys" 1662 | version = "0.3.0" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1665 | 1666 | [[package]] 1667 | name = "jobserver" 1668 | version = "0.1.26" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" 1671 | dependencies = [ 1672 | "libc", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "js-sys" 1677 | version = "0.3.64" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" 1680 | dependencies = [ 1681 | "wasm-bindgen", 1682 | ] 1683 | 1684 | [[package]] 1685 | name = "khronos-egl" 1686 | version = "4.1.0" 1687 | source = "registry+https://github.com/rust-lang/crates.io-index" 1688 | checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" 1689 | dependencies = [ 1690 | "libc", 1691 | "libloading 0.7.4", 1692 | "pkg-config", 1693 | ] 1694 | 1695 | [[package]] 1696 | name = "kurbo" 1697 | version = "0.9.5" 1698 | source = "registry+https://github.com/rust-lang/crates.io-index" 1699 | checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" 1700 | dependencies = [ 1701 | "arrayvec", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "lazy_static" 1706 | version = "1.4.0" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1709 | 1710 | [[package]] 1711 | name = "lazycell" 1712 | version = "1.3.0" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 1715 | 1716 | [[package]] 1717 | name = "libc" 1718 | version = "0.2.147" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" 1721 | 1722 | [[package]] 1723 | name = "libloading" 1724 | version = "0.7.4" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1727 | dependencies = [ 1728 | "cfg-if", 1729 | "winapi", 1730 | ] 1731 | 1732 | [[package]] 1733 | name = "libloading" 1734 | version = "0.8.0" 1735 | source = "registry+https://github.com/rust-lang/crates.io-index" 1736 | checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" 1737 | dependencies = [ 1738 | "cfg-if", 1739 | "windows-sys 0.48.0", 1740 | ] 1741 | 1742 | [[package]] 1743 | name = "libm" 1744 | version = "0.2.7" 1745 | source = "registry+https://github.com/rust-lang/crates.io-index" 1746 | checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" 1747 | 1748 | [[package]] 1749 | name = "libui-sys" 1750 | version = "0.1.9" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "0b2f52c7fafd90c25c903a650c9101f2735a9654bda2fe85a02baecf5329c3b0" 1753 | dependencies = [ 1754 | "bindgen", 1755 | "embed-resource 1.8.0", 1756 | "find-winsdk", 1757 | "pkg-config", 1758 | ] 1759 | 1760 | [[package]] 1761 | name = "lock_api" 1762 | version = "0.4.10" 1763 | source = "registry+https://github.com/rust-lang/crates.io-index" 1764 | checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" 1765 | dependencies = [ 1766 | "autocfg", 1767 | "scopeguard", 1768 | ] 1769 | 1770 | [[package]] 1771 | name = "log" 1772 | version = "0.4.20" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 1775 | 1776 | [[package]] 1777 | name = "lru" 1778 | version = "0.11.0" 1779 | source = "registry+https://github.com/rust-lang/crates.io-index" 1780 | checksum = "eedb2bdbad7e0634f83989bf596f497b070130daaa398ab22d84c39e266deec5" 1781 | dependencies = [ 1782 | "hashbrown 0.14.0", 1783 | ] 1784 | 1785 | [[package]] 1786 | name = "malloc_buf" 1787 | version = "0.0.6" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1790 | dependencies = [ 1791 | "libc", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "memchr" 1796 | version = "2.6.2" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e" 1799 | 1800 | [[package]] 1801 | name = "memmap2" 1802 | version = "0.5.10" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" 1805 | dependencies = [ 1806 | "libc", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "memmap2" 1811 | version = "0.6.2" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" 1814 | dependencies = [ 1815 | "libc", 1816 | ] 1817 | 1818 | [[package]] 1819 | name = "memoffset" 1820 | version = "0.6.5" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1823 | dependencies = [ 1824 | "autocfg", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "memoffset" 1829 | version = "0.7.1" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" 1832 | dependencies = [ 1833 | "autocfg", 1834 | ] 1835 | 1836 | [[package]] 1837 | name = "memoffset" 1838 | version = "0.9.0" 1839 | source = "registry+https://github.com/rust-lang/crates.io-index" 1840 | checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" 1841 | dependencies = [ 1842 | "autocfg", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "metal" 1847 | version = "0.24.0" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" 1850 | dependencies = [ 1851 | "bitflags 1.3.2", 1852 | "block", 1853 | "core-graphics-types", 1854 | "foreign-types", 1855 | "log", 1856 | "objc", 1857 | ] 1858 | 1859 | [[package]] 1860 | name = "minimal-lexical" 1861 | version = "0.2.1" 1862 | source = "registry+https://github.com/rust-lang/crates.io-index" 1863 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1864 | 1865 | [[package]] 1866 | name = "miniz_oxide" 1867 | version = "0.7.1" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" 1870 | dependencies = [ 1871 | "adler", 1872 | "simd-adler32", 1873 | ] 1874 | 1875 | [[package]] 1876 | name = "mio" 1877 | version = "0.8.8" 1878 | source = "registry+https://github.com/rust-lang/crates.io-index" 1879 | checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" 1880 | dependencies = [ 1881 | "libc", 1882 | "log", 1883 | "wasi", 1884 | "windows-sys 0.48.0", 1885 | ] 1886 | 1887 | [[package]] 1888 | name = "naga" 1889 | version = "0.12.3" 1890 | source = "registry+https://github.com/rust-lang/crates.io-index" 1891 | checksum = "bbcc2e0513220fd2b598e6068608d4462db20322c0e77e47f6f488dfcfc279cb" 1892 | dependencies = [ 1893 | "bit-set", 1894 | "bitflags 1.3.2", 1895 | "codespan-reporting", 1896 | "hexf-parse", 1897 | "indexmap 1.9.3", 1898 | "log", 1899 | "num-traits", 1900 | "rustc-hash", 1901 | "spirv", 1902 | "termcolor", 1903 | "thiserror", 1904 | "unicode-xid", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "ndk" 1909 | version = "0.7.0" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" 1912 | dependencies = [ 1913 | "bitflags 1.3.2", 1914 | "jni-sys", 1915 | "ndk-sys", 1916 | "num_enum 0.5.11", 1917 | "raw-window-handle", 1918 | "thiserror", 1919 | ] 1920 | 1921 | [[package]] 1922 | name = "ndk-context" 1923 | version = "0.1.1" 1924 | source = "registry+https://github.com/rust-lang/crates.io-index" 1925 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1926 | 1927 | [[package]] 1928 | name = "ndk-sys" 1929 | version = "0.4.1+23.1.7779620" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" 1932 | dependencies = [ 1933 | "jni-sys", 1934 | ] 1935 | 1936 | [[package]] 1937 | name = "nix" 1938 | version = "0.22.3" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 1941 | dependencies = [ 1942 | "bitflags 1.3.2", 1943 | "cc", 1944 | "cfg-if", 1945 | "libc", 1946 | "memoffset 0.6.5", 1947 | ] 1948 | 1949 | [[package]] 1950 | name = "nix" 1951 | version = "0.24.3" 1952 | source = "registry+https://github.com/rust-lang/crates.io-index" 1953 | checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" 1954 | dependencies = [ 1955 | "bitflags 1.3.2", 1956 | "cfg-if", 1957 | "libc", 1958 | "memoffset 0.6.5", 1959 | ] 1960 | 1961 | [[package]] 1962 | name = "nix" 1963 | version = "0.25.1" 1964 | source = "registry+https://github.com/rust-lang/crates.io-index" 1965 | checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" 1966 | dependencies = [ 1967 | "autocfg", 1968 | "bitflags 1.3.2", 1969 | "cfg-if", 1970 | "libc", 1971 | "memoffset 0.6.5", 1972 | ] 1973 | 1974 | [[package]] 1975 | name = "nix" 1976 | version = "0.26.4" 1977 | source = "registry+https://github.com/rust-lang/crates.io-index" 1978 | checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" 1979 | dependencies = [ 1980 | "bitflags 1.3.2", 1981 | "cfg-if", 1982 | "libc", 1983 | "memoffset 0.7.1", 1984 | "pin-utils", 1985 | ] 1986 | 1987 | [[package]] 1988 | name = "nom" 1989 | version = "7.1.3" 1990 | source = "registry+https://github.com/rust-lang/crates.io-index" 1991 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1992 | dependencies = [ 1993 | "memchr", 1994 | "minimal-lexical", 1995 | ] 1996 | 1997 | [[package]] 1998 | name = "num-traits" 1999 | version = "0.2.16" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" 2002 | dependencies = [ 2003 | "autocfg", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "num_cpus" 2008 | version = "1.16.0" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 2011 | dependencies = [ 2012 | "hermit-abi", 2013 | "libc", 2014 | ] 2015 | 2016 | [[package]] 2017 | name = "num_enum" 2018 | version = "0.5.11" 2019 | source = "registry+https://github.com/rust-lang/crates.io-index" 2020 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 2021 | dependencies = [ 2022 | "num_enum_derive 0.5.11", 2023 | ] 2024 | 2025 | [[package]] 2026 | name = "num_enum" 2027 | version = "0.6.1" 2028 | source = "registry+https://github.com/rust-lang/crates.io-index" 2029 | checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" 2030 | dependencies = [ 2031 | "num_enum_derive 0.6.1", 2032 | ] 2033 | 2034 | [[package]] 2035 | name = "num_enum_derive" 2036 | version = "0.5.11" 2037 | source = "registry+https://github.com/rust-lang/crates.io-index" 2038 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 2039 | dependencies = [ 2040 | "proc-macro-crate", 2041 | "proc-macro2", 2042 | "quote", 2043 | "syn 1.0.109", 2044 | ] 2045 | 2046 | [[package]] 2047 | name = "num_enum_derive" 2048 | version = "0.6.1" 2049 | source = "registry+https://github.com/rust-lang/crates.io-index" 2050 | checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" 2051 | dependencies = [ 2052 | "proc-macro-crate", 2053 | "proc-macro2", 2054 | "quote", 2055 | "syn 2.0.29", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "numtoa" 2060 | version = "0.1.0" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" 2063 | 2064 | [[package]] 2065 | name = "objc" 2066 | version = "0.2.7" 2067 | source = "registry+https://github.com/rust-lang/crates.io-index" 2068 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 2069 | dependencies = [ 2070 | "malloc_buf", 2071 | "objc_exception", 2072 | ] 2073 | 2074 | [[package]] 2075 | name = "objc-foundation" 2076 | version = "0.1.1" 2077 | source = "registry+https://github.com/rust-lang/crates.io-index" 2078 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 2079 | dependencies = [ 2080 | "block", 2081 | "objc", 2082 | "objc_id", 2083 | ] 2084 | 2085 | [[package]] 2086 | name = "objc-sys" 2087 | version = "0.2.0-beta.2" 2088 | source = "registry+https://github.com/rust-lang/crates.io-index" 2089 | checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" 2090 | 2091 | [[package]] 2092 | name = "objc2" 2093 | version = "0.3.0-beta.3.patch-leaks.3" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" 2096 | dependencies = [ 2097 | "block2", 2098 | "objc-sys", 2099 | "objc2-encode", 2100 | ] 2101 | 2102 | [[package]] 2103 | name = "objc2-encode" 2104 | version = "2.0.0-pre.2" 2105 | source = "registry+https://github.com/rust-lang/crates.io-index" 2106 | checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" 2107 | dependencies = [ 2108 | "objc-sys", 2109 | ] 2110 | 2111 | [[package]] 2112 | name = "objc_exception" 2113 | version = "0.1.2" 2114 | source = "registry+https://github.com/rust-lang/crates.io-index" 2115 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 2116 | dependencies = [ 2117 | "cc", 2118 | ] 2119 | 2120 | [[package]] 2121 | name = "objc_id" 2122 | version = "0.1.1" 2123 | source = "registry+https://github.com/rust-lang/crates.io-index" 2124 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 2125 | dependencies = [ 2126 | "objc", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "object" 2131 | version = "0.32.0" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" 2134 | dependencies = [ 2135 | "memchr", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "once_cell" 2140 | version = "1.18.0" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" 2143 | 2144 | [[package]] 2145 | name = "orbclient" 2146 | version = "0.3.46" 2147 | source = "registry+https://github.com/rust-lang/crates.io-index" 2148 | checksum = "8378ac0dfbd4e7895f2d2c1f1345cab3836910baf3a300b000d04250f0c8428f" 2149 | dependencies = [ 2150 | "redox_syscall 0.3.5", 2151 | ] 2152 | 2153 | [[package]] 2154 | name = "owned_ttf_parser" 2155 | version = "0.19.0" 2156 | source = "registry+https://github.com/rust-lang/crates.io-index" 2157 | checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" 2158 | dependencies = [ 2159 | "ttf-parser", 2160 | ] 2161 | 2162 | [[package]] 2163 | name = "palette" 2164 | version = "0.7.3" 2165 | source = "registry+https://github.com/rust-lang/crates.io-index" 2166 | checksum = "b2e2f34147767aa758aa649415b50a69eeb46a67f9dc7db8011eeb3d84b351dc" 2167 | dependencies = [ 2168 | "approx", 2169 | "fast-srgb8", 2170 | "palette_derive", 2171 | "phf", 2172 | ] 2173 | 2174 | [[package]] 2175 | name = "palette_derive" 2176 | version = "0.7.3" 2177 | source = "registry+https://github.com/rust-lang/crates.io-index" 2178 | checksum = "b7db010ec5ff3d4385e4f133916faacd9dad0f6a09394c92d825b3aed310fa0a" 2179 | dependencies = [ 2180 | "proc-macro2", 2181 | "quote", 2182 | "syn 2.0.29", 2183 | ] 2184 | 2185 | [[package]] 2186 | name = "pango" 2187 | version = "0.18.0" 2188 | source = "registry+https://github.com/rust-lang/crates.io-index" 2189 | checksum = "06a9e54b831d033206160096b825f2070cf5fda7e35167b1c01e9e774f9202d1" 2190 | dependencies = [ 2191 | "gio", 2192 | "glib", 2193 | "libc", 2194 | "once_cell", 2195 | "pango-sys", 2196 | ] 2197 | 2198 | [[package]] 2199 | name = "pango-sys" 2200 | version = "0.18.0" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" 2203 | dependencies = [ 2204 | "glib-sys", 2205 | "gobject-sys", 2206 | "libc", 2207 | "system-deps", 2208 | ] 2209 | 2210 | [[package]] 2211 | name = "parking_lot" 2212 | version = "0.11.2" 2213 | source = "registry+https://github.com/rust-lang/crates.io-index" 2214 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 2215 | dependencies = [ 2216 | "instant", 2217 | "lock_api", 2218 | "parking_lot_core 0.8.6", 2219 | ] 2220 | 2221 | [[package]] 2222 | name = "parking_lot" 2223 | version = "0.12.1" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 2226 | dependencies = [ 2227 | "lock_api", 2228 | "parking_lot_core 0.9.8", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "parking_lot_core" 2233 | version = "0.8.6" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" 2236 | dependencies = [ 2237 | "cfg-if", 2238 | "instant", 2239 | "libc", 2240 | "redox_syscall 0.2.16", 2241 | "smallvec", 2242 | "winapi", 2243 | ] 2244 | 2245 | [[package]] 2246 | name = "parking_lot_core" 2247 | version = "0.9.8" 2248 | source = "registry+https://github.com/rust-lang/crates.io-index" 2249 | checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" 2250 | dependencies = [ 2251 | "cfg-if", 2252 | "libc", 2253 | "redox_syscall 0.3.5", 2254 | "smallvec", 2255 | "windows-targets 0.48.5", 2256 | ] 2257 | 2258 | [[package]] 2259 | name = "paste" 2260 | version = "1.0.14" 2261 | source = "registry+https://github.com/rust-lang/crates.io-index" 2262 | checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" 2263 | 2264 | [[package]] 2265 | name = "peeking_take_while" 2266 | version = "0.1.2" 2267 | source = "registry+https://github.com/rust-lang/crates.io-index" 2268 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 2269 | 2270 | [[package]] 2271 | name = "percent-encoding" 2272 | version = "2.3.0" 2273 | source = "registry+https://github.com/rust-lang/crates.io-index" 2274 | checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" 2275 | 2276 | [[package]] 2277 | name = "phf" 2278 | version = "0.11.2" 2279 | source = "registry+https://github.com/rust-lang/crates.io-index" 2280 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 2281 | dependencies = [ 2282 | "phf_macros", 2283 | "phf_shared", 2284 | ] 2285 | 2286 | [[package]] 2287 | name = "phf_generator" 2288 | version = "0.11.2" 2289 | source = "registry+https://github.com/rust-lang/crates.io-index" 2290 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" 2291 | dependencies = [ 2292 | "phf_shared", 2293 | "rand", 2294 | ] 2295 | 2296 | [[package]] 2297 | name = "phf_macros" 2298 | version = "0.11.2" 2299 | source = "registry+https://github.com/rust-lang/crates.io-index" 2300 | checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" 2301 | dependencies = [ 2302 | "phf_generator", 2303 | "phf_shared", 2304 | "proc-macro2", 2305 | "quote", 2306 | "syn 2.0.29", 2307 | ] 2308 | 2309 | [[package]] 2310 | name = "phf_shared" 2311 | version = "0.11.2" 2312 | source = "registry+https://github.com/rust-lang/crates.io-index" 2313 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 2314 | dependencies = [ 2315 | "siphasher", 2316 | ] 2317 | 2318 | [[package]] 2319 | name = "pin-project-lite" 2320 | version = "0.2.13" 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" 2322 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 2323 | 2324 | [[package]] 2325 | name = "pin-utils" 2326 | version = "0.1.0" 2327 | source = "registry+https://github.com/rust-lang/crates.io-index" 2328 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2329 | 2330 | [[package]] 2331 | name = "pkg-config" 2332 | version = "0.3.27" 2333 | source = "registry+https://github.com/rust-lang/crates.io-index" 2334 | checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" 2335 | 2336 | [[package]] 2337 | name = "png" 2338 | version = "0.17.10" 2339 | source = "registry+https://github.com/rust-lang/crates.io-index" 2340 | checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" 2341 | dependencies = [ 2342 | "bitflags 1.3.2", 2343 | "crc32fast", 2344 | "fdeflate", 2345 | "flate2", 2346 | "miniz_oxide", 2347 | ] 2348 | 2349 | [[package]] 2350 | name = "ppv-lite86" 2351 | version = "0.2.17" 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" 2353 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 2354 | 2355 | [[package]] 2356 | name = "prettyplease" 2357 | version = "0.2.12" 2358 | source = "registry+https://github.com/rust-lang/crates.io-index" 2359 | checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" 2360 | dependencies = [ 2361 | "proc-macro2", 2362 | "syn 2.0.29", 2363 | ] 2364 | 2365 | [[package]] 2366 | name = "proc-macro-crate" 2367 | version = "1.3.1" 2368 | source = "registry+https://github.com/rust-lang/crates.io-index" 2369 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 2370 | dependencies = [ 2371 | "once_cell", 2372 | "toml_edit", 2373 | ] 2374 | 2375 | [[package]] 2376 | name = "proc-macro-error" 2377 | version = "1.0.4" 2378 | source = "registry+https://github.com/rust-lang/crates.io-index" 2379 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2380 | dependencies = [ 2381 | "proc-macro-error-attr", 2382 | "proc-macro2", 2383 | "quote", 2384 | "syn 1.0.109", 2385 | "version_check", 2386 | ] 2387 | 2388 | [[package]] 2389 | name = "proc-macro-error-attr" 2390 | version = "1.0.4" 2391 | source = "registry+https://github.com/rust-lang/crates.io-index" 2392 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2393 | dependencies = [ 2394 | "proc-macro2", 2395 | "quote", 2396 | "version_check", 2397 | ] 2398 | 2399 | [[package]] 2400 | name = "proc-macro2" 2401 | version = "1.0.66" 2402 | source = "registry+https://github.com/rust-lang/crates.io-index" 2403 | checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" 2404 | dependencies = [ 2405 | "unicode-ident", 2406 | ] 2407 | 2408 | [[package]] 2409 | name = "profiling" 2410 | version = "1.0.10" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "45f10e75d83c7aec79a6aa46f897075890e156b105eebe51cfa0abce51af025f" 2413 | 2414 | [[package]] 2415 | name = "quick-xml" 2416 | version = "0.28.2" 2417 | source = "registry+https://github.com/rust-lang/crates.io-index" 2418 | checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" 2419 | dependencies = [ 2420 | "memchr", 2421 | ] 2422 | 2423 | [[package]] 2424 | name = "quote" 2425 | version = "1.0.33" 2426 | source = "registry+https://github.com/rust-lang/crates.io-index" 2427 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" 2428 | dependencies = [ 2429 | "proc-macro2", 2430 | ] 2431 | 2432 | [[package]] 2433 | name = "rand" 2434 | version = "0.8.5" 2435 | source = "registry+https://github.com/rust-lang/crates.io-index" 2436 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2437 | dependencies = [ 2438 | "libc", 2439 | "rand_chacha", 2440 | "rand_core", 2441 | ] 2442 | 2443 | [[package]] 2444 | name = "rand_chacha" 2445 | version = "0.3.1" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2448 | dependencies = [ 2449 | "ppv-lite86", 2450 | "rand_core", 2451 | ] 2452 | 2453 | [[package]] 2454 | name = "rand_core" 2455 | version = "0.6.4" 2456 | source = "registry+https://github.com/rust-lang/crates.io-index" 2457 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2458 | dependencies = [ 2459 | "getrandom", 2460 | ] 2461 | 2462 | [[package]] 2463 | name = "range-alloc" 2464 | version = "0.1.3" 2465 | source = "registry+https://github.com/rust-lang/crates.io-index" 2466 | checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" 2467 | 2468 | [[package]] 2469 | name = "rangemap" 2470 | version = "1.3.0" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "8b9283c6b06096b47afc7109834fdedab891175bb5241ee5d4f7d2546549f263" 2473 | 2474 | [[package]] 2475 | name = "ratatui" 2476 | version = "0.23.0" 2477 | source = "registry+https://github.com/rust-lang/crates.io-index" 2478 | checksum = "2e2e4cd95294a85c3b4446e63ef054eea43e0205b1fd60120c16b74ff7ff96ad" 2479 | dependencies = [ 2480 | "bitflags 2.4.0", 2481 | "cassowary", 2482 | "crossterm", 2483 | "indoc", 2484 | "itertools", 2485 | "paste", 2486 | "strum", 2487 | "termion", 2488 | "unicode-segmentation", 2489 | "unicode-width", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "raw-window-handle" 2494 | version = "0.5.2" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" 2497 | 2498 | [[package]] 2499 | name = "rebootinto-cli" 2500 | version = "0.1.0" 2501 | dependencies = [ 2502 | "anyhow", 2503 | "clap", 2504 | "embed-resource 2.3.0", 2505 | "rebootinto-core", 2506 | ] 2507 | 2508 | [[package]] 2509 | name = "rebootinto-core" 2510 | version = "0.1.2" 2511 | dependencies = [ 2512 | "efibootnext", 2513 | "rebootinto-efibootnext-mock", 2514 | "simplereboot", 2515 | "thiserror", 2516 | ] 2517 | 2518 | [[package]] 2519 | name = "rebootinto-efibootnext-mock" 2520 | version = "0.1.0" 2521 | dependencies = [ 2522 | "thiserror", 2523 | ] 2524 | 2525 | [[package]] 2526 | name = "rebootinto-gtk" 2527 | version = "0.1.0" 2528 | dependencies = [ 2529 | "anyhow", 2530 | "embed-resource 2.3.0", 2531 | "gtk4", 2532 | "rebootinto-core", 2533 | ] 2534 | 2535 | [[package]] 2536 | name = "rebootinto-iced" 2537 | version = "0.1.0" 2538 | dependencies = [ 2539 | "anyhow", 2540 | "embed-resource 2.3.0", 2541 | "iced", 2542 | "rebootinto-core", 2543 | ] 2544 | 2545 | [[package]] 2546 | name = "rebootinto-iui" 2547 | version = "0.1.0" 2548 | dependencies = [ 2549 | "anyhow", 2550 | "embed-resource 2.3.0", 2551 | "iui", 2552 | "rebootinto-core", 2553 | ] 2554 | 2555 | [[package]] 2556 | name = "rebootinto-tui" 2557 | version = "0.1.0" 2558 | dependencies = [ 2559 | "anyhow", 2560 | "crossterm", 2561 | "embed-resource 2.3.0", 2562 | "ratatui", 2563 | "rebootinto-core", 2564 | "termion", 2565 | ] 2566 | 2567 | [[package]] 2568 | name = "redox_syscall" 2569 | version = "0.2.16" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2572 | dependencies = [ 2573 | "bitflags 1.3.2", 2574 | ] 2575 | 2576 | [[package]] 2577 | name = "redox_syscall" 2578 | version = "0.3.5" 2579 | source = "registry+https://github.com/rust-lang/crates.io-index" 2580 | checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" 2581 | dependencies = [ 2582 | "bitflags 1.3.2", 2583 | ] 2584 | 2585 | [[package]] 2586 | name = "redox_termios" 2587 | version = "0.1.2" 2588 | source = "registry+https://github.com/rust-lang/crates.io-index" 2589 | checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f" 2590 | dependencies = [ 2591 | "redox_syscall 0.2.16", 2592 | ] 2593 | 2594 | [[package]] 2595 | name = "regex" 2596 | version = "1.9.4" 2597 | source = "registry+https://github.com/rust-lang/crates.io-index" 2598 | checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" 2599 | dependencies = [ 2600 | "aho-corasick", 2601 | "memchr", 2602 | "regex-automata", 2603 | "regex-syntax", 2604 | ] 2605 | 2606 | [[package]] 2607 | name = "regex-automata" 2608 | version = "0.3.7" 2609 | source = "registry+https://github.com/rust-lang/crates.io-index" 2610 | checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" 2611 | dependencies = [ 2612 | "aho-corasick", 2613 | "memchr", 2614 | "regex-syntax", 2615 | ] 2616 | 2617 | [[package]] 2618 | name = "regex-syntax" 2619 | version = "0.7.5" 2620 | source = "registry+https://github.com/rust-lang/crates.io-index" 2621 | checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" 2622 | 2623 | [[package]] 2624 | name = "renderdoc-sys" 2625 | version = "1.0.0" 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" 2627 | checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" 2628 | 2629 | [[package]] 2630 | name = "rustc-demangle" 2631 | version = "0.1.23" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 2634 | 2635 | [[package]] 2636 | name = "rustc-hash" 2637 | version = "1.1.0" 2638 | source = "registry+https://github.com/rust-lang/crates.io-index" 2639 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2640 | 2641 | [[package]] 2642 | name = "rustc_version" 2643 | version = "0.4.0" 2644 | source = "registry+https://github.com/rust-lang/crates.io-index" 2645 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 2646 | dependencies = [ 2647 | "semver", 2648 | ] 2649 | 2650 | [[package]] 2651 | name = "rustversion" 2652 | version = "1.0.14" 2653 | source = "registry+https://github.com/rust-lang/crates.io-index" 2654 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" 2655 | 2656 | [[package]] 2657 | name = "rustybuzz" 2658 | version = "0.8.0" 2659 | source = "registry+https://github.com/rust-lang/crates.io-index" 2660 | checksum = "82eea22c8f56965eeaf3a209b3d24508256c7b920fb3b6211b8ba0f7c0583250" 2661 | dependencies = [ 2662 | "bitflags 1.3.2", 2663 | "bytemuck", 2664 | "libm", 2665 | "smallvec", 2666 | "ttf-parser", 2667 | "unicode-bidi-mirroring", 2668 | "unicode-ccc", 2669 | "unicode-general-category", 2670 | "unicode-script", 2671 | ] 2672 | 2673 | [[package]] 2674 | name = "scoped-tls" 2675 | version = "1.0.1" 2676 | source = "registry+https://github.com/rust-lang/crates.io-index" 2677 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2678 | 2679 | [[package]] 2680 | name = "scopeguard" 2681 | version = "1.2.0" 2682 | source = "registry+https://github.com/rust-lang/crates.io-index" 2683 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2684 | 2685 | [[package]] 2686 | name = "sctk-adwaita" 2687 | version = "0.5.4" 2688 | source = "registry+https://github.com/rust-lang/crates.io-index" 2689 | checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09" 2690 | dependencies = [ 2691 | "ab_glyph", 2692 | "log", 2693 | "memmap2 0.5.10", 2694 | "smithay-client-toolkit", 2695 | "tiny-skia 0.8.4", 2696 | ] 2697 | 2698 | [[package]] 2699 | name = "semver" 2700 | version = "1.0.18" 2701 | source = "registry+https://github.com/rust-lang/crates.io-index" 2702 | checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" 2703 | 2704 | [[package]] 2705 | name = "serde" 2706 | version = "1.0.188" 2707 | source = "registry+https://github.com/rust-lang/crates.io-index" 2708 | checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" 2709 | dependencies = [ 2710 | "serde_derive", 2711 | ] 2712 | 2713 | [[package]] 2714 | name = "serde_derive" 2715 | version = "1.0.188" 2716 | source = "registry+https://github.com/rust-lang/crates.io-index" 2717 | checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" 2718 | dependencies = [ 2719 | "proc-macro2", 2720 | "quote", 2721 | "syn 2.0.29", 2722 | ] 2723 | 2724 | [[package]] 2725 | name = "serde_spanned" 2726 | version = "0.6.3" 2727 | source = "registry+https://github.com/rust-lang/crates.io-index" 2728 | checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" 2729 | dependencies = [ 2730 | "serde", 2731 | ] 2732 | 2733 | [[package]] 2734 | name = "shlex" 2735 | version = "1.1.0" 2736 | source = "registry+https://github.com/rust-lang/crates.io-index" 2737 | checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" 2738 | 2739 | [[package]] 2740 | name = "signal-hook" 2741 | version = "0.3.17" 2742 | source = "registry+https://github.com/rust-lang/crates.io-index" 2743 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 2744 | dependencies = [ 2745 | "libc", 2746 | "signal-hook-registry", 2747 | ] 2748 | 2749 | [[package]] 2750 | name = "signal-hook-mio" 2751 | version = "0.2.3" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" 2754 | dependencies = [ 2755 | "libc", 2756 | "mio", 2757 | "signal-hook", 2758 | ] 2759 | 2760 | [[package]] 2761 | name = "signal-hook-registry" 2762 | version = "1.4.1" 2763 | source = "registry+https://github.com/rust-lang/crates.io-index" 2764 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 2765 | dependencies = [ 2766 | "libc", 2767 | ] 2768 | 2769 | [[package]] 2770 | name = "simd-adler32" 2771 | version = "0.3.7" 2772 | source = "registry+https://github.com/rust-lang/crates.io-index" 2773 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 2774 | 2775 | [[package]] 2776 | name = "simplereboot" 2777 | version = "0.1.0" 2778 | source = "registry+https://github.com/rust-lang/crates.io-index" 2779 | checksum = "64b760b6c63cb62ff8163469f206a1627d03bb2a7f98496e3a006e93825ee6f5" 2780 | 2781 | [[package]] 2782 | name = "siphasher" 2783 | version = "0.3.11" 2784 | source = "registry+https://github.com/rust-lang/crates.io-index" 2785 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 2786 | 2787 | [[package]] 2788 | name = "slab" 2789 | version = "0.4.9" 2790 | source = "registry+https://github.com/rust-lang/crates.io-index" 2791 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2792 | dependencies = [ 2793 | "autocfg", 2794 | ] 2795 | 2796 | [[package]] 2797 | name = "slotmap" 2798 | version = "1.0.6" 2799 | source = "registry+https://github.com/rust-lang/crates.io-index" 2800 | checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" 2801 | dependencies = [ 2802 | "version_check", 2803 | ] 2804 | 2805 | [[package]] 2806 | name = "smallvec" 2807 | version = "1.11.0" 2808 | source = "registry+https://github.com/rust-lang/crates.io-index" 2809 | checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" 2810 | 2811 | [[package]] 2812 | name = "smithay-client-toolkit" 2813 | version = "0.16.0" 2814 | source = "registry+https://github.com/rust-lang/crates.io-index" 2815 | checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" 2816 | dependencies = [ 2817 | "bitflags 1.3.2", 2818 | "calloop", 2819 | "dlib", 2820 | "lazy_static", 2821 | "log", 2822 | "memmap2 0.5.10", 2823 | "nix 0.24.3", 2824 | "pkg-config", 2825 | "wayland-client 0.29.5", 2826 | "wayland-cursor", 2827 | "wayland-protocols", 2828 | ] 2829 | 2830 | [[package]] 2831 | name = "smithay-clipboard" 2832 | version = "0.6.6" 2833 | source = "registry+https://github.com/rust-lang/crates.io-index" 2834 | checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" 2835 | dependencies = [ 2836 | "smithay-client-toolkit", 2837 | "wayland-client 0.29.5", 2838 | ] 2839 | 2840 | [[package]] 2841 | name = "softbuffer" 2842 | version = "0.2.1" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "c2b953f6ba7285f0af131eb748aabd8ddaf53e0b81dda3ba5d803b0847d6559f" 2845 | dependencies = [ 2846 | "bytemuck", 2847 | "cfg_aliases", 2848 | "cocoa", 2849 | "core-graphics", 2850 | "fastrand", 2851 | "foreign-types", 2852 | "log", 2853 | "nix 0.26.4", 2854 | "objc", 2855 | "raw-window-handle", 2856 | "redox_syscall 0.3.5", 2857 | "thiserror", 2858 | "wasm-bindgen", 2859 | "wayland-backend", 2860 | "wayland-client 0.30.2", 2861 | "wayland-sys 0.30.1", 2862 | "web-sys", 2863 | "windows-sys 0.48.0", 2864 | "x11-dl", 2865 | "x11rb 0.11.1", 2866 | ] 2867 | 2868 | [[package]] 2869 | name = "spirv" 2870 | version = "0.2.0+1.5.4" 2871 | source = "registry+https://github.com/rust-lang/crates.io-index" 2872 | checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" 2873 | dependencies = [ 2874 | "bitflags 1.3.2", 2875 | "num-traits", 2876 | ] 2877 | 2878 | [[package]] 2879 | name = "static_assertions" 2880 | version = "1.1.0" 2881 | source = "registry+https://github.com/rust-lang/crates.io-index" 2882 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2883 | 2884 | [[package]] 2885 | name = "str-buf" 2886 | version = "1.0.6" 2887 | source = "registry+https://github.com/rust-lang/crates.io-index" 2888 | checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" 2889 | 2890 | [[package]] 2891 | name = "strict-num" 2892 | version = "0.1.1" 2893 | source = "registry+https://github.com/rust-lang/crates.io-index" 2894 | checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" 2895 | 2896 | [[package]] 2897 | name = "strsim" 2898 | version = "0.10.0" 2899 | source = "registry+https://github.com/rust-lang/crates.io-index" 2900 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2901 | 2902 | [[package]] 2903 | name = "strum" 2904 | version = "0.25.0" 2905 | source = "registry+https://github.com/rust-lang/crates.io-index" 2906 | checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" 2907 | dependencies = [ 2908 | "strum_macros", 2909 | ] 2910 | 2911 | [[package]] 2912 | name = "strum_macros" 2913 | version = "0.25.2" 2914 | source = "registry+https://github.com/rust-lang/crates.io-index" 2915 | checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" 2916 | dependencies = [ 2917 | "heck", 2918 | "proc-macro2", 2919 | "quote", 2920 | "rustversion", 2921 | "syn 2.0.29", 2922 | ] 2923 | 2924 | [[package]] 2925 | name = "svg_fmt" 2926 | version = "0.4.1" 2927 | source = "registry+https://github.com/rust-lang/crates.io-index" 2928 | checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" 2929 | 2930 | [[package]] 2931 | name = "swash" 2932 | version = "0.1.8" 2933 | source = "registry+https://github.com/rust-lang/crates.io-index" 2934 | checksum = "3b7c73c813353c347272919aa1af2885068b05e625e5532b43049e4f641ae77f" 2935 | dependencies = [ 2936 | "yazi", 2937 | "zeno", 2938 | ] 2939 | 2940 | [[package]] 2941 | name = "syn" 2942 | version = "1.0.109" 2943 | source = "registry+https://github.com/rust-lang/crates.io-index" 2944 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2945 | dependencies = [ 2946 | "proc-macro2", 2947 | "quote", 2948 | "unicode-ident", 2949 | ] 2950 | 2951 | [[package]] 2952 | name = "syn" 2953 | version = "2.0.29" 2954 | source = "registry+https://github.com/rust-lang/crates.io-index" 2955 | checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" 2956 | dependencies = [ 2957 | "proc-macro2", 2958 | "quote", 2959 | "unicode-ident", 2960 | ] 2961 | 2962 | [[package]] 2963 | name = "synstructure" 2964 | version = "0.12.6" 2965 | source = "registry+https://github.com/rust-lang/crates.io-index" 2966 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 2967 | dependencies = [ 2968 | "proc-macro2", 2969 | "quote", 2970 | "syn 1.0.109", 2971 | "unicode-xid", 2972 | ] 2973 | 2974 | [[package]] 2975 | name = "sys-locale" 2976 | version = "0.3.1" 2977 | source = "registry+https://github.com/rust-lang/crates.io-index" 2978 | checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" 2979 | dependencies = [ 2980 | "libc", 2981 | ] 2982 | 2983 | [[package]] 2984 | name = "system-deps" 2985 | version = "6.1.1" 2986 | source = "registry+https://github.com/rust-lang/crates.io-index" 2987 | checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" 2988 | dependencies = [ 2989 | "cfg-expr", 2990 | "heck", 2991 | "pkg-config", 2992 | "toml 0.7.6", 2993 | "version-compare", 2994 | ] 2995 | 2996 | [[package]] 2997 | name = "target-lexicon" 2998 | version = "0.12.11" 2999 | source = "registry+https://github.com/rust-lang/crates.io-index" 3000 | checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" 3001 | 3002 | [[package]] 3003 | name = "termcolor" 3004 | version = "1.2.0" 3005 | source = "registry+https://github.com/rust-lang/crates.io-index" 3006 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 3007 | dependencies = [ 3008 | "winapi-util", 3009 | ] 3010 | 3011 | [[package]] 3012 | name = "termion" 3013 | version = "2.0.1" 3014 | source = "registry+https://github.com/rust-lang/crates.io-index" 3015 | checksum = "659c1f379f3408c7e5e84c7d0da6d93404e3800b6b9d063ba24436419302ec90" 3016 | dependencies = [ 3017 | "libc", 3018 | "numtoa", 3019 | "redox_syscall 0.2.16", 3020 | "redox_termios", 3021 | ] 3022 | 3023 | [[package]] 3024 | name = "thiserror" 3025 | version = "1.0.47" 3026 | source = "registry+https://github.com/rust-lang/crates.io-index" 3027 | checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" 3028 | dependencies = [ 3029 | "thiserror-impl", 3030 | ] 3031 | 3032 | [[package]] 3033 | name = "thiserror-impl" 3034 | version = "1.0.47" 3035 | source = "registry+https://github.com/rust-lang/crates.io-index" 3036 | checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" 3037 | dependencies = [ 3038 | "proc-macro2", 3039 | "quote", 3040 | "syn 2.0.29", 3041 | ] 3042 | 3043 | [[package]] 3044 | name = "tiny-skia" 3045 | version = "0.8.4" 3046 | source = "registry+https://github.com/rust-lang/crates.io-index" 3047 | checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67" 3048 | dependencies = [ 3049 | "arrayref", 3050 | "arrayvec", 3051 | "bytemuck", 3052 | "cfg-if", 3053 | "png", 3054 | "tiny-skia-path 0.8.4", 3055 | ] 3056 | 3057 | [[package]] 3058 | name = "tiny-skia" 3059 | version = "0.10.0" 3060 | source = "registry+https://github.com/rust-lang/crates.io-index" 3061 | checksum = "7db11798945fa5c3e5490c794ccca7c6de86d3afdd54b4eb324109939c6f37bc" 3062 | dependencies = [ 3063 | "arrayref", 3064 | "arrayvec", 3065 | "bytemuck", 3066 | "cfg-if", 3067 | "log", 3068 | "png", 3069 | "tiny-skia-path 0.10.0", 3070 | ] 3071 | 3072 | [[package]] 3073 | name = "tiny-skia-path" 3074 | version = "0.8.4" 3075 | source = "registry+https://github.com/rust-lang/crates.io-index" 3076 | checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c" 3077 | dependencies = [ 3078 | "arrayref", 3079 | "bytemuck", 3080 | "strict-num", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "tiny-skia-path" 3085 | version = "0.10.0" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c" 3088 | dependencies = [ 3089 | "arrayref", 3090 | "bytemuck", 3091 | "strict-num", 3092 | ] 3093 | 3094 | [[package]] 3095 | name = "tinyvec" 3096 | version = "1.6.0" 3097 | source = "registry+https://github.com/rust-lang/crates.io-index" 3098 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 3099 | dependencies = [ 3100 | "tinyvec_macros", 3101 | ] 3102 | 3103 | [[package]] 3104 | name = "tinyvec_macros" 3105 | version = "0.1.1" 3106 | source = "registry+https://github.com/rust-lang/crates.io-index" 3107 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3108 | 3109 | [[package]] 3110 | name = "toml" 3111 | version = "0.5.11" 3112 | source = "registry+https://github.com/rust-lang/crates.io-index" 3113 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 3114 | dependencies = [ 3115 | "serde", 3116 | ] 3117 | 3118 | [[package]] 3119 | name = "toml" 3120 | version = "0.7.6" 3121 | source = "registry+https://github.com/rust-lang/crates.io-index" 3122 | checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" 3123 | dependencies = [ 3124 | "serde", 3125 | "serde_spanned", 3126 | "toml_datetime", 3127 | "toml_edit", 3128 | ] 3129 | 3130 | [[package]] 3131 | name = "toml_datetime" 3132 | version = "0.6.3" 3133 | source = "registry+https://github.com/rust-lang/crates.io-index" 3134 | checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" 3135 | dependencies = [ 3136 | "serde", 3137 | ] 3138 | 3139 | [[package]] 3140 | name = "toml_edit" 3141 | version = "0.19.14" 3142 | source = "registry+https://github.com/rust-lang/crates.io-index" 3143 | checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" 3144 | dependencies = [ 3145 | "indexmap 2.0.0", 3146 | "serde", 3147 | "serde_spanned", 3148 | "toml_datetime", 3149 | "winnow", 3150 | ] 3151 | 3152 | [[package]] 3153 | name = "ttf-parser" 3154 | version = "0.19.1" 3155 | source = "registry+https://github.com/rust-lang/crates.io-index" 3156 | checksum = "a464a4b34948a5f67fddd2b823c62d9d92e44be75058b99939eae6c5b6960b33" 3157 | 3158 | [[package]] 3159 | name = "twox-hash" 3160 | version = "1.6.3" 3161 | source = "registry+https://github.com/rust-lang/crates.io-index" 3162 | checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" 3163 | dependencies = [ 3164 | "cfg-if", 3165 | "rand", 3166 | "static_assertions", 3167 | ] 3168 | 3169 | [[package]] 3170 | name = "unicode-bidi" 3171 | version = "0.3.13" 3172 | source = "registry+https://github.com/rust-lang/crates.io-index" 3173 | checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" 3174 | 3175 | [[package]] 3176 | name = "unicode-bidi-mirroring" 3177 | version = "0.1.0" 3178 | source = "registry+https://github.com/rust-lang/crates.io-index" 3179 | checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" 3180 | 3181 | [[package]] 3182 | name = "unicode-ccc" 3183 | version = "0.1.2" 3184 | source = "registry+https://github.com/rust-lang/crates.io-index" 3185 | checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" 3186 | 3187 | [[package]] 3188 | name = "unicode-general-category" 3189 | version = "0.6.0" 3190 | source = "registry+https://github.com/rust-lang/crates.io-index" 3191 | checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" 3192 | 3193 | [[package]] 3194 | name = "unicode-ident" 3195 | version = "1.0.11" 3196 | source = "registry+https://github.com/rust-lang/crates.io-index" 3197 | checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" 3198 | 3199 | [[package]] 3200 | name = "unicode-linebreak" 3201 | version = "0.1.5" 3202 | source = "registry+https://github.com/rust-lang/crates.io-index" 3203 | checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 3204 | 3205 | [[package]] 3206 | name = "unicode-script" 3207 | version = "0.5.5" 3208 | source = "registry+https://github.com/rust-lang/crates.io-index" 3209 | checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" 3210 | 3211 | [[package]] 3212 | name = "unicode-segmentation" 3213 | version = "1.10.1" 3214 | source = "registry+https://github.com/rust-lang/crates.io-index" 3215 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" 3216 | 3217 | [[package]] 3218 | name = "unicode-width" 3219 | version = "0.1.10" 3220 | source = "registry+https://github.com/rust-lang/crates.io-index" 3221 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 3222 | 3223 | [[package]] 3224 | name = "unicode-xid" 3225 | version = "0.2.4" 3226 | source = "registry+https://github.com/rust-lang/crates.io-index" 3227 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 3228 | 3229 | [[package]] 3230 | name = "utf8parse" 3231 | version = "0.2.1" 3232 | source = "registry+https://github.com/rust-lang/crates.io-index" 3233 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 3234 | 3235 | [[package]] 3236 | name = "uuid" 3237 | version = "1.4.1" 3238 | source = "registry+https://github.com/rust-lang/crates.io-index" 3239 | checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" 3240 | dependencies = [ 3241 | "serde", 3242 | ] 3243 | 3244 | [[package]] 3245 | name = "vec_map" 3246 | version = "0.8.2" 3247 | source = "registry+https://github.com/rust-lang/crates.io-index" 3248 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 3249 | 3250 | [[package]] 3251 | name = "version-compare" 3252 | version = "0.1.1" 3253 | source = "registry+https://github.com/rust-lang/crates.io-index" 3254 | checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" 3255 | 3256 | [[package]] 3257 | name = "version_check" 3258 | version = "0.9.4" 3259 | source = "registry+https://github.com/rust-lang/crates.io-index" 3260 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 3261 | 3262 | [[package]] 3263 | name = "vswhom" 3264 | version = "0.1.0" 3265 | source = "registry+https://github.com/rust-lang/crates.io-index" 3266 | checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" 3267 | dependencies = [ 3268 | "libc", 3269 | "vswhom-sys", 3270 | ] 3271 | 3272 | [[package]] 3273 | name = "vswhom-sys" 3274 | version = "0.1.2" 3275 | source = "registry+https://github.com/rust-lang/crates.io-index" 3276 | checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" 3277 | dependencies = [ 3278 | "cc", 3279 | "libc", 3280 | ] 3281 | 3282 | [[package]] 3283 | name = "wasi" 3284 | version = "0.11.0+wasi-snapshot-preview1" 3285 | source = "registry+https://github.com/rust-lang/crates.io-index" 3286 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3287 | 3288 | [[package]] 3289 | name = "wasm-bindgen" 3290 | version = "0.2.87" 3291 | source = "registry+https://github.com/rust-lang/crates.io-index" 3292 | checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" 3293 | dependencies = [ 3294 | "cfg-if", 3295 | "wasm-bindgen-macro", 3296 | ] 3297 | 3298 | [[package]] 3299 | name = "wasm-bindgen-backend" 3300 | version = "0.2.87" 3301 | source = "registry+https://github.com/rust-lang/crates.io-index" 3302 | checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" 3303 | dependencies = [ 3304 | "bumpalo", 3305 | "log", 3306 | "once_cell", 3307 | "proc-macro2", 3308 | "quote", 3309 | "syn 2.0.29", 3310 | "wasm-bindgen-shared", 3311 | ] 3312 | 3313 | [[package]] 3314 | name = "wasm-bindgen-futures" 3315 | version = "0.4.37" 3316 | source = "registry+https://github.com/rust-lang/crates.io-index" 3317 | checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" 3318 | dependencies = [ 3319 | "cfg-if", 3320 | "js-sys", 3321 | "wasm-bindgen", 3322 | "web-sys", 3323 | ] 3324 | 3325 | [[package]] 3326 | name = "wasm-bindgen-macro" 3327 | version = "0.2.87" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" 3330 | dependencies = [ 3331 | "quote", 3332 | "wasm-bindgen-macro-support", 3333 | ] 3334 | 3335 | [[package]] 3336 | name = "wasm-bindgen-macro-support" 3337 | version = "0.2.87" 3338 | source = "registry+https://github.com/rust-lang/crates.io-index" 3339 | checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" 3340 | dependencies = [ 3341 | "proc-macro2", 3342 | "quote", 3343 | "syn 2.0.29", 3344 | "wasm-bindgen-backend", 3345 | "wasm-bindgen-shared", 3346 | ] 3347 | 3348 | [[package]] 3349 | name = "wasm-bindgen-shared" 3350 | version = "0.2.87" 3351 | source = "registry+https://github.com/rust-lang/crates.io-index" 3352 | checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" 3353 | 3354 | [[package]] 3355 | name = "wasm-timer" 3356 | version = "0.2.5" 3357 | source = "registry+https://github.com/rust-lang/crates.io-index" 3358 | checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" 3359 | dependencies = [ 3360 | "futures", 3361 | "js-sys", 3362 | "parking_lot 0.11.2", 3363 | "pin-utils", 3364 | "wasm-bindgen", 3365 | "wasm-bindgen-futures", 3366 | "web-sys", 3367 | ] 3368 | 3369 | [[package]] 3370 | name = "wayland-backend" 3371 | version = "0.1.2" 3372 | source = "registry+https://github.com/rust-lang/crates.io-index" 3373 | checksum = "41b48e27457e8da3b2260ac60d0a94512f5cba36448679f3747c0865b7893ed8" 3374 | dependencies = [ 3375 | "cc", 3376 | "downcast-rs", 3377 | "io-lifetimes", 3378 | "nix 0.26.4", 3379 | "scoped-tls", 3380 | "smallvec", 3381 | "wayland-sys 0.30.1", 3382 | ] 3383 | 3384 | [[package]] 3385 | name = "wayland-client" 3386 | version = "0.29.5" 3387 | source = "registry+https://github.com/rust-lang/crates.io-index" 3388 | checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" 3389 | dependencies = [ 3390 | "bitflags 1.3.2", 3391 | "downcast-rs", 3392 | "libc", 3393 | "nix 0.24.3", 3394 | "scoped-tls", 3395 | "wayland-commons", 3396 | "wayland-scanner 0.29.5", 3397 | "wayland-sys 0.29.5", 3398 | ] 3399 | 3400 | [[package]] 3401 | name = "wayland-client" 3402 | version = "0.30.2" 3403 | source = "registry+https://github.com/rust-lang/crates.io-index" 3404 | checksum = "489c9654770f674fc7e266b3c579f4053d7551df0ceb392f153adb1f9ed06ac8" 3405 | dependencies = [ 3406 | "bitflags 1.3.2", 3407 | "nix 0.26.4", 3408 | "wayland-backend", 3409 | "wayland-scanner 0.30.1", 3410 | ] 3411 | 3412 | [[package]] 3413 | name = "wayland-commons" 3414 | version = "0.29.5" 3415 | source = "registry+https://github.com/rust-lang/crates.io-index" 3416 | checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" 3417 | dependencies = [ 3418 | "nix 0.24.3", 3419 | "once_cell", 3420 | "smallvec", 3421 | "wayland-sys 0.29.5", 3422 | ] 3423 | 3424 | [[package]] 3425 | name = "wayland-cursor" 3426 | version = "0.29.5" 3427 | source = "registry+https://github.com/rust-lang/crates.io-index" 3428 | checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" 3429 | dependencies = [ 3430 | "nix 0.24.3", 3431 | "wayland-client 0.29.5", 3432 | "xcursor", 3433 | ] 3434 | 3435 | [[package]] 3436 | name = "wayland-protocols" 3437 | version = "0.29.5" 3438 | source = "registry+https://github.com/rust-lang/crates.io-index" 3439 | checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" 3440 | dependencies = [ 3441 | "bitflags 1.3.2", 3442 | "wayland-client 0.29.5", 3443 | "wayland-commons", 3444 | "wayland-scanner 0.29.5", 3445 | ] 3446 | 3447 | [[package]] 3448 | name = "wayland-scanner" 3449 | version = "0.29.5" 3450 | source = "registry+https://github.com/rust-lang/crates.io-index" 3451 | checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" 3452 | dependencies = [ 3453 | "proc-macro2", 3454 | "quote", 3455 | "xml-rs", 3456 | ] 3457 | 3458 | [[package]] 3459 | name = "wayland-scanner" 3460 | version = "0.30.1" 3461 | source = "registry+https://github.com/rust-lang/crates.io-index" 3462 | checksum = "b9b873b257fbc32ec909c0eb80dea312076a67014e65e245f5eb69a6b8ab330e" 3463 | dependencies = [ 3464 | "proc-macro2", 3465 | "quick-xml", 3466 | "quote", 3467 | ] 3468 | 3469 | [[package]] 3470 | name = "wayland-sys" 3471 | version = "0.29.5" 3472 | source = "registry+https://github.com/rust-lang/crates.io-index" 3473 | checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" 3474 | dependencies = [ 3475 | "dlib", 3476 | "lazy_static", 3477 | "pkg-config", 3478 | ] 3479 | 3480 | [[package]] 3481 | name = "wayland-sys" 3482 | version = "0.30.1" 3483 | source = "registry+https://github.com/rust-lang/crates.io-index" 3484 | checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06" 3485 | dependencies = [ 3486 | "dlib", 3487 | "lazy_static", 3488 | "log", 3489 | "pkg-config", 3490 | ] 3491 | 3492 | [[package]] 3493 | name = "web-sys" 3494 | version = "0.3.64" 3495 | source = "registry+https://github.com/rust-lang/crates.io-index" 3496 | checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" 3497 | dependencies = [ 3498 | "js-sys", 3499 | "wasm-bindgen", 3500 | ] 3501 | 3502 | [[package]] 3503 | name = "wgpu" 3504 | version = "0.16.3" 3505 | source = "registry+https://github.com/rust-lang/crates.io-index" 3506 | checksum = "480c965c9306872eb6255fa55e4b4953be55a8b64d57e61d7ff840d3dcc051cd" 3507 | dependencies = [ 3508 | "arrayvec", 3509 | "cfg-if", 3510 | "js-sys", 3511 | "log", 3512 | "naga", 3513 | "parking_lot 0.12.1", 3514 | "profiling", 3515 | "raw-window-handle", 3516 | "smallvec", 3517 | "static_assertions", 3518 | "wasm-bindgen", 3519 | "wasm-bindgen-futures", 3520 | "web-sys", 3521 | "wgpu-core", 3522 | "wgpu-hal", 3523 | "wgpu-types", 3524 | ] 3525 | 3526 | [[package]] 3527 | name = "wgpu-core" 3528 | version = "0.16.1" 3529 | source = "registry+https://github.com/rust-lang/crates.io-index" 3530 | checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2" 3531 | dependencies = [ 3532 | "arrayvec", 3533 | "bit-vec", 3534 | "bitflags 2.4.0", 3535 | "codespan-reporting", 3536 | "log", 3537 | "naga", 3538 | "parking_lot 0.12.1", 3539 | "profiling", 3540 | "raw-window-handle", 3541 | "rustc-hash", 3542 | "smallvec", 3543 | "thiserror", 3544 | "web-sys", 3545 | "wgpu-hal", 3546 | "wgpu-types", 3547 | ] 3548 | 3549 | [[package]] 3550 | name = "wgpu-hal" 3551 | version = "0.16.2" 3552 | source = "registry+https://github.com/rust-lang/crates.io-index" 3553 | checksum = "1ecb3258078e936deee14fd4e0febe1cfe9bbb5ffef165cb60218d2ee5eb4448" 3554 | dependencies = [ 3555 | "android_system_properties", 3556 | "arrayvec", 3557 | "ash", 3558 | "bit-set", 3559 | "bitflags 2.4.0", 3560 | "block", 3561 | "core-graphics-types", 3562 | "d3d12", 3563 | "foreign-types", 3564 | "glow", 3565 | "gpu-alloc", 3566 | "gpu-allocator", 3567 | "gpu-descriptor", 3568 | "hassle-rs", 3569 | "js-sys", 3570 | "khronos-egl", 3571 | "libc", 3572 | "libloading 0.8.0", 3573 | "log", 3574 | "metal", 3575 | "naga", 3576 | "objc", 3577 | "parking_lot 0.12.1", 3578 | "profiling", 3579 | "range-alloc", 3580 | "raw-window-handle", 3581 | "renderdoc-sys", 3582 | "rustc-hash", 3583 | "smallvec", 3584 | "thiserror", 3585 | "wasm-bindgen", 3586 | "web-sys", 3587 | "wgpu-types", 3588 | "winapi", 3589 | ] 3590 | 3591 | [[package]] 3592 | name = "wgpu-types" 3593 | version = "0.16.1" 3594 | source = "registry+https://github.com/rust-lang/crates.io-index" 3595 | checksum = "d0c153280bb108c2979eb5c7391cb18c56642dd3c072e55f52065e13e2a1252a" 3596 | dependencies = [ 3597 | "bitflags 2.4.0", 3598 | "js-sys", 3599 | "web-sys", 3600 | ] 3601 | 3602 | [[package]] 3603 | name = "which" 3604 | version = "4.4.0" 3605 | source = "registry+https://github.com/rust-lang/crates.io-index" 3606 | checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" 3607 | dependencies = [ 3608 | "either", 3609 | "libc", 3610 | "once_cell", 3611 | ] 3612 | 3613 | [[package]] 3614 | name = "widestring" 3615 | version = "1.0.2" 3616 | source = "registry+https://github.com/rust-lang/crates.io-index" 3617 | checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" 3618 | 3619 | [[package]] 3620 | name = "winapi" 3621 | version = "0.3.9" 3622 | source = "registry+https://github.com/rust-lang/crates.io-index" 3623 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3624 | dependencies = [ 3625 | "winapi-i686-pc-windows-gnu", 3626 | "winapi-x86_64-pc-windows-gnu", 3627 | ] 3628 | 3629 | [[package]] 3630 | name = "winapi-i686-pc-windows-gnu" 3631 | version = "0.4.0" 3632 | source = "registry+https://github.com/rust-lang/crates.io-index" 3633 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3634 | 3635 | [[package]] 3636 | name = "winapi-util" 3637 | version = "0.1.5" 3638 | source = "registry+https://github.com/rust-lang/crates.io-index" 3639 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 3640 | dependencies = [ 3641 | "winapi", 3642 | ] 3643 | 3644 | [[package]] 3645 | name = "winapi-wsapoll" 3646 | version = "0.1.1" 3647 | source = "registry+https://github.com/rust-lang/crates.io-index" 3648 | checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" 3649 | dependencies = [ 3650 | "winapi", 3651 | ] 3652 | 3653 | [[package]] 3654 | name = "winapi-x86_64-pc-windows-gnu" 3655 | version = "0.4.0" 3656 | source = "registry+https://github.com/rust-lang/crates.io-index" 3657 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3658 | 3659 | [[package]] 3660 | name = "window_clipboard" 3661 | version = "0.3.0" 3662 | source = "registry+https://github.com/rust-lang/crates.io-index" 3663 | checksum = "63287c9c4396ccf5346d035a9b0fcaead9e18377637f5eaa78b7ac65c873ff7d" 3664 | dependencies = [ 3665 | "clipboard-win", 3666 | "clipboard_macos", 3667 | "clipboard_wayland", 3668 | "clipboard_x11", 3669 | "raw-window-handle", 3670 | "thiserror", 3671 | ] 3672 | 3673 | [[package]] 3674 | name = "windows" 3675 | version = "0.44.0" 3676 | source = "registry+https://github.com/rust-lang/crates.io-index" 3677 | checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" 3678 | dependencies = [ 3679 | "windows-targets 0.42.2", 3680 | ] 3681 | 3682 | [[package]] 3683 | name = "windows-sys" 3684 | version = "0.45.0" 3685 | source = "registry+https://github.com/rust-lang/crates.io-index" 3686 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3687 | dependencies = [ 3688 | "windows-targets 0.42.2", 3689 | ] 3690 | 3691 | [[package]] 3692 | name = "windows-sys" 3693 | version = "0.48.0" 3694 | source = "registry+https://github.com/rust-lang/crates.io-index" 3695 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3696 | dependencies = [ 3697 | "windows-targets 0.48.5", 3698 | ] 3699 | 3700 | [[package]] 3701 | name = "windows-targets" 3702 | version = "0.42.2" 3703 | source = "registry+https://github.com/rust-lang/crates.io-index" 3704 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 3705 | dependencies = [ 3706 | "windows_aarch64_gnullvm 0.42.2", 3707 | "windows_aarch64_msvc 0.42.2", 3708 | "windows_i686_gnu 0.42.2", 3709 | "windows_i686_msvc 0.42.2", 3710 | "windows_x86_64_gnu 0.42.2", 3711 | "windows_x86_64_gnullvm 0.42.2", 3712 | "windows_x86_64_msvc 0.42.2", 3713 | ] 3714 | 3715 | [[package]] 3716 | name = "windows-targets" 3717 | version = "0.48.5" 3718 | source = "registry+https://github.com/rust-lang/crates.io-index" 3719 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3720 | dependencies = [ 3721 | "windows_aarch64_gnullvm 0.48.5", 3722 | "windows_aarch64_msvc 0.48.5", 3723 | "windows_i686_gnu 0.48.5", 3724 | "windows_i686_msvc 0.48.5", 3725 | "windows_x86_64_gnu 0.48.5", 3726 | "windows_x86_64_gnullvm 0.48.5", 3727 | "windows_x86_64_msvc 0.48.5", 3728 | ] 3729 | 3730 | [[package]] 3731 | name = "windows_aarch64_gnullvm" 3732 | version = "0.42.2" 3733 | source = "registry+https://github.com/rust-lang/crates.io-index" 3734 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 3735 | 3736 | [[package]] 3737 | name = "windows_aarch64_gnullvm" 3738 | version = "0.48.5" 3739 | source = "registry+https://github.com/rust-lang/crates.io-index" 3740 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3741 | 3742 | [[package]] 3743 | name = "windows_aarch64_msvc" 3744 | version = "0.42.2" 3745 | source = "registry+https://github.com/rust-lang/crates.io-index" 3746 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 3747 | 3748 | [[package]] 3749 | name = "windows_aarch64_msvc" 3750 | version = "0.48.5" 3751 | source = "registry+https://github.com/rust-lang/crates.io-index" 3752 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3753 | 3754 | [[package]] 3755 | name = "windows_i686_gnu" 3756 | version = "0.42.2" 3757 | source = "registry+https://github.com/rust-lang/crates.io-index" 3758 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 3759 | 3760 | [[package]] 3761 | name = "windows_i686_gnu" 3762 | version = "0.48.5" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3765 | 3766 | [[package]] 3767 | name = "windows_i686_msvc" 3768 | version = "0.42.2" 3769 | source = "registry+https://github.com/rust-lang/crates.io-index" 3770 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 3771 | 3772 | [[package]] 3773 | name = "windows_i686_msvc" 3774 | version = "0.48.5" 3775 | source = "registry+https://github.com/rust-lang/crates.io-index" 3776 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3777 | 3778 | [[package]] 3779 | name = "windows_x86_64_gnu" 3780 | version = "0.42.2" 3781 | source = "registry+https://github.com/rust-lang/crates.io-index" 3782 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 3783 | 3784 | [[package]] 3785 | name = "windows_x86_64_gnu" 3786 | version = "0.48.5" 3787 | source = "registry+https://github.com/rust-lang/crates.io-index" 3788 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3789 | 3790 | [[package]] 3791 | name = "windows_x86_64_gnullvm" 3792 | version = "0.42.2" 3793 | source = "registry+https://github.com/rust-lang/crates.io-index" 3794 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 3795 | 3796 | [[package]] 3797 | name = "windows_x86_64_gnullvm" 3798 | version = "0.48.5" 3799 | source = "registry+https://github.com/rust-lang/crates.io-index" 3800 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3801 | 3802 | [[package]] 3803 | name = "windows_x86_64_msvc" 3804 | version = "0.42.2" 3805 | source = "registry+https://github.com/rust-lang/crates.io-index" 3806 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 3807 | 3808 | [[package]] 3809 | name = "windows_x86_64_msvc" 3810 | version = "0.48.5" 3811 | source = "registry+https://github.com/rust-lang/crates.io-index" 3812 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3813 | 3814 | [[package]] 3815 | name = "winit" 3816 | version = "0.28.6" 3817 | source = "registry+https://github.com/rust-lang/crates.io-index" 3818 | checksum = "866db3f712fffba75d31bf0cdecf357c8aeafd158c5b7ab51dba2a2b2d47f196" 3819 | dependencies = [ 3820 | "android-activity", 3821 | "bitflags 1.3.2", 3822 | "cfg_aliases", 3823 | "core-foundation", 3824 | "core-graphics", 3825 | "dispatch", 3826 | "instant", 3827 | "libc", 3828 | "log", 3829 | "mio", 3830 | "ndk", 3831 | "objc2", 3832 | "once_cell", 3833 | "orbclient", 3834 | "percent-encoding", 3835 | "raw-window-handle", 3836 | "redox_syscall 0.3.5", 3837 | "sctk-adwaita", 3838 | "smithay-client-toolkit", 3839 | "wasm-bindgen", 3840 | "wayland-client 0.29.5", 3841 | "wayland-commons", 3842 | "wayland-protocols", 3843 | "wayland-scanner 0.29.5", 3844 | "web-sys", 3845 | "windows-sys 0.45.0", 3846 | "x11-dl", 3847 | ] 3848 | 3849 | [[package]] 3850 | name = "winnow" 3851 | version = "0.5.15" 3852 | source = "registry+https://github.com/rust-lang/crates.io-index" 3853 | checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" 3854 | dependencies = [ 3855 | "memchr", 3856 | ] 3857 | 3858 | [[package]] 3859 | name = "winreg" 3860 | version = "0.5.1" 3861 | source = "registry+https://github.com/rust-lang/crates.io-index" 3862 | checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" 3863 | dependencies = [ 3864 | "serde", 3865 | "winapi", 3866 | ] 3867 | 3868 | [[package]] 3869 | name = "winreg" 3870 | version = "0.10.1" 3871 | source = "registry+https://github.com/rust-lang/crates.io-index" 3872 | checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" 3873 | dependencies = [ 3874 | "winapi", 3875 | ] 3876 | 3877 | [[package]] 3878 | name = "winreg" 3879 | version = "0.51.0" 3880 | source = "registry+https://github.com/rust-lang/crates.io-index" 3881 | checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" 3882 | dependencies = [ 3883 | "cfg-if", 3884 | "windows-sys 0.48.0", 3885 | ] 3886 | 3887 | [[package]] 3888 | name = "x11-dl" 3889 | version = "2.21.0" 3890 | source = "registry+https://github.com/rust-lang/crates.io-index" 3891 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 3892 | dependencies = [ 3893 | "libc", 3894 | "once_cell", 3895 | "pkg-config", 3896 | ] 3897 | 3898 | [[package]] 3899 | name = "x11rb" 3900 | version = "0.9.0" 3901 | source = "registry+https://github.com/rust-lang/crates.io-index" 3902 | checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" 3903 | dependencies = [ 3904 | "gethostname", 3905 | "nix 0.22.3", 3906 | "winapi", 3907 | "winapi-wsapoll", 3908 | ] 3909 | 3910 | [[package]] 3911 | name = "x11rb" 3912 | version = "0.11.1" 3913 | source = "registry+https://github.com/rust-lang/crates.io-index" 3914 | checksum = "cdf3c79412dd91bae7a7366b8ad1565a85e35dd049affc3a6a2c549e97419617" 3915 | dependencies = [ 3916 | "gethostname", 3917 | "libc", 3918 | "libloading 0.7.4", 3919 | "nix 0.25.1", 3920 | "once_cell", 3921 | "winapi", 3922 | "winapi-wsapoll", 3923 | "x11rb-protocol", 3924 | ] 3925 | 3926 | [[package]] 3927 | name = "x11rb-protocol" 3928 | version = "0.11.1" 3929 | source = "registry+https://github.com/rust-lang/crates.io-index" 3930 | checksum = "e0b1513b141123073ce54d5bb1d33f801f17508fbd61e02060b1214e96d39c56" 3931 | dependencies = [ 3932 | "nix 0.25.1", 3933 | ] 3934 | 3935 | [[package]] 3936 | name = "xcursor" 3937 | version = "0.3.4" 3938 | source = "registry+https://github.com/rust-lang/crates.io-index" 3939 | checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" 3940 | dependencies = [ 3941 | "nom", 3942 | ] 3943 | 3944 | [[package]] 3945 | name = "xml-rs" 3946 | version = "0.8.16" 3947 | source = "registry+https://github.com/rust-lang/crates.io-index" 3948 | checksum = "47430998a7b5d499ccee752b41567bc3afc57e1327dc855b1a2aa44ce29b5fa1" 3949 | 3950 | [[package]] 3951 | name = "yazi" 3952 | version = "0.1.6" 3953 | source = "registry+https://github.com/rust-lang/crates.io-index" 3954 | checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" 3955 | 3956 | [[package]] 3957 | name = "zeno" 3958 | version = "0.2.2" 3959 | source = "registry+https://github.com/rust-lang/crates.io-index" 3960 | checksum = "c110ba09c9b3a43edd4803d570df0da2414fed6e822e22b976a4e3ef50860701" 3961 | --------------------------------------------------------------------------------