Wallpaper-driven dynamic theming for Hyprland: pick a wallpaper, and the whole desktop's color scheme updates to match — Waybar, Hyprland borders, Rofi, wlogout, and Alacritty.
Part of my broader setup — see arch-hyprland-rice for the rest (Hyprland config, terminal, shell, file manager).
Same terminal and bar, two different wallpapers — everything down to the window border color comes from whatever image is currently set as the wallpaper.
| Before | After |
|---|---|
![]() |
![]() |
waypaper (picker) → matugen (extract palette) → templates render into:
waybar/colors.css
hypr/colors.lua
rofi/*.rasi
wlogout/colors.css
alacritty/colors.toml
→ waybar reloaded (SIGUSR2)
→ hyprctl reload
- waypaper is the GUI wallpaper
picker (backed by
swww). Its own custom rofi grid, built bymatugen/wallpaper.sh, generates thumbnails and lets me pick a wallpaper via rofi instead. - Whichever way the wallpaper is chosen, matugen
runs against it (
matugen image <path> --type scheme-vibrant) and extracts a Material You color palette from the image. - matugen renders that palette through the templates in
matugen/templates/and writes the results straight into the config directories of Waybar, Hyprland, Rofi, wlogout, and Alacritty (seematugen/config.tomlfor the input → output mapping). matugen/refresh.shties it together: runs matugen, thenhyprctl reloadandpkill -SIGUSR2 waybarso everything picks up the new colors live, no restart needed.greetd/regreet-bg.shextends the same idea to the login screen: it grabs whatever wallpaper is currently active, blurs it, and drops it where regreet reads its background from — so the greeter matches the desktop instead of showing a static image.
waypaper/ Wallpaper picker config + the script that applies a theme to
whatever waypaper currently has selected
matugen/ Palette generation config, templates, and the refresh/wallpaper
picker scripts
matugen/templates/ Input templates matugen renders (waybar, hyprland, rofi,
wlogout, alacritty)
waybar/ Bar config + a snapshot of what a generated colors.css looks
like (colors.generated-example.css — this file gets overwritten
by matugen at runtime, it's here just to show the output shape)
hypr/ The script that ties waypaper + matugen together on wallpaper
change, plus a generated-colors example (same idea as above)
rofi/ Scripts behind the Waybar power and Bluetooth icons — themed via
the rofi templates above (rofi-colors.rasi → powermenu.rasi)
greetd/ greetd + regreet setup script, plus the script that syncs the
login screen background to the current wallpaper
Files named *.generated-example.* are checked in only as a reference for what
matugen produces — in a live setup they're overwritten every time the wallpaper
changes and wouldn't normally be committed.
$mainMod + Win Hyprland runsmatugen/wallpaper.sh— opens the custom rofi wallpaper grid, and applies the new palette on selection.hypr/wallpaper.shdoes the same against whatever waypaper currently has set, useful for re-applying on login (waypaper --restore).

