Skip to content

weversonl/gnome-quick-share

Repository files navigation

GnomeQS

https://weversonl.github.io/gnome-quick-share/

GnomeQS is a GNOME-first Quick Share client for Linux.

It is a Rust-based port built specifically with GNOME in mind, using GTK4 and libadwaita for the main application and a separate tray helper for Linux environments that still rely on AppIndicator-style integration.

Why This Project Exists

GnomeQS was created as a modern GNOME-oriented continuation of ideas that were already explored in rQuickShare.

That project was extremely important to the existence of this one and deserves explicit credit:

Many implementation and product decisions in GnomeQS were informed by the work behind rQuickShare.

What GnomeQS Includes

  • a GTK4 + libadwaita desktop application
  • a Rust core library for discovery, transfers, and protocol handling
  • a separate Linux tray helper
  • local packaging for Flatpak, Arch, Debian, and RPM-based workflows

Tech Stack

  • Rust 2024 edition
  • GTK4
  • libadwaita
  • gettext-rs
  • Protocol Buffers via prost
  • mDNS discovery via mdns-sd
  • Ayatana AppIndicator for the tray helper
  • Meson as the build and install system

Project Structure

Platform Scope

GnomeQS is intentionally built for:

  • Linux
  • GNOME
  • modern GTK/libadwaita environments

The primary target is a GNOME desktop running on Wayland, although X11 or non-GNOME setups may still work depending on the rest of the environment.

Limitations

Before using or packaging the application, keep these limits in mind:

  • Linux-only
  • GNOME-first, not a generic cross-platform desktop app
  • the tray implementation is Linux-specific
  • tray behavior depends on desktop shell support and AppIndicator compatibility
  • Flatpak builds intentionally ship without the tray helper
  • desktop environments outside GNOME are not the primary support target

In short: this project is designed to feel right on GNOME first, and broad desktop portability is a secondary concern.

Firewall Notice

If your system uses a firewall, you should strongly consider using a fixed listening port instead of a random one.

Why this matters:

  • GnomeQS needs inbound local network connectivity to receive transfers
  • if the listening port changes constantly, firewall rules become harder to manage
  • a fixed port makes it much easier to create a permanent allow rule

Recommended approach:

  • choose a fixed port in the application settings
  • allow that port in your firewall
  • make sure the rule applies to your local network profile

Examples of what to check:

  • ufw
  • firewalld
  • raw iptables / nftables
  • router or host-level filtering in stricter network setups

If discovery works but transfers do not start, firewall rules are one of the first things to verify.

Local Development Requirements

You need a Linux system with the Rust toolchain, Meson, and GNOME-related development packages.

Typical requirements:

  • Rust and Cargo
  • Meson (>= 1.0) and Ninja
  • GTK4 development files
  • libadwaita development files
  • GTK3 development files
  • glib2
  • gettext
  • libayatana-appindicator

Arch Linux Example

sudo pacman -S rust cargo meson ninja gtk4 libadwaita gtk3 libayatana-appindicator glib2 gettext

Running Locally

For day-to-day development, cargo run still works as before — schemas and locales are compiled on the fly by build.rs:

cargo run -p gnomeqs

If an old instance is still alive and holding the port or tray helper:

pkill -f gnomeqs-tray
pkill -f target/debug/gnomeqs

Then start it again:

cargo run -p gnomeqs

Building a Release with Meson

Meson is used for official release builds and all packaging workflows. It compiles both binaries, installs data files, schemas, icons, and locales to the correct system paths.

meson setup --buildtype=release build
ninja -C build
sudo meson install -C build

To install to a custom prefix (e.g. for testing without root):

meson setup --prefix="$HOME/.local" --buildtype=release build
ninja -C build
meson install -C build

Uninstallation

To uninstall the application and clean up system caches:

sudo ninja -C build full-uninstall

Or using the standard uninstall (which might not update all caches):

sudo ninja -C build uninstall

For a clean rebuild:

rm -rf build
meson setup --buildtype=release build
ninja -C build

Packaging

Flatpak

Build the Flatpak bundle:

./packaging/flatpak/build.sh

Output:

  • packaging/out/flatpak/io.github.weversonl.GnomeQuickShare.flatpak

Install locally:

flatpak install --user packaging/out/flatpak/io.github.weversonl.GnomeQuickShare.flatpak

Run:

flatpak run io.github.weversonl.GnomeQuickShare

Arch Linux / PKGBUILD

GnomeQS is available on the AUR as gnome-quick-share.

Install it with yay:

yay -S gnome-quick-share

Or by cloning the AUR package and building it manually:

git clone https://aur.archlinux.org/gnome-quick-share.git
cd gnome-quick-share
makepkg -si

To build the package locally from this repository:

cd aur
makepkg -f

Debian / Ubuntu

Build a local .deb:

./packaging/deb/build.sh

Output:

  • packaging/out/deb/*.deb

Install locally:

sudo apt install ./packaging/out/deb/*.deb

If you prefer dpkg, you may need an extra dependency resolution step afterward:

sudo dpkg -i packaging/out/deb/*.deb
sudo apt-get install -f

Typical extra local tooling on Debian-based systems:

  • dpkg-dev
  • meson, ninja-build
  • gettext
  • Rust toolchain
  • GTK4 development packages / libraries
  • libadwaita development packages / libraries
  • GTK3 development packages / libraries
  • Ayatana AppIndicator development packages / libraries
  • libglib2.0-dev

Fedora / RHEL / Other RPM-Based Systems

Build a local RPM:

./packaging/rpm/build.sh

Output:

  • packaging/out/rpm/rpmbuild/RPMS/**/*.rpm

Install locally with dependency resolution:

sudo dnf install packaging/out/rpm/rpmbuild/RPMS/*/*.rpm

Typical extra local tooling on RPM-based systems:

  • rpm-build
  • meson, ninja-build
  • gettext
  • Rust toolchain
  • GTK4 development packages / libraries
  • libadwaita development packages / libraries
  • GTK3 development packages / libraries
  • Ayatana AppIndicator development packages / libraries
  • glib2-devel

Notes

  • The main app and the tray helper are separate binaries by design.
  • The tray helper exists because GTK4/libadwaita and Linux tray integration have different constraints.
  • Flatpak intentionally excludes the tray helper.
  • Packaging choices prioritize GNOME behavior and Linux desktop integration over broad platform reach.
  • cargo run still works for development; Meson is only required for release builds and packaging.

License

AGPL-3.0

About

GnomeQS is a GNOME/GTK4 Quick Share client for Linux.

Topics

Resources

License

Stars

Watchers

Forks

Contributors