A fast and minimal wallpaper engine for HyDE
Use wallbash as a core component of your Wayland desktop environment — set wallpapers, generate color palettes, and dynamically theme your desktop.
- Vulkan-powered GPU acceleration for smooth performance
- Color palette generation for dynamic theming (WIP)
- Fluid transitions and animations (WIP)
- Multi-monitor support (WIP)
- Scale and anchor the image to your liking
- Dynamic blur fill for mismatched aspect ratios to eliminate black bars
git clone https://github.com/prasanthrangan/wallbash
cd wallbash
cargo build --release
sudo cp target/release/wallbash /usr/local/bin/wallbash start # Start the wallpaper daemon
wallbash set /path/to/file.img # Set wallpaper (auto start daemon)
wallbash stop # Stop the daemon
wallbash status # Show daemon status
┌─────────────────────────────────────────┐
│ ┌─────────────────────────────────────┐ │
│ │ (1) (2) (3) │ │
│ │ │ │
│ │ (4) (5) (6) │ │
│ │ │ │
│ │ (7) (8) (9) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘
wallbash set [option] <value>
-m, --mode <mode> # Scaling mode (cover, fit, original)
-a, --anchor <1-9> # Anchor point (1=top-left ... 9=bottom-right)
-w, --wall <path> # Wallpaper file /path/to/file.imgThe Rust binary compiles to a single executable, wallbash. It acts as both a client and a daemon:
wallbash startLaunches the daemon (background process). The daemon initializes the Wayland and Vulkan subsystems and listens for commands on a Unix socket.wallbash setSends a command to load and display the image. If the daemon is not running, it automatically starts it and waits for it to be ready before sending the command.wallbash stopTerminate the daemon.wallbash statusQuery the daemon status.
src/
├── main.rs
├── wallbash.rs
├── wayland.rs
└── vulkan.rs
The core project is structured in simple modules:
main.rsEntry point of the binary. Works as a CLI tool to parse arguments and handle the daemon.wallbash.rsThe core daemon module. It manages the IPC listener, handles incoming commands, and orchestrates the wallpaper loading and rendering process.wayland.rsHandles the Wayland integration. It creates a Wayland surface, binds to the layer shell protocol, and sets up the layer surface for the wallpaper.vulkan.rsManages the Vulkan rendering pipeline. It initializes the Vulkan instance, selects a physical device (preferring a discrete GPU), creates a swapchain, and renders the wallpaper image.