Hypr-wallpicker a standalone hexagonal wallpaper selector... for Both Wayland and X11
- Hexagonal grid UI: It calculates and renders a proper hexagonal grid for wallpaper thumbnails.
- Animations: It provides scale and brightness transitions on mouse hover.
- Auto-caching: It automatically resizes, crops, and applies a hex-mask to high-res wallpapers for fast subsequent loads.
- Transition: Integrates with
awwwto trigger ripple transitions directly from the absolute screen coordinates of the clicked hex tile. - Color extraction support: It supports
matugenupon selection to dynamically adjust your system theme color based on the chosen wallpaper.
By utilizing raw C and Raylib, it bypasses the overhead and bloated dependencies typical of modern JS/Electron UI frameworks.
This tool adheres to the Unix philosophy—it handles the visual selection of wallpapers and delegates the actual desktop drawing to Wayland daemons (awww) and theming engines (matugen) via standard shell commands.
To build hypr-wallpicker, you need:
gccraylib
hypr-wallpicker links against your system raylib library.
hypr-wallpicker itself only handles wallpaper selection and thumbnail caching.
When a wallpaper is selected, it:
- checks for an optional user hook at
~/.config/hypr-wallpicker/apply-wallpaper.sh - if no hook is present, it falls back to the built-in apply behavior
The built-in fallback is currently Hyprland/Wayland-oriented.
If no user hook is installed, the built-in fallback may use awww (optional) for animated wallpaper transitions if available.
The built-in fallback is intentionally kept bare-minimum. To use color extraction or reload desktop components, please configure a custom hook.
If you use the provided Wayland example hook (designed as a tutorial template), you can easily uncomment sections to enable:
awww(required) — apply wallpaper + transitionmatugen(optional) — generate colors from the selected wallpaperhyprctl(optional) — reload Hyprlandmakoctl(optional) — reload Mako notificationsswaync-client(optional) — reload SwayNC
The provided Wayland example hook requires
awww, but it can be replaced by other utils such ashyprpaperin your own shell script.
If you use the provided X11 example hook, the exact runtime tools depend on your desktop setup and how you choose to manage wallpapers, theming, and bar reloads.
Common options include:
i3wm(required)fehornitrogen— set wallpaper on X11wal/pywal(optional) — generate colors from the selected wallpaperi3-msg(optional) — reload or restart i3-managed componentspolybar-msg(optional) — reload Polybar if used- custom user scripts for compositor, bar, or theme reloads
The X11 example hook is a starting point and may need adjustments depending on your environment. (only supported environment right now is i3)
Build the release binary:
makeInstall the binary to /usr/local/bin:
sudo make installRemove the installed binary:
sudo make uninstallPerform a clean rebuild and reinstall:
sudo make reinstallRun with the default wallpaper directory at ~/Pictures/wallpapers:
wallpickerRun with a custom wallpaper directory:
wallpicker /path/to/wallpapersThe first time you use this program, it will generate cached files of wallpapers, which may take a short time. Please be patient.
Example hook scripts are provided in:
scripts/ in project root.
To use one, copy it to the runtime hook path expected by hypr-wallpicker:
~/.config/hypr-wallpicker/apply-wallpaper.sh
Wayland / Hyprland example:
mkdir -p ~/.config/hypr-wallpicker
cp scripts/apply-wallpaper-wayland.example.sh ~/.config/hypr-wallpicker/apply-wallpaper.sh
chmod +x ~/.config/hypr-wallpicker/apply-wallpaper.shX11 / i3 example:
mkdir -p ~/.config/hypr-wallpicker
cp scripts/apply-wallpaper-x11.example.sh ~/.config/hypr-wallpicker/apply-wallpaper.sh
chmod +x ~/.config/hypr-wallpicker/apply-wallpaper.shIn Hyprland, please add this in ~/.config/hypr/hyprland.conf:
windowrule {
name = wall-paper-picker
match:class = ^(wallpicker)$
fullscreen = true
center = true
stay_focused = true
}

