cat content/blog/2025/10/2025-10-06-hyprwat.md

Hyprwat: A Wayland native menu tool for Hyprland

// Oct 6, 2025

What is Hyprwat?


Hyprwat is a menu tool designed specifically for Hyprland and Wayland compositor. It allows users to create and manage customizable menus that can be accessed directly from the Hyprland environment.


It creates a popup menu at your cursor position where you can select from a list of options. It also has built-in support for WiFi network selection, audio input/output device selection, wallpapers, and custom menus. Custom menus can be defined using simple YAML configuration files.


The name is inspired by some javascript bashing video I saw many years ago. But, also like "What do you need?"... because it's a menu tool.


Right now you can:

  1. Create a list of key / value pairs that show up in a menu, the selected value is printed to stdout.
  2. Create an input menu, where the user can type in a value that is printed to stdout.
  3. Create password menu, where the user can type in a masked value that is printed to stdout.
  4. Select from available WiFi networks (dbus + NetworkManager).
  5. Select audio input/output devices (pipewire).
  6. Select wallpaper (hyprpaper).
  7. Create custom menus with a bunch of GUI controls using YAML configuration files.

What does it look like?


Integrate with powerprofilesctl to switch power profiles: Hyprwat Screenshot


Change wallpapers and lockscreen: Hyprwat Screenshot


Connect to wifi networks: Hyprwat Screenshot


Why?


I created hyprwat to fill a gap in the Wayland ecosystem for a simple, flexible, and visually appealing menu system that can be easily integrated into various use cases. Particularly, for waybar I needed a menu selection for wifi networks, power profiles, pavcontrol, etc.


Then, I wanted an easier way to switch wallpapers and lockscreen and found the existing solutions too hard, so I just added it into hyprwat. I'll keep doing this, it's fun.


My first attempt used SDL2/3 and ImGui, but I didn't like the menu being a window (there's no layer shell support in SDL). So I rewrote it using pure Wayland protocols and EGL for rendering.


If nothing else it's a pretty cool cpp wrapper for Wayland protocols.

_