A simplistic Linux radial menu for the lazy.
- Radial menu interface - Quick access menu at cursor position
- Nested submenus - Organize items hierarchically
- Hotkey support - Keyboard shortcuts with context-aware mapping
- Theme customization - Custom colors, fonts, and sizes
- Icon support - SVG/PNG icons for menu items
- Smooth animations - Configurable animation speed
NOTE: RADUX ONLY SUPPORTS X11. It is up to the user to add exceptions for floating
cd src/cpp
cmake -B build
cmake --build buildThe binary will be automatically copied to bin/radux-menu in the project directory (I felt like having a more specific name like this, but you may change it just to radux like I did).
Download the binary :)
Radux searches for configuration in this order:
~/.config/radux/config.yaml(primary)./config.yaml(fallback, relative to current directory)
You can also specify a config file explicitly:
radux-menu --config /path/to/config.yaml# Geometry
radius: 120 # Distance from center to outer edge
inner-radius: 50 # Center circle radius
# Animation
animation-speed: 500 # Duration in milliseconds (or multiplier like "1.5x")
# Auto-close (optional)
auto-close-milliseconds: 5000 # Close after 5 seconds of inactivity (0 = disabled)
# Theme Colors
hover-color: "#4a90d9"
background-color: "#2c2c2c"
border-color: "#666666"
font-color: "#ffffff"
center-color: "#1a1a1a"
font-size: 16
# Menu Items
items:
- label: "Browser"
command: "brave"
description: "Web Browser"
hotkey: "b"
priority: 5
- label: "Terminal"
command: "st"
description: "Terminal\\nwith tmux"
hotkey: "t"
priority: 8
- label: "Development"
hotkey: "d"
priority: 7
background-color: "#2a3a2a" # Custom color for this item
submenu:
- label: "VSCode"
command: "code"
hotkey: "Ctrl+Shift+V"
priority: 10
- label: "Neovim"
command: "st -e nvim"
hotkey: "Ctrl+Shift+N"| Attribute | Type | Required | Description |
|---|---|---|---|
label |
string | Yes | Display text for the item |
command |
string | Yes* | Shell command to execute (not for submenus) |
description |
string | No | Tooltip text (supports \n for newlines) |
| Attribute | Type | Default | Description |
|---|---|---|---|
icon |
string | - | Path to SVG/PNG icon file |
priority |
int (0-10) | 0 | Button size (2% per priority level) |
background-color |
hex | global | Custom background color |
hover-color |
hex | global | Custom hover color |
font-color |
hex | global | Custom text color |
| Attribute | Type | Default | Description |
|---|---|---|---|
hotkey |
string | - | Key combination (e.g., "b", "Ctrl+1") |
notify |
boolean | false | Send command stdout to notification |
To create a submenu, omit command and add submenu:
- label: "Parent Item"
description: "Contains sub-items"
hotkey: "p"
submenu:
- label: "Child 1"
command: "command1"
- label: "Child 2"
command: "command2"Color Inheritance: Submenu items inherit colors from their parent item if not overridden.
Hotkeys support modifier combinations:
- Single key:
hotkey: "b" - With modifiers:
hotkey: "Ctrl+1" - Multiple modifiers:
hotkey: "Ctrl+Shift+V"
Supported modifiers:
CtrlorControlAltShiftSuper,Win, orMeta
Hotkeys are context-specific - the same hotkey can be used in different menus:
items:
- label: "Development"
hotkey: "d"
submenu:
- label: "VSCode"
hotkey: "v" # "v" opens VSCode when in Development menu
command: "code"
- label: "Design"
hotkey: "d" # Same hotkey, different menu
submenu:
- label: "Figma"
hotkey: "v" # "v" opens Figma when in Design menu
command: "figma"Place your icons in ~/.config/radux/icons/ (or any path):
items:
- label: "Browser"
icon: "~/.config/radux/icons/brave.svg"
command: "brave"Supported formats:
- SVG (recommended)
- PNG
- Any image format supported by GdkPixbuf
When an item in the root menu has been used 10+ times:
- It gets highlighted when the menu opens
- Press
Enterto execute it quickly - The highlight clears when you interact with other items
| Key | Action |
|---|---|
Escape |
Go back / Close menu |
Enter |
Execute hovered or most-used item |
| Hotkey | Execute associated item |
# Show help
radux-menu --help
# Open at mouse position
radux-menu
# Open at specific coordinates
radux-menu 500 300
# Use specific config file
radux-menu --config /path/to/config.yaml
# Use inline configuration
radux-menu --cli "Terminal:st:Terminal;Brave:brave:Browser"radius: 120
inner-radius: 50
items:
- label: "Firefox"
command: "firefox"
hotkey: "f"
- label: "Terminal"
command: "st"
hotkey: "t"radius: 150
inner-radius: 60
font-size: 18
# Global theme
hover-color: "#4a90d9"
background-color: "#2c2c2c"
items:
- label: "Development"
hotkey: "d"
icon: "~/.config/radux/icons/dev.svg"
background-color: "#1a3a1a"
submenu:
- label: "VSCode"
icon: "~/.config/radux/icons/vscode.svg"
command: "code"
hotkey: "v"
notify: true
- label: "Terminal"
icon: "~/.config/radux/icons/terminal.svg"
command: "st -e tmux"
hotkey: "t"items:
- label: "Check Updates"
command: "checkupdates"
notify: true # Sends output to desktop notification
- label: "System Info"
command: "neofetch"
notify: true- Check config file location:
~/.config/radux/config.yaml - Validate YAML syntax:
yamllint ~/.config/radux/config.yaml - Check for syntax errors in terminal output
- Ensure hotkey is defined in config
- Check for conflicting shortcuts in your WM/DE
- Verify icon path is correct
- Check file permissions
- Ensure image format is supported (SVG/PNG)
- The menu uses X11 for screen detection
- Check xdotool is installed:
which xdotool
