Hyprwall

An unofficial GUI for setting wallpapers with multiple backends, built with GTK4 and Rust. 🚀🦀
## Differences between other GUI wallpaper pickers: - **Rust** - Built with Rust, so it's blazingly fast and memory-safe. - **No dependencies** - Unlike other GUI wallpaper pickers, Hyprwall doesn't have any package dependencies (other than rust), so it's lightweight and easy to install. - **Minimalist** - Hyprwall is minimalist, the source code is very small compared to other wallpaper pickers e.g. (waypaper). - **Wrapping** - Hyprwall supports wrapping, so if you choose to you can have a lot of wallpapers shown in the GUI at once (wraps with window size). - **Performance** - Hyprwall is designed to be performant, it uses a thread pool to load images in parallel and caches images. - **High capacity** - Hyprwall can handle a large number of wallpapers (over 1000 at one time!) without any issues. - **Multiple monitors** - Hyprwall supports setting wallpapers on **Multiple** monitors at once. - **True async** - Hyprwall is built to be asynchronous, it uses tokio to run commands in this manner massively improving performance. - **Cross display protocol/server support** - Hyprwall supports both **wayland** (swaybg, swww, hyprpaper, wallutils) and **x11** (feh, wallutils). - **Cli args** - Hyprwall supports command line arguments, to view these type **`hyprwall --help`**, **--restore** is one of them, if you wish you can restore your last used wallpaper in the gui with this argument. - **GIF support** - Hyprwall supports GIFs, but only if the **swww** backend is used. - **Search functionality** - Hyprwall has search functionality that can filter through your wallpapers in real time. - **Previewable images** - Hyprwall can preview images at a much larger scale via right clicking on an image: it will bring up a preview window. - **Supports swaybg, swww, wallutils, feh, and hyprpaper** - Hyprwall supports a variety of wallpaper backends, so you can use it with your preferred wallpaper tool.
## Preview ![Preview](.github/preview.png)
## Requirements - IPC enabled **(only for hyprland / hyprpaper users)** - any backend listed above installed - GTK-4 installed ## Installation [![Packaging status](https://repology.org/badge/vertical-allrepos/hyprwall.svg)](https://repology.org/project/hyprwall/versions) ### GitHub Releases See Hyprwall's [releases page](https://github.com/hyprutils/hyprwall/releases) for downloadable binaries. ### Arch Linux There are 2 different [AUR](https://aur.archlinux.org) packages available: - [hyprwall](https://aur.archlinux.org/packages/hyprwall) - Latest release built from source - [hyprwall-bin](https://aur.archlinux.org/packages/hyprwall-bin) - Latest release in binary form Install the preferred package with: ```bash git clone https://aur.archlinux.org/.git cd makepkg -si ``` Or, if you're using an [AUR Helper](https://wiki.archlinux.org/title/AUR_helpers), it's even simpler (using [paru](https://github.com/Morganamilo/paru) as an example): ```bash paru -S ``` ## Building from source 1. Install Rust (preferably `rustup`) through your distro's package or [the official script](https://www.rust-lang.org/tools/install) 2. Install `git`, `pango`, and `gtk4` 3. Clone this repository: `git clone https://github.com/hyprutils/hyprwall && cd hyprwall` 4. Compile the app with `cargo build --release` or run it directly with `cargo run --release` ## TODO: - [x] Implement GUI - [x] Implement wrapping ## Credits: - [Nyx](https://github.com/nnyyxxxx) - Implementing the GUI and maintaining the project - [Adam](https://github.com/adamperkowski) - Rust improvements, maintaining the project - [Vaxry](https://github.com/vaxerski) - Hyprpaper - [rust-gtk](https://github.com/gtk-rs/gtk4-rs) - The GTK4 library - [Hyprland](https://github.com/hyprwm/Hyprland) - The wayland compositor
Copyright (C) 2024 HyprUtils