A fast, fuzzy menu selector for desktop and terminal environments, inspired by dmenu and rofi.
- GUI Mode: Desktop interface using Fyne framework
- Terminal Mode: Command-line interface for headless environments
- Fuzzy Search: Intelligent matching with sahilm/fuzzy library
- Configurable: YAML config files, environment variables, and CLI flags
- Menu State: Caching and persistence of selections
- Single Instance: Per-menu ID instance enforcement
git clone https://github.com/hamidzr/gmenu.git
cd gmenu
just build
The binary will be available at bin/gmenu
.
# GUI mode (default)
echo -e "option1\noption2\noption3" | gmenu
# Terminal mode
echo -e "option1\noption2\noption3" | gmenu --terminal
gmenu uses a hierarchical configuration system:
- CLI flags (highest priority)
- Environment variables (
GMENU_
prefix) - YAML config files (lowest priority)
Config files are located at:
~/.config/gmenu/config.yaml
~/.gmenu/config.yaml
Use menu IDs to maintain separate state for different use cases:
echo -e "file1\nfile2\nfile3" | gmenu --menu-id files
echo -e "action1\naction2\naction3" | gmenu --menu-id actions
# Build main binary
just build
# Build for multiple platforms
just build-all
# Install dependencies and tools
just setup
# Clean build artifacts
just clean
# Run all tests
just test
# Run specific tests
go test ./core/...
# Lint code
just lint
# Format code
just fmt
# Run all checks (format, lint, test)
just check
- CLI Layer (
internal/cli/
): Command-line interface - Core (
core/
): Application logic and menu management - Rendering (
render/
): UI components and theming - Configuration (
internal/config/
,model/
): Config management - Storage (
store/
): State persistence
[Add your license here]