aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-02 17:50:44 +0200
committerDanilo M. <danix@danix.xyz>2026-10-02 17:50:44 +0200
commitdadac25a4e0c008cf5821b4d2f7bb6a27e9528f1 (patch)
tree21f9055a38a7bfad71deb313691ff2299b4557cf
parent0c5f4df2088d1d132ee38aa4c75727d86daf9c48 (diff)
downloadmy-slackbuilds-dadac25a4e0c008cf5821b4d2f7bb6a27e9528f1.tar.gz
my-slackbuilds-dadac25a4e0c008cf5821b4d2f7bb6a27e9528f1.zip
ak820-ctl: add version 0.1.0+git20260414main
CLI and GUI control software for the Ajazz AK820 Pro keyboard (lighting, sleep timer, clock sync). Upstream has no tags, so the source is pinned to a commit and nvchecker tracks the commit date. Ships a uaccess udev rule for 0c45:8009, a desktop entry for ak820-gui, and rc.ak820-lcd, a Slackware replacement for upstream's systemd unit that runs the lcd subcommand in a restart loop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--.extras/nvchecker.toml5
-rw-r--r--README.md1
-rw-r--r--ak820-ctl/50-ak820.rules2
-rw-r--r--ak820-ctl/README20
-rw-r--r--ak820-ctl/ak820-ctl.SlackBuild140
-rw-r--r--ak820-ctl/ak820-ctl.desktop8
-rw-r--r--ak820-ctl/ak820-ctl.info956
-rw-r--r--ak820-ctl/doinst.sh34
-rw-r--r--ak820-ctl/rc.ak820-lcd57
-rw-r--r--ak820-ctl/slack-desc19
10 files changed, 1242 insertions, 0 deletions
diff --git a/.extras/nvchecker.toml b/.extras/nvchecker.toml
index 868fdc4..ab74ce1 100644
--- a/.extras/nvchecker.toml
+++ b/.extras/nvchecker.toml
@@ -228,3 +228,8 @@ source = "github"
github = "kriomant/ch57x-keyboard-tool"
use_latest_release = true
prefix = "v"
+
+[ak820-ctl]
+# no tags or releases upstream, tracks latest commit date (YYYYMMDD.HHMMSS)
+source = "github"
+github = "gohv/EPOMAKER-Ajazz-AK820-Pro"
diff --git a/README.md b/README.md
index 92a2d5c..d06b064 100644
--- a/README.md
+++ b/README.md
@@ -77,6 +77,7 @@ Each package lives in its own top-level subfolder:
| whisper.cpp | ✅ | ❌ | ✅ [whisper.cpp](https://slackbuilds.org/repository/15.0/development/whisper.cpp/) | 1.9.4 | 1.9.4 |
| ttf-nerd-fonts | ✅ | ✅ | ❌ | 3.5.1 | 3.5.1 |
| ch57x-keyboard-tool | ✅ | ✅ | ❌ | 1.7.0 | 1.7.0 |
+| ak820-ctl | ✅ | not tested | ❌ | 0.1.0+git20260414 | 0.1.0+git20260414 |
> **Note on `quickshell`:** Slackware 15.0 ships Qt5 only, so this package is
> **Slackware64-current only**. It also relies on private Qt APIs and must be
diff --git a/ak820-ctl/50-ak820.rules b/ak820-ctl/50-ak820.rules
new file mode 100644
index 0000000..d71ee30
--- /dev/null
+++ b/ak820-ctl/50-ak820.rules
@@ -0,0 +1,2 @@
+SUBSYSTEM=="usb", ATTR{idVendor}=="0c45", ATTR{idProduct}=="8009", TAG+="uaccess"
+KERNEL=="hidraw*", ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="8009", TAG+="uaccess"
diff --git a/ak820-ctl/README b/ak820-ctl/README
new file mode 100644
index 0000000..9593544
--- /dev/null
+++ b/ak820-ctl/README
@@ -0,0 +1,20 @@
+ak820-ctl controls the Ajazz (EPOMAKER) AK820 Pro keyboard on Linux,
+replacing the Windows-only vendor software. It sets the 20 lighting
+modes (color, rainbow, brightness, speed, direction), the sleep timer,
+and syncs the system time to the keyboard's TFT clock.
+
+Two programs are installed: the ak820-ctl command line tool and the
+ak820-gui control panel.
+
+The keyboard must be connected with the USB-C cable (USB ID 0c45:8009),
+the 2.4G dongle and Bluetooth are not supported. A udev rule is
+installed so the logged-in user can control it without root. Replug
+the keyboard after installing.
+
+rc.ak820-lcd runs "ak820-ctl lcd", which shows the time and CPU/GPU
+temperature on the keyboard's screen. It is not enabled by default:
+
+ chmod +x /etc/rc.d/rc.ak820-lcd
+ /etc/rc.d/rc.ak820-lcd start
+
+See the script's header to start it at boot. Errors go to syslog.
diff --git a/ak820-ctl/ak820-ctl.SlackBuild b/ak820-ctl/ak820-ctl.SlackBuild
new file mode 100644
index 0000000..a3e6755
--- /dev/null
+++ b/ak820-ctl/ak820-ctl.SlackBuild
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+# Slackware build script for ak820-ctl
+
+# Copyright 2026 danix <danix@danix.xyz>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=ak820-ctl
+SRCNAM=EPOMAKER-Ajazz-AK820-Pro
+VERSION=${VERSION:-0.1.0+git20260414}
+# Upstream has no tags; VERSION is Cargo.toml's version plus the commit date.
+COMMIT=${COMMIT:-156be8220a82b091251178382a3b5058fb41014c}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+PKGTYPE=${PKGTYPE:-tgz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+elif [ "$ARCH" = "aarch64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $SRCNAM-$COMMIT
+tar xvf $CWD/$SRCNAM-$COMMIT.tar.gz
+cd $SRCNAM-$COMMIT
+
+# Build offline: point cargo at the crates from DOWNLOAD instead of crates.io.
+mkdir -p .cargo
+cat <<EOT > .cargo/config.toml
+[source.crates-io]
+replace-with = "vendored-sources"
+
+[source.vendored-sources]
+directory = "vendor"
+EOT
+
+mkdir vendor
+(
+ cd vendor
+ for crate in $CWD/*.crate ; do
+ tar xf $crate
+ dir=$(basename $crate .crate)
+ # cargo only needs the package checksum, an empty file map skips per-file checks.
+ printf '{"files":{},"package":"%s"}\n' "$(sha256sum $crate | cut -d' ' -f1)" \
+ > $dir/.cargo-checksum.json
+ done
+)
+
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+export PATH="/opt/rust/bin:$PATH"
+export LD_LIBRARY_PATH="/opt/rust/lib$LIBDIRSUFFIX${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
+
+CARGO_HOME=.cargo \
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+cargo build --frozen --release --features gui
+
+install -Dm0755 target/release/ak820-ctl $PKG/usr/bin/ak820-ctl
+install -Dm0755 target/release/ak820-gui $PKG/usr/bin/ak820-gui
+strip --strip-unneeded $PKG/usr/bin/*
+
+# Let the logged-in user control the keyboard without root.
+mkdir -p $PKG/lib/udev/rules.d
+cat $CWD/50-ak820.rules > $PKG/lib/udev/rules.d/50-ak820.rules
+
+# Slackware replacement for upstream's systemd ak820-lcd.service, off by default.
+mkdir -p $PKG/etc/rc.d
+cat $CWD/rc.ak820-lcd > $PKG/etc/rc.d/rc.ak820-lcd.new
+
+mkdir -p $PKG/usr/share/applications
+cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a README.md $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/ak820-ctl/ak820-ctl.desktop b/ak820-ctl/ak820-ctl.desktop
new file mode 100644
index 0000000..1758a78
--- /dev/null
+++ b/ak820-ctl/ak820-ctl.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Name=AK820 Pro Control Panel
+Comment=Control lighting, sleep timer and clock of the Ajazz AK820 Pro keyboard
+Exec=ak820-gui
+Icon=input-keyboard
+Terminal=false
+Categories=Settings;HardwareSettings;
diff --git a/ak820-ctl/ak820-ctl.info b/ak820-ctl/ak820-ctl.info
new file mode 100644
index 0000000..5552412
--- /dev/null
+++ b/ak820-ctl/ak820-ctl.info
@@ -0,0 +1,956 @@
+PRGNAM="ak820-ctl"
+VERSION="0.1.0+git20260414"
+HOMEPAGE="https://github.com/gohv/EPOMAKER-Ajazz-AK820-Pro"
+DOWNLOAD="https://github.com/gohv/EPOMAKER-Ajazz-AK820-Pro/archive/156be8220a82b091251178382a3b5058fb41014c/EPOMAKER-Ajazz-AK820-Pro-156be8220a82b091251178382a3b5058fb41014c.tar.gz \
+ https://static.crates.io/crates/ab_glyph/ab_glyph-0.2.32.crate \
+ https://static.crates.io/crates/ab_glyph_rasterizer/ab_glyph_rasterizer-0.1.10.crate \
+ https://static.crates.io/crates/accesskit/accesskit-0.17.1.crate \
+ https://static.crates.io/crates/accesskit_atspi_common/accesskit_atspi_common-0.10.1.crate \
+ https://static.crates.io/crates/accesskit_consumer/accesskit_consumer-0.26.0.crate \
+ https://static.crates.io/crates/accesskit_macos/accesskit_macos-0.18.1.crate \
+ https://static.crates.io/crates/accesskit_unix/accesskit_unix-0.13.1.crate \
+ https://static.crates.io/crates/accesskit_windows/accesskit_windows-0.24.1.crate \
+ https://static.crates.io/crates/accesskit_winit/accesskit_winit-0.23.1.crate \
+ https://static.crates.io/crates/adler2/adler2-2.0.1.crate \
+ https://static.crates.io/crates/ahash/ahash-0.8.12.crate \
+ https://static.crates.io/crates/android-activity/android-activity-0.6.0.crate \
+ https://static.crates.io/crates/android-properties/android-properties-0.2.2.crate \
+ https://static.crates.io/crates/android_system_properties/android_system_properties-0.1.5.crate \
+ https://static.crates.io/crates/anstream/anstream-0.6.21.crate \
+ https://static.crates.io/crates/anstyle/anstyle-1.0.13.crate \
+ https://static.crates.io/crates/anstyle-parse/anstyle-parse-0.2.7.crate \
+ https://static.crates.io/crates/anstyle-query/anstyle-query-1.1.5.crate \
+ https://static.crates.io/crates/anstyle-wincon/anstyle-wincon-3.0.11.crate \
+ https://static.crates.io/crates/anyhow/anyhow-1.0.102.crate \
+ https://static.crates.io/crates/arboard/arboard-3.6.1.crate \
+ https://static.crates.io/crates/arrayref/arrayref-0.3.9.crate \
+ https://static.crates.io/crates/arrayvec/arrayvec-0.7.6.crate \
+ https://static.crates.io/crates/as-raw-xcb-connection/as-raw-xcb-connection-1.0.1.crate \
+ https://static.crates.io/crates/ash/ash-0.38.0+1.3.281.crate \
+ https://static.crates.io/crates/async-broadcast/async-broadcast-0.7.2.crate \
+ https://static.crates.io/crates/async-channel/async-channel-2.5.0.crate \
+ https://static.crates.io/crates/async-executor/async-executor-1.14.0.crate \
+ https://static.crates.io/crates/async-fs/async-fs-2.2.0.crate \
+ https://static.crates.io/crates/async-io/async-io-2.6.0.crate \
+ https://static.crates.io/crates/async-lock/async-lock-3.4.2.crate \
+ https://static.crates.io/crates/async-process/async-process-2.5.0.crate \
+ https://static.crates.io/crates/async-recursion/async-recursion-1.1.1.crate \
+ https://static.crates.io/crates/async-signal/async-signal-0.2.13.crate \
+ https://static.crates.io/crates/async-task/async-task-4.7.1.crate \
+ https://static.crates.io/crates/async-trait/async-trait-0.1.89.crate \
+ https://static.crates.io/crates/atomic-waker/atomic-waker-1.1.2.crate \
+ https://static.crates.io/crates/atspi/atspi-0.22.0.crate \
+ https://static.crates.io/crates/atspi-common/atspi-common-0.6.0.crate \
+ https://static.crates.io/crates/atspi-connection/atspi-connection-0.6.0.crate \
+ https://static.crates.io/crates/atspi-proxies/atspi-proxies-0.6.0.crate \
+ https://static.crates.io/crates/autocfg/autocfg-1.5.0.crate \
+ https://static.crates.io/crates/az/az-1.2.1.crate \
+ https://static.crates.io/crates/bit-set/bit-set-0.8.0.crate \
+ https://static.crates.io/crates/bit-vec/bit-vec-0.8.0.crate \
+ https://static.crates.io/crates/bitflags/bitflags-1.3.2.crate \
+ https://static.crates.io/crates/bitflags/bitflags-2.11.0.crate \
+ https://static.crates.io/crates/block/block-0.1.6.crate \
+ https://static.crates.io/crates/block-buffer/block-buffer-0.10.4.crate \
+ https://static.crates.io/crates/block2/block2-0.5.1.crate \
+ https://static.crates.io/crates/blocking/blocking-1.6.2.crate \
+ https://static.crates.io/crates/bumpalo/bumpalo-3.20.2.crate \
+ https://static.crates.io/crates/bytemuck/bytemuck-1.25.0.crate \
+ https://static.crates.io/crates/bytemuck_derive/bytemuck_derive-1.10.2.crate \
+ https://static.crates.io/crates/byteorder/byteorder-1.5.0.crate \
+ https://static.crates.io/crates/byteorder-lite/byteorder-lite-0.1.0.crate \
+ https://static.crates.io/crates/bytes/bytes-1.11.1.crate \
+ https://static.crates.io/crates/calloop/calloop-0.13.0.crate \
+ https://static.crates.io/crates/calloop/calloop-0.14.4.crate \
+ https://static.crates.io/crates/calloop-wayland-source/calloop-wayland-source-0.3.0.crate \
+ https://static.crates.io/crates/calloop-wayland-source/calloop-wayland-source-0.4.1.crate \
+ https://static.crates.io/crates/cc/cc-1.2.56.crate \
+ https://static.crates.io/crates/cesu8/cesu8-1.1.0.crate \
+ https://static.crates.io/crates/cfg-if/cfg-if-1.0.4.crate \
+ https://static.crates.io/crates/cfg_aliases/cfg_aliases-0.2.1.crate \
+ https://static.crates.io/crates/cgl/cgl-0.3.2.crate \
+ https://static.crates.io/crates/chrono/chrono-0.4.44.crate \
+ https://static.crates.io/crates/clap/clap-4.5.60.crate \
+ https://static.crates.io/crates/clap_builder/clap_builder-4.5.60.crate \
+ https://static.crates.io/crates/clap_derive/clap_derive-4.5.55.crate \
+ https://static.crates.io/crates/clap_lex/clap_lex-1.0.0.crate \
+ https://static.crates.io/crates/clipboard-win/clipboard-win-5.4.1.crate \
+ https://static.crates.io/crates/codespan-reporting/codespan-reporting-0.11.1.crate \
+ https://static.crates.io/crates/colorchoice/colorchoice-1.0.4.crate \
+ https://static.crates.io/crates/combine/combine-4.6.7.crate \
+ https://static.crates.io/crates/concurrent-queue/concurrent-queue-2.5.0.crate \
+ https://static.crates.io/crates/core-foundation/core-foundation-0.9.4.crate \
+ https://static.crates.io/crates/core-foundation/core-foundation-0.10.1.crate \
+ https://static.crates.io/crates/core-foundation-sys/core-foundation-sys-0.8.7.crate \
+ https://static.crates.io/crates/core-graphics/core-graphics-0.23.2.crate \
+ https://static.crates.io/crates/core-graphics-types/core-graphics-types-0.1.3.crate \
+ https://static.crates.io/crates/cpufeatures/cpufeatures-0.2.17.crate \
+ https://static.crates.io/crates/crc32fast/crc32fast-1.5.0.crate \
+ https://static.crates.io/crates/crossbeam-deque/crossbeam-deque-0.8.6.crate \
+ https://static.crates.io/crates/crossbeam-epoch/crossbeam-epoch-0.9.18.crate \
+ https://static.crates.io/crates/crossbeam-utils/crossbeam-utils-0.8.21.crate \
+ https://static.crates.io/crates/crunchy/crunchy-0.2.4.crate \
+ https://static.crates.io/crates/crypto-common/crypto-common-0.1.7.crate \
+ https://static.crates.io/crates/cursor-icon/cursor-icon-1.2.0.crate \
+ https://static.crates.io/crates/digest/digest-0.10.7.crate \
+ https://static.crates.io/crates/dispatch/dispatch-0.2.0.crate \
+ https://static.crates.io/crates/dispatch2/dispatch2-0.3.1.crate \
+ https://static.crates.io/crates/displaydoc/displaydoc-0.2.5.crate \
+ https://static.crates.io/crates/dlib/dlib-0.5.3.crate \
+ https://static.crates.io/crates/document-features/document-features-0.2.12.crate \
+ https://static.crates.io/crates/downcast-rs/downcast-rs-1.2.1.crate \
+ https://static.crates.io/crates/dpi/dpi-0.1.2.crate \
+ https://static.crates.io/crates/ecolor/ecolor-0.31.1.crate \
+ https://static.crates.io/crates/eframe/eframe-0.31.1.crate \
+ https://static.crates.io/crates/egui/egui-0.31.1.crate \
+ https://static.crates.io/crates/egui-wgpu/egui-wgpu-0.31.1.crate \
+ https://static.crates.io/crates/egui-winit/egui-winit-0.31.1.crate \
+ https://static.crates.io/crates/egui_glow/egui_glow-0.31.1.crate \
+ https://static.crates.io/crates/either/either-1.15.0.crate \
+ https://static.crates.io/crates/emath/emath-0.31.1.crate \
+ https://static.crates.io/crates/embedded-graphics/embedded-graphics-0.8.2.crate \
+ https://static.crates.io/crates/embedded-graphics-core/embedded-graphics-core-0.4.1.crate \
+ https://static.crates.io/crates/endi/endi-1.1.1.crate \
+ https://static.crates.io/crates/enumflags2/enumflags2-0.7.12.crate \
+ https://static.crates.io/crates/enumflags2_derive/enumflags2_derive-0.7.12.crate \
+ https://static.crates.io/crates/epaint/epaint-0.31.1.crate \
+ https://static.crates.io/crates/epaint_default_fonts/epaint_default_fonts-0.31.1.crate \
+ https://static.crates.io/crates/equivalent/equivalent-1.0.2.crate \
+ https://static.crates.io/crates/errno/errno-0.3.14.crate \
+ https://static.crates.io/crates/error-code/error-code-3.3.2.crate \
+ https://static.crates.io/crates/event-listener/event-listener-5.4.1.crate \
+ https://static.crates.io/crates/event-listener-strategy/event-listener-strategy-0.5.4.crate \
+ https://static.crates.io/crates/fastrand/fastrand-2.3.0.crate \
+ https://static.crates.io/crates/fax/fax-0.2.6.crate \
+ https://static.crates.io/crates/fax_derive/fax_derive-0.2.0.crate \
+ https://static.crates.io/crates/fdeflate/fdeflate-0.3.7.crate \
+ https://static.crates.io/crates/find-msvc-tools/find-msvc-tools-0.1.9.crate \
+ https://static.crates.io/crates/flate2/flate2-1.1.9.crate \
+ https://static.crates.io/crates/float-cmp/float-cmp-0.9.0.crate \
+ https://static.crates.io/crates/foldhash/foldhash-0.1.5.crate \
+ https://static.crates.io/crates/foreign-types/foreign-types-0.5.0.crate \
+ https://static.crates.io/crates/foreign-types-macros/foreign-types-macros-0.2.3.crate \
+ https://static.crates.io/crates/foreign-types-shared/foreign-types-shared-0.3.1.crate \
+ https://static.crates.io/crates/form_urlencoded/form_urlencoded-1.2.2.crate \
+ https://static.crates.io/crates/futures-core/futures-core-0.3.32.crate \
+ https://static.crates.io/crates/futures-io/futures-io-0.3.32.crate \
+ https://static.crates.io/crates/futures-lite/futures-lite-2.6.1.crate \
+ https://static.crates.io/crates/futures-macro/futures-macro-0.3.32.crate \
+ https://static.crates.io/crates/futures-sink/futures-sink-0.3.32.crate \
+ https://static.crates.io/crates/futures-task/futures-task-0.3.32.crate \
+ https://static.crates.io/crates/futures-util/futures-util-0.3.32.crate \
+ https://static.crates.io/crates/generic-array/generic-array-0.14.7.crate \
+ https://static.crates.io/crates/gethostname/gethostname-1.1.0.crate \
+ https://static.crates.io/crates/getrandom/getrandom-0.2.17.crate \
+ https://static.crates.io/crates/getrandom/getrandom-0.3.4.crate \
+ https://static.crates.io/crates/getrandom/getrandom-0.4.2.crate \
+ https://static.crates.io/crates/gl_generator/gl_generator-0.14.0.crate \
+ https://static.crates.io/crates/glow/glow-0.16.0.crate \
+ https://static.crates.io/crates/glutin/glutin-0.32.3.crate \
+ https://static.crates.io/crates/glutin-winit/glutin-winit-0.5.0.crate \
+ https://static.crates.io/crates/glutin_egl_sys/glutin_egl_sys-0.7.1.crate \
+ https://static.crates.io/crates/glutin_glx_sys/glutin_glx_sys-0.6.1.crate \
+ https://static.crates.io/crates/glutin_wgl_sys/glutin_wgl_sys-0.6.1.crate \
+ https://static.crates.io/crates/gpu-alloc/gpu-alloc-0.6.0.crate \
+ https://static.crates.io/crates/gpu-alloc-types/gpu-alloc-types-0.3.0.crate \
+ https://static.crates.io/crates/gpu-descriptor/gpu-descriptor-0.3.2.crate \
+ https://static.crates.io/crates/gpu-descriptor-types/gpu-descriptor-types-0.2.0.crate \
+ https://static.crates.io/crates/half/half-2.7.1.crate \
+ https://static.crates.io/crates/hashbrown/hashbrown-0.15.5.crate \
+ https://static.crates.io/crates/hashbrown/hashbrown-0.16.1.crate \
+ https://static.crates.io/crates/heck/heck-0.5.0.crate \
+ https://static.crates.io/crates/hermit-abi/hermit-abi-0.5.2.crate \
+ https://static.crates.io/crates/hex/hex-0.4.3.crate \
+ https://static.crates.io/crates/hexf-parse/hexf-parse-0.2.1.crate \
+ https://static.crates.io/crates/hidapi/hidapi-2.6.5.crate \
+ https://static.crates.io/crates/iana-time-zone/iana-time-zone-0.1.65.crate \
+ https://static.crates.io/crates/iana-time-zone-haiku/iana-time-zone-haiku-0.1.2.crate \
+ https://static.crates.io/crates/icu_collections/icu_collections-2.1.1.crate \
+ https://static.crates.io/crates/icu_locale_core/icu_locale_core-2.1.1.crate \
+ https://static.crates.io/crates/icu_normalizer/icu_normalizer-2.1.1.crate \
+ https://static.crates.io/crates/icu_normalizer_data/icu_normalizer_data-2.1.1.crate \
+ https://static.crates.io/crates/icu_properties/icu_properties-2.1.2.crate \
+ https://static.crates.io/crates/icu_properties_data/icu_properties_data-2.1.2.crate \
+ https://static.crates.io/crates/icu_provider/icu_provider-2.1.1.crate \
+ https://static.crates.io/crates/id-arena/id-arena-2.3.0.crate \
+ https://static.crates.io/crates/idna/idna-1.1.0.crate \
+ https://static.crates.io/crates/idna_adapter/idna_adapter-1.2.1.crate \
+ https://static.crates.io/crates/image/image-0.25.10.crate \
+ https://static.crates.io/crates/immutable-chunkmap/immutable-chunkmap-2.1.2.crate \
+ https://static.crates.io/crates/indexmap/indexmap-2.13.0.crate \
+ https://static.crates.io/crates/is_terminal_polyfill/is_terminal_polyfill-1.70.2.crate \
+ https://static.crates.io/crates/itoa/itoa-1.0.17.crate \
+ https://static.crates.io/crates/jni/jni-0.21.1.crate \
+ https://static.crates.io/crates/jni/jni-0.22.3.crate \
+ https://static.crates.io/crates/jni-macros/jni-macros-0.22.2.crate \
+ https://static.crates.io/crates/jni-sys/jni-sys-0.3.0.crate \
+ https://static.crates.io/crates/jni-sys/jni-sys-0.4.1.crate \
+ https://static.crates.io/crates/jni-sys-macros/jni-sys-macros-0.4.1.crate \
+ https://static.crates.io/crates/jobserver/jobserver-0.1.34.crate \
+ https://static.crates.io/crates/js-sys/js-sys-0.3.91.crate \
+ https://static.crates.io/crates/khronos-egl/khronos-egl-6.0.0.crate \
+ https://static.crates.io/crates/khronos_api/khronos_api-3.1.0.crate \
+ https://static.crates.io/crates/leb128fmt/leb128fmt-0.1.0.crate \
+ https://static.crates.io/crates/libc/libc-0.2.183.crate \
+ https://static.crates.io/crates/libloading/libloading-0.8.9.crate \
+ https://static.crates.io/crates/libredox/libredox-0.1.14.crate \
+ https://static.crates.io/crates/libusb1-sys/libusb1-sys-0.7.0.crate \
+ https://static.crates.io/crates/linux-raw-sys/linux-raw-sys-0.4.15.crate \
+ https://static.crates.io/crates/linux-raw-sys/linux-raw-sys-0.12.1.crate \
+ https://static.crates.io/crates/litemap/litemap-0.8.1.crate \
+ https://static.crates.io/crates/litrs/litrs-1.0.0.crate \
+ https://static.crates.io/crates/lock_api/lock_api-0.4.14.crate \
+ https://static.crates.io/crates/log/log-0.4.29.crate \
+ https://static.crates.io/crates/malloc_buf/malloc_buf-0.0.6.crate \
+ https://static.crates.io/crates/memchr/memchr-2.8.0.crate \
+ https://static.crates.io/crates/memmap2/memmap2-0.9.10.crate \
+ https://static.crates.io/crates/memoffset/memoffset-0.9.1.crate \
+ https://static.crates.io/crates/metal/metal-0.31.0.crate \
+ https://static.crates.io/crates/micromath/micromath-2.1.0.crate \
+ https://static.crates.io/crates/miniz_oxide/miniz_oxide-0.8.9.crate \
+ https://static.crates.io/crates/moxcms/moxcms-0.8.1.crate \
+ https://static.crates.io/crates/naga/naga-24.0.0.crate \
+ https://static.crates.io/crates/ndk/ndk-0.9.0.crate \
+ https://static.crates.io/crates/ndk-context/ndk-context-0.1.1.crate \
+ https://static.crates.io/crates/ndk-sys/ndk-sys-0.5.0+25.2.9519653.crate \
+ https://static.crates.io/crates/ndk-sys/ndk-sys-0.6.0+11769913.crate \
+ https://static.crates.io/crates/nix/nix-0.29.0.crate \
+ https://static.crates.io/crates/nohash-hasher/nohash-hasher-0.2.0.crate \
+ https://static.crates.io/crates/ntapi/ntapi-0.4.3.crate \
+ https://static.crates.io/crates/num-traits/num-traits-0.2.19.crate \
+ https://static.crates.io/crates/num_enum/num_enum-0.7.5.crate \
+ https://static.crates.io/crates/num_enum_derive/num_enum_derive-0.7.5.crate \
+ https://static.crates.io/crates/objc/objc-0.2.7.crate \
+ https://static.crates.io/crates/objc-sys/objc-sys-0.3.5.crate \
+ https://static.crates.io/crates/objc2/objc2-0.5.2.crate \
+ https://static.crates.io/crates/objc2/objc2-0.6.4.crate \
+ https://static.crates.io/crates/objc2-app-kit/objc2-app-kit-0.2.2.crate \
+ https://static.crates.io/crates/objc2-app-kit/objc2-app-kit-0.3.2.crate \
+ https://static.crates.io/crates/objc2-cloud-kit/objc2-cloud-kit-0.2.2.crate \
+ https://static.crates.io/crates/objc2-contacts/objc2-contacts-0.2.2.crate \
+ https://static.crates.io/crates/objc2-core-data/objc2-core-data-0.2.2.crate \
+ https://static.crates.io/crates/objc2-core-foundation/objc2-core-foundation-0.3.2.crate \
+ https://static.crates.io/crates/objc2-core-graphics/objc2-core-graphics-0.3.2.crate \
+ https://static.crates.io/crates/objc2-core-image/objc2-core-image-0.2.2.crate \
+ https://static.crates.io/crates/objc2-core-location/objc2-core-location-0.2.2.crate \
+ https://static.crates.io/crates/objc2-encode/objc2-encode-4.1.0.crate \
+ https://static.crates.io/crates/objc2-foundation/objc2-foundation-0.2.2.crate \
+ https://static.crates.io/crates/objc2-foundation/objc2-foundation-0.3.2.crate \
+ https://static.crates.io/crates/objc2-io-surface/objc2-io-surface-0.3.2.crate \
+ https://static.crates.io/crates/objc2-link-presentation/objc2-link-presentation-0.2.2.crate \
+ https://static.crates.io/crates/objc2-metal/objc2-metal-0.2.2.crate \
+ https://static.crates.io/crates/objc2-quartz-core/objc2-quartz-core-0.2.2.crate \
+ https://static.crates.io/crates/objc2-symbols/objc2-symbols-0.2.2.crate \
+ https://static.crates.io/crates/objc2-ui-kit/objc2-ui-kit-0.2.2.crate \
+ https://static.crates.io/crates/objc2-uniform-type-identifiers/objc2-uniform-type-identifiers-0.2.2.crate \
+ https://static.crates.io/crates/objc2-user-notifications/objc2-user-notifications-0.2.2.crate \
+ https://static.crates.io/crates/once_cell/once_cell-1.21.3.crate \
+ https://static.crates.io/crates/once_cell_polyfill/once_cell_polyfill-1.70.2.crate \
+ https://static.crates.io/crates/orbclient/orbclient-0.3.50.crate \
+ https://static.crates.io/crates/ordered-float/ordered-float-4.6.0.crate \
+ https://static.crates.io/crates/ordered-stream/ordered-stream-0.2.0.crate \
+ https://static.crates.io/crates/owned_ttf_parser/owned_ttf_parser-0.25.1.crate \
+ https://static.crates.io/crates/parking/parking-2.2.1.crate \
+ https://static.crates.io/crates/parking_lot/parking_lot-0.12.5.crate \
+ https://static.crates.io/crates/parking_lot_core/parking_lot_core-0.9.12.crate \
+ https://static.crates.io/crates/paste/paste-1.0.15.crate \
+ https://static.crates.io/crates/percent-encoding/percent-encoding-2.3.2.crate \
+ https://static.crates.io/crates/pin-project/pin-project-1.1.11.crate \
+ https://static.crates.io/crates/pin-project-internal/pin-project-internal-1.1.11.crate \
+ https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.17.crate \
+ https://static.crates.io/crates/piper/piper-0.2.5.crate \
+ https://static.crates.io/crates/pkg-config/pkg-config-0.3.32.crate \
+ https://static.crates.io/crates/plain/plain-0.2.3.crate \
+ https://static.crates.io/crates/png/png-0.18.1.crate \
+ https://static.crates.io/crates/polling/polling-3.11.0.crate \
+ https://static.crates.io/crates/potential_utf/potential_utf-0.1.4.crate \
+ https://static.crates.io/crates/ppv-lite86/ppv-lite86-0.2.21.crate \
+ https://static.crates.io/crates/prettyplease/prettyplease-0.2.37.crate \
+ https://static.crates.io/crates/proc-macro-crate/proc-macro-crate-3.5.0.crate \
+ https://static.crates.io/crates/proc-macro2/proc-macro2-1.0.106.crate \
+ https://static.crates.io/crates/profiling/profiling-1.0.17.crate \
+ https://static.crates.io/crates/pxfm/pxfm-0.1.28.crate \
+ https://static.crates.io/crates/quick-error/quick-error-2.0.1.crate \
+ https://static.crates.io/crates/quick-xml/quick-xml-0.30.0.crate \
+ https://static.crates.io/crates/quick-xml/quick-xml-0.39.2.crate \
+ https://static.crates.io/crates/quote/quote-1.0.45.crate \
+ https://static.crates.io/crates/r-efi/r-efi-5.3.0.crate \
+ https://static.crates.io/crates/r-efi/r-efi-6.0.0.crate \
+ https://static.crates.io/crates/rand/rand-0.8.5.crate \
+ https://static.crates.io/crates/rand_chacha/rand_chacha-0.3.1.crate \
+ https://static.crates.io/crates/rand_core/rand_core-0.6.4.crate \
+ https://static.crates.io/crates/raw-window-handle/raw-window-handle-0.6.2.crate \
+ https://static.crates.io/crates/rayon/rayon-1.11.0.crate \
+ https://static.crates.io/crates/rayon-core/rayon-core-1.13.0.crate \
+ https://static.crates.io/crates/redox_syscall/redox_syscall-0.4.1.crate \
+ https://static.crates.io/crates/redox_syscall/redox_syscall-0.5.18.crate \
+ https://static.crates.io/crates/redox_syscall/redox_syscall-0.7.3.crate \
+ https://static.crates.io/crates/renderdoc-sys/renderdoc-sys-1.1.0.crate \
+ https://static.crates.io/crates/rusb/rusb-0.9.4.crate \
+ https://static.crates.io/crates/rustc-hash/rustc-hash-1.1.0.crate \
+ https://static.crates.io/crates/rustc-hash/rustc-hash-2.1.1.crate \
+ https://static.crates.io/crates/rustc_version/rustc_version-0.4.1.crate \
+ https://static.crates.io/crates/rustix/rustix-0.38.44.crate \
+ https://static.crates.io/crates/rustix/rustix-1.1.4.crate \
+ https://static.crates.io/crates/rustversion/rustversion-1.0.22.crate \
+ https://static.crates.io/crates/same-file/same-file-1.0.6.crate \
+ https://static.crates.io/crates/scoped-tls/scoped-tls-1.0.1.crate \
+ https://static.crates.io/crates/scopeguard/scopeguard-1.2.0.crate \
+ https://static.crates.io/crates/sctk-adwaita/sctk-adwaita-0.10.1.crate \
+ https://static.crates.io/crates/semver/semver-1.0.27.crate \
+ https://static.crates.io/crates/serde/serde-1.0.228.crate \
+ https://static.crates.io/crates/serde_core/serde_core-1.0.228.crate \
+ https://static.crates.io/crates/serde_derive/serde_derive-1.0.228.crate \
+ https://static.crates.io/crates/serde_json/serde_json-1.0.149.crate \
+ https://static.crates.io/crates/serde_repr/serde_repr-0.1.20.crate \
+ https://static.crates.io/crates/sha1/sha1-0.10.6.crate \
+ https://static.crates.io/crates/shlex/shlex-1.3.0.crate \
+ https://static.crates.io/crates/signal-hook-registry/signal-hook-registry-1.4.8.crate \
+ https://static.crates.io/crates/simd-adler32/simd-adler32-0.3.8.crate \
+ https://static.crates.io/crates/simd_cesu8/simd_cesu8-1.1.1.crate \
+ https://static.crates.io/crates/simdutf8/simdutf8-0.1.5.crate \
+ https://static.crates.io/crates/slab/slab-0.4.12.crate \
+ https://static.crates.io/crates/slotmap/slotmap-1.1.1.crate \
+ https://static.crates.io/crates/smallvec/smallvec-1.15.1.crate \
+ https://static.crates.io/crates/smithay-client-toolkit/smithay-client-toolkit-0.19.2.crate \
+ https://static.crates.io/crates/smithay-client-toolkit/smithay-client-toolkit-0.20.0.crate \
+ https://static.crates.io/crates/smithay-clipboard/smithay-clipboard-0.7.3.crate \
+ https://static.crates.io/crates/smol_str/smol_str-0.2.2.crate \
+ https://static.crates.io/crates/spirv/spirv-0.3.0+sdk-1.3.268.0.crate \
+ https://static.crates.io/crates/stable_deref_trait/stable_deref_trait-1.2.1.crate \
+ https://static.crates.io/crates/static_assertions/static_assertions-1.1.0.crate \
+ https://static.crates.io/crates/strict-num/strict-num-0.1.1.crate \
+ https://static.crates.io/crates/strsim/strsim-0.11.1.crate \
+ https://static.crates.io/crates/strum/strum-0.26.3.crate \
+ https://static.crates.io/crates/strum_macros/strum_macros-0.26.4.crate \
+ https://static.crates.io/crates/syn/syn-2.0.117.crate \
+ https://static.crates.io/crates/synstructure/synstructure-0.13.2.crate \
+ https://static.crates.io/crates/sysinfo/sysinfo-0.33.1.crate \
+ https://static.crates.io/crates/tempfile/tempfile-3.27.0.crate \
+ https://static.crates.io/crates/termcolor/termcolor-1.4.1.crate \
+ https://static.crates.io/crates/thiserror/thiserror-1.0.69.crate \
+ https://static.crates.io/crates/thiserror/thiserror-2.0.18.crate \
+ https://static.crates.io/crates/thiserror-impl/thiserror-impl-1.0.69.crate \
+ https://static.crates.io/crates/thiserror-impl/thiserror-impl-2.0.18.crate \
+ https://static.crates.io/crates/tiff/tiff-0.11.3.crate \
+ https://static.crates.io/crates/tiny-skia/tiny-skia-0.11.4.crate \
+ https://static.crates.io/crates/tiny-skia-path/tiny-skia-path-0.11.4.crate \
+ https://static.crates.io/crates/tinystr/tinystr-0.8.2.crate \
+ https://static.crates.io/crates/toml_datetime/toml_datetime-1.0.0+spec-1.1.0.crate \
+ https://static.crates.io/crates/toml_edit/toml_edit-0.25.4+spec-1.1.0.crate \
+ https://static.crates.io/crates/toml_parser/toml_parser-1.0.9+spec-1.1.0.crate \
+ https://static.crates.io/crates/tracing/tracing-0.1.44.crate \
+ https://static.crates.io/crates/tracing-attributes/tracing-attributes-0.1.31.crate \
+ https://static.crates.io/crates/tracing-core/tracing-core-0.1.36.crate \
+ https://static.crates.io/crates/ttf-parser/ttf-parser-0.25.1.crate \
+ https://static.crates.io/crates/type-map/type-map-0.5.1.crate \
+ https://static.crates.io/crates/typenum/typenum-1.19.0.crate \
+ https://static.crates.io/crates/uds_windows/uds_windows-1.2.0.crate \
+ https://static.crates.io/crates/unicode-ident/unicode-ident-1.0.24.crate \
+ https://static.crates.io/crates/unicode-segmentation/unicode-segmentation-1.12.0.crate \
+ https://static.crates.io/crates/unicode-width/unicode-width-0.1.14.crate \
+ https://static.crates.io/crates/unicode-xid/unicode-xid-0.2.6.crate \
+ https://static.crates.io/crates/url/url-2.5.8.crate \
+ https://static.crates.io/crates/utf8_iter/utf8_iter-1.0.4.crate \
+ https://static.crates.io/crates/utf8parse/utf8parse-0.2.2.crate \
+ https://static.crates.io/crates/vcpkg/vcpkg-0.2.15.crate \
+ https://static.crates.io/crates/version_check/version_check-0.9.5.crate \
+ https://static.crates.io/crates/walkdir/walkdir-2.5.0.crate \
+ https://static.crates.io/crates/wasi/wasi-0.11.1+wasi-snapshot-preview1.crate \
+ https://static.crates.io/crates/wasip2/wasip2-1.0.2+wasi-0.2.9.crate \
+ https://static.crates.io/crates/wasip3/wasip3-0.4.0+wasi-0.3.0-rc-2026-01-06.crate \
+ https://static.crates.io/crates/wasm-bindgen/wasm-bindgen-0.2.114.crate \
+ https://static.crates.io/crates/wasm-bindgen-futures/wasm-bindgen-futures-0.4.64.crate \
+ https://static.crates.io/crates/wasm-bindgen-macro/wasm-bindgen-macro-0.2.114.crate \
+ https://static.crates.io/crates/wasm-bindgen-macro-support/wasm-bindgen-macro-support-0.2.114.crate \
+ https://static.crates.io/crates/wasm-bindgen-shared/wasm-bindgen-shared-0.2.114.crate \
+ https://static.crates.io/crates/wasm-encoder/wasm-encoder-0.244.0.crate \
+ https://static.crates.io/crates/wasm-metadata/wasm-metadata-0.244.0.crate \
+ https://static.crates.io/crates/wasmparser/wasmparser-0.244.0.crate \
+ https://static.crates.io/crates/wayland-backend/wayland-backend-0.3.14.crate \
+ https://static.crates.io/crates/wayland-client/wayland-client-0.31.13.crate \
+ https://static.crates.io/crates/wayland-csd-frame/wayland-csd-frame-0.3.0.crate \
+ https://static.crates.io/crates/wayland-cursor/wayland-cursor-0.31.13.crate \
+ https://static.crates.io/crates/wayland-protocols/wayland-protocols-0.32.11.crate \
+ https://static.crates.io/crates/wayland-protocols-experimental/wayland-protocols-experimental-20250721.0.1.crate \
+ https://static.crates.io/crates/wayland-protocols-misc/wayland-protocols-misc-0.3.11.crate \
+ https://static.crates.io/crates/wayland-protocols-plasma/wayland-protocols-plasma-0.3.11.crate \
+ https://static.crates.io/crates/wayland-protocols-wlr/wayland-protocols-wlr-0.3.11.crate \
+ https://static.crates.io/crates/wayland-scanner/wayland-scanner-0.31.9.crate \
+ https://static.crates.io/crates/wayland-sys/wayland-sys-0.31.10.crate \
+ https://static.crates.io/crates/web-sys/web-sys-0.3.91.crate \
+ https://static.crates.io/crates/web-time/web-time-1.1.0.crate \
+ https://static.crates.io/crates/webbrowser/webbrowser-1.2.0.crate \
+ https://static.crates.io/crates/weezl/weezl-0.1.12.crate \
+ https://static.crates.io/crates/wgpu/wgpu-24.0.5.crate \
+ https://static.crates.io/crates/wgpu-core/wgpu-core-24.0.5.crate \
+ https://static.crates.io/crates/wgpu-hal/wgpu-hal-24.0.4.crate \
+ https://static.crates.io/crates/wgpu-types/wgpu-types-24.0.0.crate \
+ https://static.crates.io/crates/winapi/winapi-0.3.9.crate \
+ https://static.crates.io/crates/winapi-i686-pc-windows-gnu/winapi-i686-pc-windows-gnu-0.4.0.crate \
+ https://static.crates.io/crates/winapi-util/winapi-util-0.1.11.crate \
+ https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/winapi-x86_64-pc-windows-gnu-0.4.0.crate \
+ https://static.crates.io/crates/windows/windows-0.57.0.crate \
+ https://static.crates.io/crates/windows/windows-0.58.0.crate \
+ https://static.crates.io/crates/windows-core/windows-core-0.57.0.crate \
+ https://static.crates.io/crates/windows-core/windows-core-0.58.0.crate \
+ https://static.crates.io/crates/windows-core/windows-core-0.62.2.crate \
+ https://static.crates.io/crates/windows-implement/windows-implement-0.57.0.crate \
+ https://static.crates.io/crates/windows-implement/windows-implement-0.58.0.crate \
+ https://static.crates.io/crates/windows-implement/windows-implement-0.60.2.crate \
+ https://static.crates.io/crates/windows-interface/windows-interface-0.57.0.crate \
+ https://static.crates.io/crates/windows-interface/windows-interface-0.58.0.crate \
+ https://static.crates.io/crates/windows-interface/windows-interface-0.59.3.crate \
+ https://static.crates.io/crates/windows-link/windows-link-0.2.1.crate \
+ https://static.crates.io/crates/windows-result/windows-result-0.1.2.crate \
+ https://static.crates.io/crates/windows-result/windows-result-0.2.0.crate \
+ https://static.crates.io/crates/windows-result/windows-result-0.4.1.crate \
+ https://static.crates.io/crates/windows-strings/windows-strings-0.1.0.crate \
+ https://static.crates.io/crates/windows-strings/windows-strings-0.5.1.crate \
+ https://static.crates.io/crates/windows-sys/windows-sys-0.45.0.crate \
+ https://static.crates.io/crates/windows-sys/windows-sys-0.52.0.crate \
+ https://static.crates.io/crates/windows-sys/windows-sys-0.59.0.crate \
+ https://static.crates.io/crates/windows-sys/windows-sys-0.60.2.crate \
+ https://static.crates.io/crates/windows-sys/windows-sys-0.61.2.crate \
+ https://static.crates.io/crates/windows-targets/windows-targets-0.42.2.crate \
+ https://static.crates.io/crates/windows-targets/windows-targets-0.52.6.crate \
+ https://static.crates.io/crates/windows-targets/windows-targets-0.53.5.crate \
+ https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.42.2.crate \
+ https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.52.6.crate \
+ https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.53.1.crate \
+ https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.42.2.crate \
+ https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.52.6.crate \
+ https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.53.1.crate \
+ https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.42.2.crate \
+ https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.52.6.crate \
+ https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.53.1.crate \
+ https://static.crates.io/crates/windows_i686_gnullvm/windows_i686_gnullvm-0.52.6.crate \
+ https://static.crates.io/crates/windows_i686_gnullvm/windows_i686_gnullvm-0.53.1.crate \
+ https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.42.2.crate \
+ https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.52.6.crate \
+ https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.53.1.crate \
+ https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.42.2.crate \
+ https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.52.6.crate \
+ https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.53.1.crate \
+ https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.42.2.crate \
+ https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.52.6.crate \
+ https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.53.1.crate \
+ https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.42.2.crate \
+ https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.52.6.crate \
+ https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.53.1.crate \
+ https://static.crates.io/crates/winit/winit-0.30.13.crate \
+ https://static.crates.io/crates/winnow/winnow-0.7.15.crate \
+ https://static.crates.io/crates/wit-bindgen/wit-bindgen-0.51.0.crate \
+ https://static.crates.io/crates/wit-bindgen-core/wit-bindgen-core-0.51.0.crate \
+ https://static.crates.io/crates/wit-bindgen-rust/wit-bindgen-rust-0.51.0.crate \
+ https://static.crates.io/crates/wit-bindgen-rust-macro/wit-bindgen-rust-macro-0.51.0.crate \
+ https://static.crates.io/crates/wit-component/wit-component-0.244.0.crate \
+ https://static.crates.io/crates/wit-parser/wit-parser-0.244.0.crate \
+ https://static.crates.io/crates/writeable/writeable-0.6.2.crate \
+ https://static.crates.io/crates/x11-dl/x11-dl-2.21.0.crate \
+ https://static.crates.io/crates/x11rb/x11rb-0.13.2.crate \
+ https://static.crates.io/crates/x11rb-protocol/x11rb-protocol-0.13.2.crate \
+ https://static.crates.io/crates/xcursor/xcursor-0.3.10.crate \
+ https://static.crates.io/crates/xdg-home/xdg-home-1.3.0.crate \
+ https://static.crates.io/crates/xkbcommon-dl/xkbcommon-dl-0.4.2.crate \
+ https://static.crates.io/crates/xkeysym/xkeysym-0.2.1.crate \
+ https://static.crates.io/crates/xml-rs/xml-rs-0.8.28.crate \
+ https://static.crates.io/crates/yoke/yoke-0.8.1.crate \
+ https://static.crates.io/crates/yoke-derive/yoke-derive-0.8.1.crate \
+ https://static.crates.io/crates/zbus/zbus-4.4.0.crate \
+ https://static.crates.io/crates/zbus-lockstep/zbus-lockstep-0.4.4.crate \
+ https://static.crates.io/crates/zbus-lockstep-macros/zbus-lockstep-macros-0.4.4.crate \
+ https://static.crates.io/crates/zbus_macros/zbus_macros-4.4.0.crate \
+ https://static.crates.io/crates/zbus_names/zbus_names-3.0.0.crate \
+ https://static.crates.io/crates/zbus_xml/zbus_xml-4.0.0.crate \
+ https://static.crates.io/crates/zerocopy/zerocopy-0.8.42.crate \
+ https://static.crates.io/crates/zerocopy-derive/zerocopy-derive-0.8.42.crate \
+ https://static.crates.io/crates/zerofrom/zerofrom-0.1.6.crate \
+ https://static.crates.io/crates/zerofrom-derive/zerofrom-derive-0.1.6.crate \
+ https://static.crates.io/crates/zerotrie/zerotrie-0.2.3.crate \
+ https://static.crates.io/crates/zerovec/zerovec-0.11.5.crate \
+ https://static.crates.io/crates/zerovec-derive/zerovec-derive-0.11.2.crate \
+ https://static.crates.io/crates/zmij/zmij-1.0.21.crate \
+ https://static.crates.io/crates/zune-core/zune-core-0.5.1.crate \
+ https://static.crates.io/crates/zune-jpeg/zune-jpeg-0.5.13.crate \
+ https://static.crates.io/crates/zvariant/zvariant-4.2.0.crate \
+ https://static.crates.io/crates/zvariant_derive/zvariant_derive-4.2.0.crate \
+ https://static.crates.io/crates/zvariant_utils/zvariant_utils-2.1.0.crate"
+MD5SUM="0d29daff19780d917c41505562e8a474 \
+ c84a3bcbbc538026edb9b329a2da8c4f \
+ 1b44c125ef14f84aea92f7d95d663961 \
+ 143c20e6fcdb09ca68a20c1908c79088 \
+ 98541ac3b39b0c4640d096ac9e8be594 \
+ 60b2626b731f8579639bb3c3b5f85dcf \
+ bedb9e72078b3e12d4496e57a988355d \
+ 9a17170a83ad0cd1308e40f80affbc92 \
+ 27c25e71c4f81dc6612af93f6672dd5b \
+ 4b960733efa3cc313a42df344cc01b0b \
+ 873036bd52f5fd829bd41b3c2ca0bc08 \
+ 2d72538f5e173edbd18d17e347f409bc \
+ 263fbfd7e049052b443b70392759f229 \
+ 33d654107e29a1ec9c8df5947d1888f2 \
+ bf23cd323c33a8c283c41bb9b79e4ce4 \
+ 082b8b397447a875d587f5f6447092db \
+ 8f73a79f90605665cbc9650aafa9ca45 \
+ 27ce951824c9152083803a3f33f60d1c \
+ c7aa5d86dfe62f20aebe2f9e8f2981d6 \
+ c03b3c2d00cf63a83ca2798fd7693603 \
+ d6185493a6ebbb1b9d976c535aadca10 \
+ 2b0a81f4a4f3a209de550ee75ed37439 \
+ 7d0eee1c60dce32fb616e46829b973f6 \
+ 3ce13f8504b72552464acf5c8a29fe72 \
+ 7646c7582d8b97443a94c12d30e60d99 \
+ 57a24b7d0eb28101d91c9be9815cbf17 \
+ e4ab6898eb1f848a854bb3870592cf9a \
+ f8a8ecf4f8bdfd1680e54c8f4c81eb18 \
+ a9bcafe8f34fdb14bf32d45ad3cf13cb \
+ 879fa72294b47bb3deacfff81b33cc82 \
+ 0b5c8135b2921803b74acc1342b82b55 \
+ 1c0188df1c937ebaa68d67cf5230ebde \
+ d021569c91996b1186cdbd3533558988 \
+ 2e76f09d03d84f1402ef456531cda0ab \
+ 7ff449424d1aa13cdf930eee6dfa3d0b \
+ e09416c884027b94479fc254f8d2388e \
+ d29971a331ab6d870ba90d0c019d0c06 \
+ 6a44afda654777d2930b93366bdfc7f3 \
+ 36a3c6aeff01324da0da592e2875ec0d \
+ 11b35c0a47fd19941d44acc9dcac9c12 \
+ b542890419335a0d1398059e37595c59 \
+ 2dda16df51825685eae43d9c26485b82 \
+ 3e70bb53cab36a3ef2a02dfce21bc472 \
+ a5835e403734b7b881048fc30a254454 \
+ fa4e40913159dd05959a52a5dff270fc \
+ 66aebb5faa7f9df11bdeb5c1b1aca9a2 \
+ a295edb6953237ebbdfa8e731229f9a3 \
+ 58f403eb1c3a8600210527b17908e37a \
+ ea2d23ceb9f98853a7dffc6c02884464 \
+ 023b03cf9968b29253a5dfe62051008d \
+ eb7c82510a751ba54a319353540c497b \
+ ee16487cedb6a74ae0fcad8f4403a758 \
+ 8bf5578c26c3fb3dc870c1017cdc24d5 \
+ ec9087f462624c5d819e1361538dbf05 \
+ 97a85db121e60d673d165734fb6ce0f0 \
+ 45339d90b2b3a4f123af5ec459954102 \
+ d8b6232e66c7e07e8a626ef21d3b8725 \
+ 06457d3034340d791d99664015b3010e \
+ fe3f318e17dfe5b994ee937777f197aa \
+ 09887108a4232bb49e771c123d816f61 \
+ bd1ea4f70c9d121a381b37d88a237c5d \
+ 09ad609ff59e9179150f1dfdb96fc82a \
+ 463a425785b2b34a7b2f5106bf25808e \
+ 267fc4a374516caa7ab495f0c607c1b4 \
+ 7dbc461580b8ee7d163a6e02524c6d90 \
+ f5215c4283a1984b95043a7185245e00 \
+ 5739f950bcce803d986d189b128861b0 \
+ 14937e64ec2e08ef69a3dd700d40d02e \
+ 626a24820b4db63892d29aeaca1368bb \
+ 659d620506766e1daee3e6b6f5d6f803 \
+ 98053437993f33da2a248faf5df8aff9 \
+ e2788c8738759b28a40439f09863e56a \
+ d386ddb864c0139fd25d64360c146d76 \
+ faa32da3be14130a4525bb7ba601c62e \
+ b69f87eec94e36408135e81035235621 \
+ aba1d13503196d9a767b260913f1401f \
+ d1f70680f36b13b74bab20250fb2f26f \
+ 4d7e3bc6c42f8a875a87246ed14d9948 \
+ e37baa1796debe9e6f5b94fdb25c2ff3 \
+ c5229cfccb6a1598e74a837dbc9e2797 \
+ 780c7d64e5295fc16c5afecd00007265 \
+ 58ee9a40577f5086ec1f22dc238b9c60 \
+ 08c18a18f452c41072b08e8367778c6a \
+ b2a8b4dcf41563d959ae386da42eeb83 \
+ 3975562a4eb5f04b174ad599a0da8fd6 \
+ 44505199ec0964feb5488051b4ac92d5 \
+ 897be1152015ad66fa30dbdc224af39d \
+ 5364311ee37e0d14061eb1fce66ce061 \
+ 5dec9da63f47c77c430e7e05f911c2fc \
+ 2d8f79d39c77fca4242b626a0d03ce72 \
+ 3d62bfbbe08bdcee55fcb8cda85554d9 \
+ 03f2b7eae8b6491dbd3caacd842cb8cb \
+ b4814a803b84db4cf8515ea8cbb097bf \
+ 145b7bd67e6356f3510a7d8fa9bb7926 \
+ 2426470cc1c784e172b4e78f8ff158fa \
+ 58c92d1a99f821c6afc763d6c9943b2d \
+ 8a1dbc6f2dff64198e1763751f4f05fd \
+ 004f7479ebc2f2beabc3cb9b81339a45 \
+ 20912c7f72ab738fda522e6c3b9dab90 \
+ 9cd90565692a9d0dca227faabccf9720 \
+ d1c98c1a0c878993062d8da7ce16ce47 \
+ b9476d4e956a48f351d2f89abbd3e068 \
+ 5b5d7324e05d68d85446690711eb15c6 \
+ 384b125937459653c5315ebefa82716b \
+ 96c3c9f009928f02773032f341666861 \
+ e1ed9f144fb88357dbd90a62dbf0c928 \
+ c3d0083d6c42155a976089c1b5e5c571 \
+ 1f982fc26da746ca2c49a73e09a018ae \
+ d06735ef654a2e7b6459da715defe3ad \
+ 580acffb91fe8d66f7fb685bea66679b \
+ ff217450f24eee9b0f99514884e6eaf7 \
+ 928c1b713dfb5e2a6dc386947b9493cd \
+ 6de2f32162c472a56992de11543221e5 \
+ 8ea35f559a34b5a0ba1b063e001773ca \
+ dceddd3d936c2195d6fd507e3773bc4e \
+ 61fd903acafef1f98778c4171a76f705 \
+ f0db69b0c5226c2e39bc7b1d6d2d8ec7 \
+ 3f50050270afe8306cbe5191201577b9 \
+ b0a1ffd6b0b5fe67e3dac04cd26b3099 \
+ a3cf7ebb276cfce5ee9d24184f4da8be \
+ bd4165c4164a784dec5ecdd03ba7a0dc \
+ 4f351598e06a94639d8786bf3017f6a2 \
+ 01c4ec29f81c1001360f63fbb021b264 \
+ c9206a31d6f150dbb558bf9da78ec0e2 \
+ 94f11861c538d1a2fd56c86d140e4358 \
+ fc53a85c912427e1af1278d8f9ef2aa4 \
+ 24210500b0b946ed658dd20037cdf5b4 \
+ 38f845b095b4ca30f93e034c7bd5ab14 \
+ 0b1834c2de5aeb930998c0f41e1e5ac7 \
+ 50f998a859c3e57218745ba77c370e2b \
+ f16e9cea55055cb7ef8d754727242b6b \
+ fb71f26e56c868ceb246642467f60aef \
+ 29262ad47afbf8db117fd581e958b96b \
+ 26879bc2f931276484214e5c3124f3c9 \
+ 17bd511a7288906c12a96b2ba29179a7 \
+ d49ac779aef556b3b58375a47fa73913 \
+ 1853b94a2efa6fac650a8bd9fefe6c72 \
+ 64a6d8fe0c9a450bcefa41894e17d7ac \
+ 9b65713862f6e73831c931aa5b279887 \
+ e9a474ff4fa06cae9de697c1a96a6181 \
+ 9a421286bfaf7199053b6fa7a3e690cb \
+ 8065dcc98df78ac70abdea4c30f4a617 \
+ cd6875725af793cd82db47d68b00ee93 \
+ 2148b6324097dfbd6757abe69b6b44a8 \
+ 00fe020796f395ee88a8e8049ae852b8 \
+ a53c36fc80df7a3ac8bd7ae18314025c \
+ b21b3d38440d366986cecec151f9ae4a \
+ 2fa46098ac5c16a0a27100821b180a32 \
+ 784f9d07cc5abe373ee1c69a2367ca57 \
+ 7408001e14fa57680e29eed3f8bf866e \
+ c6d40d9ee992d3e513752fc18aeb8da9 \
+ d1470fab8946d2d4988e4b2fac7af2b7 \
+ 90a5e69447fe4bca7f66ae6a6faa5d57 \
+ ae95906a14fee88019527f5dac6a2908 \
+ ff62c1415be32ef6642213c9ae175170 \
+ 5f183ccef8add67a9c1eae2fd04231ef \
+ ce5935e8063a452913a61e5405b33cb9 \
+ b0dd13f7bb7833b8d10e78cb331f4464 \
+ 1d3e530a3410fc95a6987d70f84a6332 \
+ c840150c8fa6e192f8c6ad34cba5eb65 \
+ 58ceb55eb1f29451cebced7ff02a91c3 \
+ 81afe385a2e45869d056cdd55cf9051e \
+ 87b1b7cb12ef4dfe842c212b98263048 \
+ 49dca09da2b9035986fe978a39c91c50 \
+ 750cde2aa62779cd0393f8fb43c21048 \
+ ca611f40ae8d26d9d2ebabf12532cee1 \
+ 7a314fd97a06316b612d31d7b06cf373 \
+ d699b75845a054f315a8e0148229bb7b \
+ 03613ec559ee51a45bb61ee07f1fd045 \
+ 68642bdd8c6d8feda2d737b4aecede40 \
+ ecca370386c4c809a464b923a41e775b \
+ f25c179049fc3742f9c1ac8e3fd038ae \
+ b1b2c3e3512162c97ebc6bc9944cad1e \
+ d5dc07b2126ce730ee21338e1a74f549 \
+ 58b085178e753b7041f8403289719dc6 \
+ db0326fdcb5eca7e5fa11b9745dadd42 \
+ 164c3046a7f9720ce6c4240a8433a923 \
+ 7adb8a4c6ab02e9b85282feb836ab048 \
+ be01525e51d79736e7af74fe93d19f93 \
+ cc8bc1cb8982c7891583291940933fc6 \
+ 16c701993e3b42496e2f6839d8dcfc58 \
+ 73272fe4aadb91d550dca8fc7ead8bf7 \
+ b6eb183140fe6264aa9bea200b7335ae \
+ b89ae9ab09c8cc519d2deac554efb95b \
+ b20f8542fa832b16de4b865c2a16b158 \
+ fc851d94b0963b4fff78fc7a03e1b49e \
+ 8d32bb26f7c1f0bc492745a5a6201c20 \
+ 8bc92e2d422193be1d498146e34a0b85 \
+ 1abb8c15c927019465ab14988633c201 \
+ ddb93a04c70e0491fdf1e7c552419f1a \
+ 606f51fd52eefaa3fefcb9722f6a09a8 \
+ fe2f0f3a902c75e81cc94d610ce2959f \
+ ddb53b9b69b5bf608aca921a67bd0ea3 \
+ c794e0a278b9d264dc033b1c840dd217 \
+ 55cc03328b9f67387b17d3855d19b3b0 \
+ 7d20f46219d84067cb62dc1032f19c72 \
+ 93bcc1d1d2104f1ec9841e3637e2959c \
+ 3e106da1aa25437329bf9cab094e6216 \
+ 421029191180ccd11cd28d7186a0640a \
+ 7c81e7a61ec172a229d6fdbc553e883d \
+ 5ab4143491e10a733e15fd16fadc9ee8 \
+ f0d0ff577bb4d7d50811da818ea9d1f6 \
+ 1fb91af1c97373201990f1baedc58c35 \
+ 5469659081e8e001535fd48d44a986b6 \
+ 1a67a1cc7b096a6d0009b143df1c789b \
+ dc106924da0261fec2bb0fe52fcbd9e6 \
+ 0ab29c9738f9195eb3fc47e753da5b0e \
+ da6838dbccc8e72d1ee54501b3e67ee9 \
+ 90e2e4091482691b4140891bf056ac1b \
+ 7e395ce2e673b7d9665751cbbe3cbcdc \
+ e8ba17285a3c3413579cf23c009a5f52 \
+ 39c42e640a8f39a3da834971d4525c57 \
+ ed4e44c8eeb59ccf02891681bd0a5f2d \
+ 457f61eb83d6e3f64be73190c309385a \
+ 747ad92c032b3dfd1fc3b4ed2c5226d3 \
+ e092b3abcc54806f2a35889d725bf95f \
+ 4c4475deafb46540820913cd753aa1fa \
+ a18f75b57d353c57db94eea629b6fd91 \
+ b4dcac855af5df71f3383d86c4a96b78 \
+ d3de29255d54adf4d46293b649345092 \
+ 0d1937e8c98968415d56b70463240ef5 \
+ 7863d25765478c7802da3a22b89a22dc \
+ 6121f2d1c914aac997b6be5c8a3a5db2 \
+ 4cadd8afae2817cf56e231d88d693854 \
+ f7e0ea60570ab8c5fe4de234de84da1d \
+ fefcbcd7f7d7d4787a7b619c3e12a613 \
+ 56a1a3aaa58eed87c65e4bcaccf5baa7 \
+ 03ac333203202f17d0eb0b3eeed8215a \
+ 7c144158a93c787d2b71f27bac7c9462 \
+ 5f4b7c452841feca556bb63f937df7e3 \
+ e2433ebeb29746a58911f96646c83dbf \
+ 5d9728c30b0b7db1def672b428b6e6b2 \
+ f65bea0dd327ab6aa4866de438d17830 \
+ 8abb667c3c7bfd396a05602d67416045 \
+ 994d1d5347b5e197192d65e632b8e80f \
+ 92172cd3e9959e7c5d281dcfdc789e94 \
+ 897c34c5be1df6c37d79cc76d9e86187 \
+ 44329417977289af1b726ee7568382e2 \
+ c1cdb096ded24226089e33888729fb7d \
+ 85cb32c958fb74dc8c83cb34411c10f6 \
+ feb863d9cfc4259915162d0b5c3df875 \
+ c03e863231fd0030ededbaa952f2da6b \
+ 76f8e4dcc29ab304e065cced86a344d2 \
+ 6760292aaf3f1484be67db2635c1ba47 \
+ 96b72750d930253005b5c1b642fef840 \
+ e9877281560c00f010c067d58ba45844 \
+ 481cc7357cb8bfd6a728e7b47dee84b1 \
+ 22cab5f14692ede08936ebcf2f8011eb \
+ c98fa41bae9a9421fcf24801356ef5a8 \
+ 439ec4865e007e2470fdc635f282599e \
+ 9d5019b2e6c4e1352ccff8b64b88e2cf \
+ d57243eda469f74ab7f743a0c22ab1d7 \
+ ef8998050cc1339f2187fcb43e927f1b \
+ cd4a1324d69fd62611984c19082e593d \
+ f33d4ef5860ae51a7fc2c22197836cfc \
+ bf59e862849889131e4b20b3760f739e \
+ 8c1eb08a2932ce8f4829cc11cdb2014d \
+ c0cc536bbce6c848a2957222de166961 \
+ 2676282e9e6fdfac65fe4352c5c7ec70 \
+ 2d67766ffe7e66e6a0f343a42ffaea16 \
+ 984aae484b1847131db6e51b174ae724 \
+ 3fc6b20d8adff029d6efe97abfe3b504 \
+ 24b98ea919f5970d55ff176be1d551b1 \
+ 16c9310ae90220fab4063f0de0f97275 \
+ 9c03e708e9342ede4503d231608aba77 \
+ f5948ef8f9b14504ab34f71ad4a4bd18 \
+ 483423aeefeca4aa9a3fce750b278cfd \
+ bd3f87e68d2050efee45da59ab493b32 \
+ 3c1cc07f7d54984f8189eb08401b7a7e \
+ fc70d4884e65f1c29086807a9aaad534 \
+ a5293389435948a5d7a9748c3fd431d9 \
+ 22f52663e9f197191126dd37d9b2669c \
+ 751468b1f120283e4f6f266867a03837 \
+ c8388734c6f93046c31072bea90175df \
+ ee7a5f842c39bc47c474196e83b0df5f \
+ e30085994bbeb4b7f4895d48216d5476 \
+ a1626b8f4d165b1b60d960862eba4cf0 \
+ 4d7af0b3bb140efdd46768b3e4f32192 \
+ dbaed304fca775edfd9fb0e980f64cbe \
+ 6e945b7625522326c4b07d5551d89102 \
+ ff1d093069cfc9eb161907e17a51208b \
+ 56eeea4cebc8f0fe1d09207656f78ece \
+ f33b1f1301f6b1af56c461229b3a3923 \
+ 8dd2512ec89596274c862ae0f37dba78 \
+ 790e72797d49f07f18d319da80737e5c \
+ 7b1261ea730a9314bc9bcdf4a379bf98 \
+ 9f5da5d4deefacf77ae9ca3cbe5c7c6a \
+ 3dcd0f89abb6723ee3ddc24a7673a9c0 \
+ 8391791c82ccf4f938ee8a58ea1d5e39 \
+ 0a6b86d84ce6703664485db94718c08a \
+ e662b1464700d377cb89a8a9b59bd8c0 \
+ 2d8d8b377d144f5e32b4f65a69eb0b24 \
+ b898bcf321bba46ecd15c9279cdbb290 \
+ f1358be8c98b98837cbd2cf51e75f8b3 \
+ bb2d9ddc3392081979c42dfb40d793e4 \
+ 47a71e25c316729a529ade4ce1ba5f5c \
+ d156b7c4a314664880656902717747ed \
+ 60d4c4f575afc314d644677feb1289c1 \
+ 45ca53c87e6fb9748e740a9298e2c14c \
+ 10164f24ab04c289c629028667a273ca \
+ 676e65dace8aca0ab03d8d3b39e7f618 \
+ d7602381c0bc21d10603cc940a837b06 \
+ 6c623a8eed8450399ec323a72e96855c \
+ 7a11a8c075b55ab9b8c7771520f95352 \
+ c21092e1613c25704d1b7295a9775868 \
+ 665d1d2bd563d8323882bf470ae42720 \
+ 789440cccc83854c8e317313ed19a4d1 \
+ e6122636524bff66e5ac90cf7ce0d17c \
+ 7941b0fedfc722389cc11eb1309ab509 \
+ bff9f5bd01b620680a98b1c59d92df7c \
+ 96b2e7651ac4100a283989af5406395a \
+ e7d110509fd0050a46e2ef51e8838958 \
+ cb1c9d00dc4bfe50ea815425b83ad7dd \
+ 5d43e51d91d4f3c13779812d8c7526bd \
+ 4fefd0ef59810a6624de3637e2f1449d \
+ e504675031766787830ccf420f6d8ca2 \
+ c9defe80406280bcfce4ecf31c0200b3 \
+ eb8ac974a85ac3219c8c66b17bf5d0f5 \
+ fbe5da24bd1beef6125107ee41118187 \
+ ed78a0cac45a11b61dd718319914c863 \
+ 567dd246bdcf0de25c37e4d80249d7c5 \
+ b34c2cb40fbdc36ce1bfaeb331830548 \
+ 99f5ad699ad94698b60f39bba715ca45 \
+ 28e5960bde62ccc89894bc818af6f92b \
+ c0e4af0c8f6abb0789bce7593b814245 \
+ b83e3c4eee8862b3cd0dc8570da6d0c0 \
+ 9c02495b380dc51331dcd8789b26cbfb \
+ ffb6b46b564680efcda445f05682cb47 \
+ a4bb1b92a5b098fdaa5694733ea73e7a \
+ 355b878d5248a72c2d71840357bedfa0 \
+ 62631dd6076c13af617362c155d7c8c5 \
+ 5e3168bac027527c809f8dfec53dcf2f \
+ b3c2227ede0550f603a0b4be15a7e96e \
+ 7134a4b036cb49118765602f8d954dcc \
+ 84f3ee477cf324a2723d4ecc1fe1991d \
+ 7a8fcb997e8b7fbd0c482b86d9e7a231 \
+ a14201724d70a7f63441530315f30331 \
+ b984c15c692a0f99698c62d9414e2b60 \
+ 671eb267f94ea7044d7274f0c8be1493 \
+ 1c2814a474930e4380e07d61ebdf0da6 \
+ 36977c0512291fc5b8018535554b8f67 \
+ a0ca56df32f41ed0f81f997a80e783ff \
+ f9d969cfb6e7f4deafcb270dd18464d9 \
+ 8320deed72a8c2c16b1f52c574d23bdc \
+ 49fb2204154a5fe5320366aa88b84291 \
+ f2a271be7934b762ed05523370bf14c5 \
+ ddd56057140620e25000e27d3d9174cc \
+ 41e2f0237e471d10d38bc7794d30f51a \
+ 35628f01b0626542c0b974dac3e547e7 \
+ 04ee294e8d343a73ef89ed6f07acd9b1 \
+ 470f527a51d3921895bd2583fce8d9c4 \
+ e900a384ac7dbb320fe6a7279fbfef89 \
+ f9880f1c33a7bc7b0e6e086b504bf38f \
+ f38b27b8c9625110a51293658f1cc014 \
+ b3c17dbae6dcdda8e25963f21402905e \
+ 9791431296dbe72aabda37a120a0d82f \
+ 7d06b6880c4da81ccb923260599e077e \
+ 8b8107db45afa793b896ca85dd8689eb \
+ 1789b7b4e0bec507420d66ee1751ac88 \
+ 546a0008daf3cb5698560a9395e1aec9 \
+ beb179692d7b65ed985d1d42a3996145 \
+ 3d238c0a696560fa73a41e3067a34c7f \
+ 7b5a38af796f4880fd74ca356e49b17d \
+ fb315cd2f711aabf0a616536d1b0852d \
+ 338cd54f76768381231cd3b285a4284d \
+ cae30a6ce0364ccf408618c8477a4242 \
+ a67d3a706055805259e79ecf51809dba \
+ 2149df0c65b9963e19b4e7ca4050ad96 \
+ 0d584762678f34261fc20cad508f11eb \
+ bc3fcb11cc35be0a2cb9a78c7e1764e5 \
+ d4f1482d2ef68c540f3e7901e4dd0994 \
+ 3be7095515349750af0e49d7bf04d737 \
+ e04415f2171c8ae96dec4618ee42d270 \
+ e0c0e9399d33df9a9b689ab922aba2d4 \
+ 54421e0918c8dc17b0ef6f058003eb25 \
+ b81b78c5ee04e077a5b89127814b651e \
+ 635418751467cc8e214e7ae2c72977e8 \
+ f342d4158de6be8103e82018d590ae3e \
+ 5a748ad69bf8f6a9693624f76dac79ad \
+ 91d3ab142f4932ea33dc82080dfaf915 \
+ 6c93fa5da74656c1281402c54098f006 \
+ 052ddfa2440dd436f0165baf98f4aad2 \
+ 31c7dc8334ab49ff68ba518a377a5d28 \
+ 30dc2625d287c6c72b905222fe26d3a5 \
+ 0498c4a11448bfc35dc7bb2caa64c753 \
+ db96b50050277bf05a3c68534bbb9586 \
+ 119f519a2b99e0212a8def5baed07c3f \
+ 09de9d01e7331ff3da11f58be8bef0df \
+ 1547d21772504aa6c844dc107eb3527e \
+ b4d52cc1c492fefa5e29c90dbe875c4a \
+ 00fdee6e7a7a635c074286b2925d0e15 \
+ 9ceb04bf70862f466ae9cab58f47744c \
+ d5806e699d67817275b601957b4c2af1 \
+ fc5c20c70efa42b8a4eed031ab9e4c28 \
+ 1288ae8374e8b35e382cd7ff5d598b4e \
+ 7bc5dd8d61a8c4722c16b4eac78b7960 \
+ 1ad27637c9130a32df4fafcae04d94d1 \
+ da089dd865fb0c8bb36b731ce7ae098d \
+ e334fcfe596d9bd0cbc67af57069ba51 \
+ bb3780dd283a2faedb95ca3efcbb1196 \
+ 6ebd5e3035aeea70f6e1287b75534754 \
+ bec88d1b4f607b8ec490a6653b335e63 \
+ 91bcde189ce0574861e43a4909e3777f \
+ 65d11d829b1d9b7a174b7a6f2616a261 \
+ 339e4b43ded1edefd670d7219f541d2b \
+ b58284cb8ce52b8de07e09f4f8fb9653 \
+ 2376de634160158ece40c4bc2ab3eb41 \
+ 73b177d6d000daaa8f05790414a887a3 \
+ 5b8f032f5b1f775ec3c35d9d6fe1aba9 \
+ dd7513efd3722e624cf5b4f57d67b2be \
+ a369d510325342310c7ab159bd181dae \
+ 9e876a38acd8262d97e9302ecb4e0f72 \
+ 523ad3a4f0c185bce7ae059a6819403b \
+ 7968284877e481b58df1569b68b5dc26 \
+ 8c8adde50f0a531c407c5b68ab928f0b \
+ cfbf635d826d2d14d6e71c9eb07b5c07 \
+ 34d06a94727c506c11e4710160e90f32 \
+ 233b17dfcf7e49ac791eef30b7f406e3 \
+ 7cf393d79b04cdacd2593cbbca888b8f \
+ 017691b927b405669e1139b054a35f4a \
+ 7cb99b00381f697eaf8a322ed3b8205c \
+ 5072812053c27c0ae184f10011158f47 \
+ 1baf62319b533f3d996993b82305e547 \
+ 4f3d8f9bfc552d9272e39c7ecbb9f026 \
+ f56c70fbae23f08fb0912284333f7851 \
+ 311ded6588844e072d3fb953a8f994da \
+ 69339b524a4c46ac25d2c27292689032 \
+ d20c2b0f45a62cc15c503ea610706a8f \
+ 3f265cbde7668f38c1229043475470a9 \
+ 4bfd23c349359d9c45430c723d03df97 \
+ ec7e437088dc741e6a0653e553abca4e \
+ 4e50e886c72204c268c15a3230001d71 \
+ 60ee7d4891a496a45390bede684f8770 \
+ 8cec8a187df7a7b971009a7693f60140 \
+ b95760e9133ba1bb456d0f0cef74c9a4 \
+ ae65c2e2e666c0e6183014d48b278604 \
+ 175eaad2a7b54e6cb9ee7acf38947b6d \
+ 0a37365dc5b55b1396cdeee0d19dbba0 \
+ 31654c3947cb364324c4beb563795897 \
+ 69f012ae935b27500554824ea32f921b \
+ 51d94dcb279853c9c9234e876296db15 \
+ 06263c33fd2df33c2ee92c1a0637d33d \
+ cbbaf61a6b68020a075b9c0ba517cb25 \
+ 2d823c47bd508f4dc290f9e33429e166 \
+ e2615fbbadc26d225d9fd59c87d00a91 \
+ 1d09c0d1f19fc18bb1c400100df17c0c \
+ ff8b9d868575e7e839185317e323304b \
+ 680fd25dca33636135c4645c3fbfa641 \
+ 9c6dee441715a22d4aeee5fe9cbadcf4 \
+ b8430042d23ce7fdf2a1da943528ee22 \
+ d18fcf0fa73d7bd81b2e63e0b8098869 \
+ c4a137262e612a1b51cc2726360fbce2 \
+ 07e2efdd9d67ad9bd620a8b5ee103170 \
+ 8b0935b5978afaca3c715f95ba56876f \
+ a1541495f4e0d9d59cd96e9e3295ed90 \
+ 175a64cf0f626bbec5d95a568ebf2b82 \
+ c4606f016cf94bd09d3fb7de2e5530ec \
+ 5b991ec1485866d41d82609d3e3a9424 \
+ 1225812fe4b23a8f301fb7e3025a97e4 \
+ 9804ba2a6ac5353c7a651d09ad899374 \
+ dea239f712e9cec1b626be988f1c2f59 \
+ 912c92bc179eb3813ff878d3480e4bbc \
+ 5d3abede75015805a812951286423d5c \
+ 585acef62e72bfa6bf712a966d968cc3 \
+ e96c794b09413a6385abede6b7df704b \
+ 49888ab19f65f553d1cfb359614cd101 \
+ 5647038b458d8b9be05730039d286435 \
+ e85e8b9ed2cc53268e9d92ea0282f277 \
+ 32acd71016240374c634eb6e82f34a6f \
+ 05855821689c617c12fd768dc05343df \
+ e5e4b468a89b0b96580a39b830ab4d99 \
+ 3e8485318d0b27381f27729eda5e5474 \
+ 375b76c357af2c73397647441c5e8cbb \
+ 2c4d7a88bd98a0d145b1890cc79e374e"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="rust-opt"
+MAINTAINER="danix"
+EMAIL="danix@danix.xyz"
diff --git a/ak820-ctl/doinst.sh b/ak820-ctl/doinst.sh
new file mode 100644
index 0000000..7d36484
--- /dev/null
+++ b/ak820-ctl/doinst.sh
@@ -0,0 +1,34 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+preserve_perms() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ if [ -e $OLD ]; then
+ cp -a $OLD ${NEW}.incoming
+ cat $NEW > ${NEW}.incoming
+ mv ${NEW}.incoming $NEW
+ fi
+ config $NEW
+}
+
+preserve_perms etc/rc.d/rc.ak820-lcd.new
+
+if [ -z "$ROOT" ] && [ -x /sbin/udevadm ]; then
+ /sbin/udevadm control --reload-rules >/dev/null 2>&1
+ /sbin/udevadm trigger --subsystem-match=usb --subsystem-match=hidraw >/dev/null 2>&1
+fi
+
+if [ -x /usr/bin/update-desktop-database ]; then
+ /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
+fi
diff --git a/ak820-ctl/rc.ak820-lcd b/ak820-ctl/rc.ak820-lcd
new file mode 100644
index 0000000..9a30f7e
--- /dev/null
+++ b/ak820-ctl/rc.ak820-lcd
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# /etc/rc.d/rc.ak820-lcd: show CPU/GPU temperature and time on the
+# Ajazz AK820 Pro TFT screen.
+#
+# To start at boot, make this script executable and add to /etc/rc.d/rc.local:
+# [ -x /etc/rc.d/rc.ak820-lcd ] && /etc/rc.d/rc.ak820-lcd start
+# and to /etc/rc.d/rc.local_shutdown:
+# [ -x /etc/rc.d/rc.ak820-lcd ] && /etc/rc.d/rc.ak820-lcd stop
+
+PIDFILE=/var/run/ak820-lcd.pid
+# Extra options for "ak820-ctl lcd", e.g. "--interval 5 --max-interval 60".
+LCD_OPTS=""
+
+running() {
+ [ -r $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null
+}
+
+start() {
+ if running ; then
+ echo "ak820-lcd is already running."
+ return
+ fi
+ echo "Starting ak820-lcd."
+ # ak820-ctl exits when the keyboard is unplugged or the upload fails, so
+ # restart it in a loop. setsid makes the loop a process group leader,
+ # which lets stop() kill the loop and ak820-ctl together. Progress
+ # output goes to /dev/null, errors to syslog.
+ setsid /bin/sh -c "while : ; do
+ /usr/bin/ak820-ctl lcd $LCD_OPTS 2>&1 >/dev/null | /usr/bin/logger -t ak820-lcd
+ sleep 30
+ done" </dev/null >/dev/null 2>&1 &
+ echo $! > $PIDFILE
+}
+
+stop() {
+ if running ; then
+ echo "Stopping ak820-lcd."
+ kill -- -$(cat $PIDFILE)
+ fi
+ rm -f $PIDFILE
+}
+
+case "$1" in
+ start) start ;;
+ stop) stop ;;
+ restart) stop ; sleep 1 ; start ;;
+ status)
+ if running ; then
+ echo "ak820-lcd is running."
+ else
+ echo "ak820-lcd is stopped."
+ exit 1
+ fi
+ ;;
+ *) echo "usage: $0 start|stop|restart|status" ; exit 1 ;;
+esac
diff --git a/ak820-ctl/slack-desc b/ak820-ctl/slack-desc
new file mode 100644
index 0000000..1564f34
--- /dev/null
+++ b/ak820-ctl/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+ak820-ctl: ak820-ctl (control software for the Ajazz AK820 Pro keyboard)
+ak820-ctl:
+ak820-ctl: CLI tool and GUI control panel for the Ajazz AK820 Pro keyboard.
+ak820-ctl: Sets lighting modes, colors and brightness, the sleep timer, and
+ak820-ctl: syncs the keyboard's TFT clock. Replaces the Windows-only vendor
+ak820-ctl: software.
+ak820-ctl:
+ak820-ctl: Homepage: https://github.com/gohv/EPOMAKER-Ajazz-AK820-Pro
+ak820-ctl:
+ak820-ctl:
+ak820-ctl: