https://github.com/wayle-rs/wayle-services
Reactive system service crates for Linux.
https://github.com/wayle-rs/wayle-services
bluez cava hyprland mpris network-manager networkmanager notification-service notifications pipewire power-profiles-daemon pulseaudio rust sysinfo systray upower wallpaper weather
Last synced: 24 days ago
JSON representation
Reactive system service crates for Linux.
- Host: GitHub
- URL: https://github.com/wayle-rs/wayle-services
- Owner: wayle-rs
- License: mit
- Created: 2026-03-29T22:57:31.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2026-05-12T05:08:18.000Z (about 1 month ago)
- Last Synced: 2026-05-12T06:28:46.593Z (about 1 month ago)
- Topics: bluez, cava, hyprland, mpris, network-manager, networkmanager, notification-service, notifications, pipewire, power-profiles-daemon, pulseaudio, rust, sysinfo, systray, upower, wallpaper, weather
- Language: Rust
- Homepage:
- Size: 890 KB
- Stars: 6
- Watchers: 0
- Forks: 9
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# wayle-services
[](https://github.com/wayle-rs/wayle-services/actions)
[](https://github.com/wayle-rs/wayle-services/blob/master/LICENSE)
Reactive system service crates for Linux desktops. Each service exposes its state as [`Property`](https://docs.rs/wayle-core/latest/wayle_core/struct.Property.html) fields you can `.get()` or `.watch()` for changes.
## Services
| Crate | Description |
|-------|-------------|
| [wayle-audio](https://docs.rs/wayle-audio) | PulseAudio devices and streams |
| [wayle-battery](https://docs.rs/wayle-battery) | Battery monitoring via UPower |
| [wayle-bluetooth](https://docs.rs/wayle-bluetooth) | Bluetooth device management via BlueZ |
| [wayle-brightness](https://docs.rs/wayle-brightness) | Backlight control for internal displays |
| [wayle-cava](https://docs.rs/wayle-cava) | Real-time audio frequency visualization |
| [wayle-hyprland](https://docs.rs/wayle-hyprland) | Hyprland compositor state and events |
| [wayle-media](https://docs.rs/wayle-media) | MPRIS media player control |
| [wayle-network](https://docs.rs/wayle-network) | WiFi and wired network management |
| [wayle-notification](https://docs.rs/wayle-notification) | Desktop notification daemon |
| [wayle-power-profiles](https://docs.rs/wayle-power-profiles) | Power profile switching |
| [wayle-sysinfo](https://docs.rs/wayle-sysinfo) | CPU, memory, disk, and network metrics |
| [wayle-systray](https://docs.rs/wayle-systray) | System tray via StatusNotifier |
| [wayle-wallpaper](https://docs.rs/wayle-wallpaper) | Wallpaper management with color extraction |
| [wayle-weather](https://docs.rs/wayle-weather) | Weather data with multi-provider support |
## Internals
| Crate | Description |
|-------|-------------|
| [wayle-core](https://docs.rs/wayle-core) | `Property` reactive primitive and D-Bus macros |
| [wayle-traits](https://docs.rs/wayle-traits) | Shared service monitoring traits |
## Quick start
```rust,no_run
use futures::StreamExt;
use wayle_audio::AudioService;
#[tokio::main]
async fn main() -> Result<(), Box> {
let audio = AudioService::new().await?;
// snapshot
if let Some(device) = audio.default_output.get() {
println!("default output: {:?}", device);
}
// react to changes
let mut stream = audio.default_output.watch();
while let Some(device) = stream.next().await {
println!("default output changed: {:?}", device);
}
Ok(())
}
```
## Credits
Logo by [@M70v](https://www.instagram.com/m70v.art/).
## License
MIT