Azalea is a compositor agnostic desktop shell for Wayland written in Rust.
It runs on any compositor that implements wlroots' Layer Shell protocol.
- Hyprland
- Sway
- KWin
- Niri
- Wayfire
- Others
azalea: main applicationazalea-core: Core library (cli, config parser, sockets, window management, etc)azalea-log: Wrappers around glib's log functionsazalea-service: Service traitsazalea-derive: Derive macrosazalea-shell: Implementation of services and widgets
This project uses nix to package and test Azalea on different wayland compositors.
nix shell
cargo run daemon startnix runTesting azalea on different wayland compositors
# Automatized tests, screenshots are saved to ./result
nix build .#test
# Interactive tests
nix run .#test.driverInteractive
Note
This uses a lot of resources to spin up the VM
It's possible to build the project without nix, but you'd need to install all the dependencies yourself.
azalea-desktop-shell/nix/package.nix
Lines 17 to 40 in 554a7c7
This project uses gtk4 (relm4) and gtk4-layer-shell, but there are a few
other libraries that could have been used:
qt+layer-shell-qt(poor Rust support, but it works great on C++)iced+iced-layershell(pure Rust library, but relatively poor performance)
Here are a few useful resources for learning gtk4 and relm4.
There are also high level libraries made specifically for building desktop shell components:
- ags / astal (gtk4)
- quickshell (qt)
- Azalea (this project)
Here are some interesting protocols that are worth exploring:
- ext-session-lock-v1 (useful for lock screens, widely supported)
- ext-workspace-v1 (useful for workspace managers, but it's fairly recent, so support is limited)
