This is a Rust application using GTK for the GUI and tray-icon for the system tray. It interacts with the rivalcfg CLI to control SteelSeries mice, and provides a system tray icon that represents the mouse battery level. The project is designed for easy Flatpak packaging and maximum compatibility with Wayland-based desktop environments and window managers.
As of version 1.2.0, this application uses tray-icon instead of libappindicator for better COSMIC desktop compatibility. If you're upgrading from an older version, the new implementation should provide improved tray icon rendering across different desktop environments including COSMIC.
For historical information about the AppIndicator implementation, see COSMIC_COMPATIBILITY.md.
- GTK GUI (Wayland-friendly)
- System tray icon shows battery level (using tray-icon library)
- Interacts with rivalcfg CLI
- Rust (latest stable)
- GTK development libraries
- rivalcfg (installed and in PATH)
- Install dependencies:
cargo build
On Debian/Ubuntu you may need the GTK development package and friends:
sudo apt install libgtk-3-dev librsvg2-bin python3-pip pipxOn Fedora/RHEL the package names are typically:
sudo dnf install gtk3-devel librsvg2-tools python3-pip- Run the application:
cargo run
Arch Linux (AUR):
yay -S rivalcfg-tray
# or
paru -S rivalcfg-trayDebian/Ubuntu:
Install dependencies first:
sudo apt install libgtk-3-0 librsvg2-bin python3-pip pipx
sudo pipx install rivalcfgDownload the .deb package from the assets below, then install with dependency resolution:
sudo apt install ./rivalcfg-tray_${{ steps.config.outputs.VERSION }}_amd64.debFedora/RHEL: Install dependencies first:
sudo dnf install gtk3 librsvg2-tools python3-pip
sudo pip3 install rivalcfgDownload the .rpm package from the assets below, then install with dependency resolution:
sudo dnf install ./rivalcfg-tray-${{ steps.config.outputs.VERSION }}-1.*.rpmFrom Source: Download the source tarball and build with cargo.
rivalcfg- SteelSeries mouse configuration toollibrsvg(orlibrsvg2-bin/librsvg2-tools) - For SVG to PNG conversion (providesrsvg-convert)- GTK libraries
- Extend the GUI as needed for more mouse controls.
- For the love of all that is beautiful, I need to make it look better.
This repository contains helper scripts and a GitHub Actions workflow to build release artifacts and distribution packages. Two important files are included in the repo:
build-and-prep.sh— a local/CI helper script that builds the release binary and prepares apkg/directory with installed files (binary, desktop entry, icons, appdata). This script is invoked by CI and can be run locally when preparing a release tarball..github/workflows/package-and-release.yaml— GitHub Actions workflow that automates building, creating a source tarball, and generating DEB/RPM/PKGBUILD packages as release assets.
rsvg-convert dependency
The runtime pipeline in this project uses rsvg-convert to render SVG icons to PNG files for the tray indicator. That executable is provided by different packages on different distributions, so packaging should declare the appropriate runtime dependency for the target platform:
- Arch Linux (PKGBUILD):
librsvg— addlibrsvgtodepends(thePKGBUILDalready does this). - Debian/Ubuntu (.deb):
librsvg2-bin— addlibrsvg2-binto the packageDepends(or usecargo-debmetadata to add it automatically). - Fedora/RHEL (.rpm):
librsvg2-tools— addRequires: librsvg2-toolsto the spec.
When creating packages, make sure the packaging step in package-and-release.yaml or build-and-prep.sh copies the assembled pkg/ into the appropriate package layout and that the generated package control files include the distribution-appropriate dependency on the provider of rsvg-convert.
If you want, I can update the CI YAML and build-and-prep.sh to explicitly set the correct Depends/Requires for the .deb and .rpm steps (e.g., inject librsvg2-bin into the deb control file and librsvg2-tools into the RPM spec) so the built packages will automatically list rsvg-convert as a runtime dependency.