A Wayland desktop shell with the bar, notifications, OSD, wallpaper, and device controls built in. Written in Rust with GTK4 and Relm4.
This is a standalone fork of wayle-rs/wayle with additional features (YAML config, pixel sizing, per-state icon/color cycling, per-workspace icons, custom toasts, a JSON-RPC widget socket, and animations).
Configure it in config.toml or config.yaml, through the wayle-settings GUI, or with the wayle config CLI.
- Bar with per-monitor layouts, groups, and CSS classes.
- Built-in modules — clock, battery, bluetooth, network, audio/volume, microphone, brightness, power, power profiles, system tray, storage, CPU/RAM, media player, audio visualizer (cava), notifications, weather, world clock, mail, screen recorder, idle inhibit, and Hyprland / Niri / Mango workspaces.
- Custom modules — back any bar widget with a shell command (poll or watch), with icon and color cycling by state (
icon-map/color-mapkeyed on the output'salt). - Per-workspace icons — give individual workspaces their own icon, shown even in label mode.
- Notifications, OSD, and custom toasts —
wayle toast "…"shows an on-screen toast (icon + label, or a progress bar) reusing the OSD styling. - Animations — configurable enter/exit transitions (fade / slide) for the OSD, toasts, and notification cards via
[animations]. - Pixel or scale sizing — every size accepts a scale multiplier or absolute pixels (
"24px"), HiDPI-correct. - TOML or YAML config with imports, live reload, and a published JSON schema for editor autocomplete.
- Scriptable — a JSON-RPC unix socket and CLI push live updates to any widget by id (
wayle widget update <id> …). - Wallpaper and dynamic theming — Matugen, Pywal, and Wallust palette extraction.
Guides and reference live in docs/:
- Getting started - Installation instructions
- Editing config - File layout, live reload, imports, CLI editing
- Bars and layouts - Per monitor layouts, groups, classes
- Themes - Color tokens, theme files
- Custom icons - Installing icons, icon sources
- Custom modules - Shell-backed bar modules
- CLI - Every subcommand
- Config reference - Full config documentation
Build from source (no prebuilt packages are published for this fork).
Arch (from source)
Install Rust via rustup, then the system libraries:
sudo pacman -S --needed git gtk4 gtk4-layer-shell gtksourceview5 \
libpulse fftw libpipewire systemd-libs gst-plugins-base clang base-develThe screen recorder also needs GStreamer plugins at runtime:
sudo pacman -S --needed gst-plugins-base gst-plugins-good gst-plugins-bad \
gst-plugins-ugly gst-libavRuntime daemons for the battery, bluetooth, network, power, and audio modules (skip any you don't need):
sudo pacman -S --needed bluez bluez-utils networkmanager upower \
power-profiles-daemon pipewire wireplumber pipewire-pulse
sudo systemctl enable --now bluetooth NetworkManager upower power-profiles-daemonDebian / Ubuntu
Ubuntu 24.04 LTS does not package libgtk4-layer-shell-dev. Use Ubuntu 25.04+ or Debian 13 (trixie).
Install Rust via rustup, then the system libraries:
sudo apt install git pkg-config cmake libgtk-4-dev libgtk4-layer-shell-dev \
libgtksourceview-5-dev libpulse-dev libfftw3-dev libpipewire-0.3-dev \
libudev-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
clang build-essentialThe screen recorder also needs GStreamer plugins at runtime:
sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libavRuntime daemons:
sudo apt install dbus-user-session bluez network-manager \
upower power-profiles-daemon pipewire-pulse wireplumber
sudo systemctl enable --now bluetooth NetworkManager upower power-profiles-daemonFedora
Requires Fedora 42 or later.
Install Rust via rustup, then the system libraries:
sudo dnf install git cmake pkgconf-pkg-config gtk4-devel gtk4-layer-shell-devel \
gtksourceview5-devel pulseaudio-libs-devel fftw-devel pipewire-devel \
systemd-devel gstreamer1-devel gstreamer1-plugins-base-devel clang gccThe screen recorder also needs GStreamer plugins at runtime:
sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good \
gstreamer1-plugins-bad-free gstreamer1-plugins-ugly-free gstreamer1-libavFedora Workstation already ships the runtime daemons. Minimal and Server installs need:
sudo dnf install pipewire-pulseaudio wireplumber NetworkManager bluez upower \
power-profiles-daemon
sudo systemctl enable --now bluetooth NetworkManager upower power-profiles-daemongit clone https://github.com/stubbedev/wayle
cd wayle
cargo install --path wayle
cargo install --path crates/wayle-settings
wayle icons setup
wayle panel startOn a different distro? See docs/guide/getting-started.md for the library-version reference.
The config file is at ~/.config/wayle/config.toml. Changes reload on save:
[bar]
location = "top"
scale = 1.25
[[bar.layout]]
monitor = "*"
left = ["dashboard"]
center = ["clock"]
right = ["volume", "network", "bluetooth", "battery"]
[modules.clock]
format = "%H:%M"Every field is documented in the config reference.
A Wayland compositor that implements the wlr-layer-shell protocol. Compositor-specific modules (such as workspaces) currently target Hyprland, Niri, and Mango; Sway support is planned.
Logo by @M70v.
MIT

