Fast like the wind, a WINdows DMENU-like launcher
compressed-screencast.mp4
- Fast application launcher via hotkey (Win+Space is default)
- Vim-like navigation (hjkl) alongside arrow keys
- Scans Windows Start Menu shortcuts automatically
- Supports custom commands via configuration
- Key combination commands - trigger keyboard shortcuts from the menu
- Background daemon with named pipe communication
- Configurable appearance and behavior (thanks to JerwuQu's work on the original version of wlines)
WindMenu includes a GUI monitor to check the status of both the WindMenu daemon and the WLines daemon:
- Real-time status monitoring of both daemons
- Clean, native Windows GUI
- Displays Process IDs (PIDs) when daemons are running
- Lists all PIDs when multiple instances are detected (we don't want that)
- Interactive buttons to start/restart/kill processes
Build all components:
cargo build --release
Build specific components:
# Main windmenu daemon
cargo build --release --bin windmenu
# Status monitor GUI
cargo build --release --bin windmenu-monitor
Ensure both daemons are running and press WIN+SPACE
to start the launcher.
You can check the daemons' status using windmenu-monitor. If you find an inactive daemon, you can start it from windmenu-monitor itself.
After compiling, just:
.\target\release\windmenu-monitor.exe
Example display:
● Windmenu: Active (PID: 12345)
- Single instance● Windmenu: Active (2 instances: 12345, 67890)
- Multiple instances● Windmenu: Inactive
- No processes running
The monitor includes clickable buttons for process management.
- Buttons are automatically enabled/disabled based on the current process state.
- Buttons darken and shift slightly when pressed
- Inner shadow effect during press
- Immediate visual response for better user experience
The monitor provides a visual confirmation that both windmenu and wlines daemons are running properly and lets you stop/start them easily.
This directory contains the NSIS installer script and build tools for creating a Windmenu installer package.
- NSIS (Nullsoft Scriptable Install System)
- Rust toolchain
The build process is fully automated and handles all dependencies:
On Windows (PowerShell):
.\build-installer.ps1
On Linux/WSL (Bash):
./build-installer.sh
Both scripts will:
- Build Rust projects
- Download dependencies automatically if missing:
wlines-daemon.exe
from wlines releases
- Create the NSIS installer with all components bundled
The installer is completely self-contained and includes:
windmenu.exe
- Main windmenu daemonwindmenu-monitor.exe
- GUI monitor applicationwlines-daemon.exe
- External wlines daemon dependency
The installer provides several installation components:
- Core Files (required): Main binaries, configuration, and dependencies
- Start Menu Shortcuts: Creates shortcuts in the Start Menu, including:
- Windmenu Monitor (primary interface for status checking and daemon management)
- Uninstall
- Desktop Shortcut: Creates a desktop shortcut for Windmenu Monitor
- Auto-startup Options
Choose one of the following startup methods:
- Registry Run (Suggested)
- Task Scheduler
- Current User Startup Folder
- All Users Startup Folder (affects all users and requires permissions)
WindMenu uses static linking to minimize external dependencies. No additional runtime libraries are required on modern Windows 10/11 systems. (Should theoretically work on any Windows version from XP onward, though it has only been tested on Windows 10/11)
The installer defaults to installing in %LOCALAPPDATA%\windmenu
, but users can choose a different location during installation.
After installation, the following structure will be created:
%LOCALAPPDATA%\windmenu\
├── windmenu.exe
├── windmenu-monitor.exe
├── wlines-daemon.exe
└── uninstall.exe
The installer creates an uninstaller that:
- Removes all installed files and created directories
- Cleans up all startup methods (Registry, Task Scheduler, Startup folders)
- Removes all shortcuts and registry entries
- Can be accessed through:
- Control Panel → Programs and Features
- Start Menu → Windmenu → Uninstall
- Directly running
uninstall.exe
from the installation directory
The uninstaller ensures complete removal regardless of which startup method was selected during installation.
For manual verification, check the installation directory (typically %LOCALAPPDATA%\windmenu\
or your custom location). The application is portable, so all binaries and configurations reside within this directory. Simply deleting it will remove all traces from your system, as no other files are stored elsewhere.
N.B. The uninstaller removes only installed files, keeping any manually edited configs. These remain for future reinstalls. Delete them manually if needed.
WindMenu supports executing key combinations as commands!
Add them to your windmenu.toml
:
[[commands]]
name = "alt+x key combo"
keys = ["ALT", "X"]
[[commands]]
name = "win+d show desktop"
keys = ["WIN", "D"]
[[commands]]
name = "switch virtual desktop"
keys = ["WIN", "CTRL", "RIGHT"]
ALT
- Alt keyCTRL
orCONTROL
- Control keySHIFT
- Shift keyWIN
orWINDOWS
- Windows key
TAB
- Tab keyESC
orESCAPE
- Escape keySPACE
- Space barENTER
- Enter/Return key
F1
,F2
,F3
, ...,F12
- Function keys
LEFT
,UP
,RIGHT
,DOWN
- Arrow keys
0
,1
,2
, ...,9
- Number keys
COMMA
or,
- Comma keyPERIOD
or.
- Period keySEMICOLON
or;
- Semicolon keySLASH
or/
- Forward slash keyBACKSLASH
or\
- Backslash keyQUOTE
or'
- Single quote keyBACKTICK
or`
- Backtick keyMINUS
or-
- Minus/hyphen keyEQUALS
or=
- Equals keyLBRACKET
or[
- Left bracket keyRBRACKET
or]
- Right bracket key
A
,B
,C
, ...,Z
- Letter keys (case insensitive)
When you select a key combination command from the menu, WindMenu will:
- Press all the specified keys down in order
- Release all the keys in reverse order
- This simulates the key combination being pressed
You can mix regular commands and key combinations in the same configuration:
# Regular command
[[commands]]
name = "open terminal"
args = ["wt"]
# Key combination command
[[commands]]
name = "switch to desktop 1"
keys = ["WIN", "CTRL", "1"]
The menu will display both types of commands and execute them appropriately based on their configuration.