- Go 100%
| .gitignore | ||
| CHANGELOG.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
emenu
Em∃nu - A circular command launcher for touch screens and mice, built with Go and Gio.
The idea is to have something like dmenu or rofi but with a simple touch-friendly circular interface, similar to old Android radial menus.
Features
- Circular Layout: Commands are arranged in a ring around a central button.
- Tree-like Structure: Supports nested submenus for organizing many commands.
- Touch Friendly: Large targets and intuitive navigation make it ideal for touch screens.
- Lightweight: Fast startup and minimal resource usage.
- Customizable: Colors and command trees can be configured via command-line flags.
Prerequisites
- Go 1.26 or later.
- Development libraries for your windowing system (see Gio's installation guide).
Linux Dependencies
On many Linux distributions (like postmarketOS, Alpine, Ubuntu), you need to install development packages for Wayland, X11, and Vulkan.
postmarketOS / Alpine:
doas apk add wayland-dev libxkbcommon-dev mesa-dev vulkan-headers libxcursor-dev
Ubuntu / Debian:
sudo apt install libwayland-dev libxkbcommon-dev libgles2-mesa-dev libx11-dev libvulkan-dev libxcursor-dev
Arch Linux:
sudo pacman -S wayland libxkbcommon mesa libx11 vulkan-headers libxcursor
Installation & Running
-
Clone the repository:
git clone https://g.arns.lt/zordsdavini/emenu cd emenu -
Build the application:
go build -o emenu . -
Run it:
./emenu
Configuration
You can customize emenu using flags:
-commands: JSON string defining the menu structure.-color: Hex color for command labels (default#1e90ffff).-root-color: Hex color for the root center circle (default#3c3c3cff).-cancel-color: Hex color for the close button (default#c82828ff).-back-color: Hex color for the back button (default#b43c3cff).-scale: UI scale factor (default2.5).-debug: Enable debug logging.-version: Print version and exit.
Example with custom commands:
./emenu -commands '[{"name": "Term", "exec": "st"}, {"name": "Web", "exec": "firefox"}]'
Example with nested submenus (children):
./emenu -commands '[
{"name": "Apps", "children": [
{"name": "Editor", "exec": "code"},
{"name": "Web", "exec": "firefox"}
]},
{"name": "System", "children": [
{"name": "Monitor", "exec": "gnome-system-monitor"},
{"name": "Settings", "exec": "gnome-control-center"}
]}
]'
Usage
- Drag the central circle over a command label to select it.
- Release to execute the command or enter a submenu.
- Drag to the top red circle with "X" to close the app.
- Drag and release back in the center to go back in submenus.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
₿: bc1qel3spnk8e2hsmkwn7fcm2drlyjms3ch8t2tek7
₥: 856UP5jqjHt2TjHo6HEvGEciGweLM5kM4ek6tNPUbk57QhJixqntdL5Wt6djPHm3V7D5Zr8FPc8i9ixWfWuSFb1D6u5GuTv
