A Wayland-native, game-inspired radial application launcher designed for Arch Linux + Hyprland. Built with Qt 6, QML, and C++20 for instant startup and minimal system resource usage.
- Pie-Slice Weapon Wheel UI: Weapon-select wheel inspired by games like Call of Duty and PUBG. Divided into equal angular segments rendered dynamically via Canvas with smooth hover scaling and color transitions.
- Freedesktop Desktop Entry Discovery: Automatically scans
$XDG_DATA_DIRSand~/.local/share/applicationsfor.desktopentries while filtering hidden/no-display entries and stripping desktop field codes (%f,%u,%F,%U, etc.). - System Icon Lookup & Fallback: Resolves icons via
QIcon::fromThemeand absolute file paths. If an icon cannot be resolved, falls back gracefully to a stylized colored circle with the application's initial letter (logging clear terminal warnings). - Centered Search & Fuzzy Matching: Search bar embedded directly inside the ring center. Typing immediately triggers relevance-scored fuzzy search filtering across all installed system applications.
- Hyprland Native Dispatch: Launches applications via
hyprctl dispatch exec -- <cleaned_exec>so custom Hyprland window rules are always respected. - Daemon-Client Architecture: Resident
radiqdbackground daemon holds a hiddenLayerShellQtoverlay window and communicates over a Unix socket (radiq-launcher.sock). The lightweightradiqctlCLI sends instantshow,hide, ortogglecommands. - JSON Configuration (
config.json): User configuration auto-created at~/.config/radiq/config.jsonon first run to customize pinned apps, ring radii, icon sizes, colors, font families, and animation speeds.
Ensure the following dependencies are installed on your system (e.g., via pacman -S on Arch Linux):
- CMake (v3.21+)
- C++20 Compiler (
gccorclang) - Qt 6 (
qt6-base,qt6-declarative,qt6-5compat) - LayerShellQt (
layer-shell-qt) - Hyprland (or any Wayland compositor supporting LayerShell)
yay -S radiq
# or
paru -S radiq# Clone the repository
git clone https://github.com/israrkhan-cys/radiq.git
cd radiq
# Configure the build
cmake -B build -S .
# Build radiqd daemon and radiqctl client
cmake --build buildThe resulting binaries will be placed in:
build/src/radiqd(Daemon)build/tools/radiqctl/radiqctl(CLI Tool)
Before wiring it into exec-once, it's worth running it once by hand to
confirm everything works on your system.
If installed via AUR:
radiqd &
radiqctl toggleIf built from source:
./build/src/radiqd &
./build/tools/radiqctl/radiqctl toggleAdd these lines to ~/.config/hypr/hyprland.conf:
If installed via AUR (radiqd/radiqctl are already on your PATH):
exec-once = radiqd
bind = SUPER, A, exec, radiqctl toggleIf built manually from source, use the full path to your build output:
exec-once = /full/path/to/radiq/build/src/radiqd
bind = SUPER, A, exec, /full/path/to/radiq/build/tools/radiqctl/radiqctl toggleThen reload Hyprland:
hyprctl reloadPress Super + A to summon the wheel.
On daemon startup, radiqd checks for a JSON configuration file at:
~/.config/radiq/config.json
If the file does not exist, a default starter configuration is automatically created.
{
"pinnedApps": [
"firefox.desktop",
"Alacritty.desktop",
"org.kde.dolphin.desktop",
"code.desktop",
"discord.desktop",
"gimp.desktop",
"btop.desktop",
"com.obsproject.Studio.desktop"
],
"ringOuterRadius": 230,
"ringInnerRadius": 100,
"iconSize": 56,
"wedgeColor": "#CC1F2335",
"wedgeHighlightColor": "#2D3F76",
"borderColor": "#414868",
"borderHighlightColor": "#7AA2F7",
"animationDurationMs": 130,
"fontFamily": "Inter, Roboto, sans-serif",
"hotkeyDisplay": "SUPER + A",
"blurAmount": 10
"scrimColor": "#CC0F0F15"| Key | Type | Description |
|---|---|---|
pinnedApps |
Array of strings | .desktop file IDs to pin on the radial wheel slots in order. |
ringOuterRadius |
Number (px) | Outer radius of the radial wedge ring. |
ringInnerRadius |
Number (px) | Inner radius of the radial wedge ring. |
iconSize |
Number (px) | Size of application icons within the slots. |
wedgeColor |
Hex String | Fill color for unselected radial slots. |
wedgeHighlightColor |
Hex String | Fill color for selected/hovered radial slots. |
borderColor |
Hex String | Border stroke color for unselected slots. |
borderHighlightColor |
Hex String | Border stroke color for selected/hovered slots. |
animationDurationMs |
Number (ms) | Duration for scale and color transitions. |
fontFamily |
String | Font family stack for text labels. |
scrimColor |
Hex String | Background dimming behind the wheel (alpha channel controls transparency). |
if you liked kindly start the repo and vote it on AUR Thankuu
Distributed under the MIT LICENSE.

