Em∃nu - app to call on screen round menu to do some commands. The idea is to have something like dmenu but with simple touch action
Find a file
2026-04-22 18:17:55 +03:00
.gitignore basic layout 2026-04-20 11:55:47 +03:00
CHANGELOG.md added scale flag 2026-04-22 18:17:55 +03:00
go.mod basic layout 2026-04-20 11:55:47 +03:00
go.sum basic layout 2026-04-20 11:55:47 +03:00
LICENSE Initial commit 2026-04-19 06:43:08 +00:00
main.go added scale flag 2026-04-22 18:17:55 +03:00
README.md added scale flag 2026-04-22 18:17:55 +03:00

emenu

Version

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

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

  1. Clone the repository:

    git clone https://g.arns.lt/zordsdavini/emenu
    cd emenu
    
  2. Build the application:

    go build -o emenu .
    
  3. 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 (default 2.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