Caution
Skwd-wall now uses my own Skwd-paper wallpaper software for image and video wallpapers. It has been flawless in testing, but please report if something isn't working as expected. Awww is still supported and now has new fancy settings under the Paper tab, but mpvpaper has been completely removed in favour of Skwd-paper.
skwdwalldemo.mp4
An image/video/Wallpaper Engine wallpaper selector from my shell Skwd with maximalist animations and more flair than you can shake a stick at. Now separated as a standalone component for use with other shells.
- Unified media support: Handle images, videos, and even Wallpaper Engine scenes in one place.
- Colour sorting: All your images, videos and WE scenes are automatically sorted by hue and saturation into one of 13 colour groups.
- Matugen colour schemes: Automatically extracts colour palettes from wallpapers for a cohesive UI - this includes video & WE. Have an external Matugen configuration already? No problem - simply point to it in the Matugen configuration tab.
- Execute refresh scripts: Many applications need a script to refresh its theming - why? I don't know, but they do. You can set each Matugen target to also execute a script at the end of the pipeline should the program you're theming require it.
- Postprocessing: Need to do fancier stuff? Maybe you want to call an external program with the wallpaper you just applied? Skwd-wall has you covered. It supports sending commands after selecting a wallpaper with useful data placeholders like %path%, %type% and %name%.
- Configurable: Most dimensions and options are configurable to fit your preferences.
- Tag system: Support for any tag you want for easy and quick search and filtering, but also Ollama integration for automated tagging.
- Restores wallpaper on boot: It tracks the last wallpaper application command and reruns it on next boot.
- So many filter options: Filter by type, colour, recently added, tags, favourites, and more.
- Wallhaven.cc & Steam Wallpaper Engine Workshop integration: Browse and set wallpapers directly from wallhaven.cc or Steam and apply directly to your desktop with the click of a button.
- Three different visual presentation styles: A parallelogram slice carousel style, a more traditional grid style and a hexagon style, all with lots of animations and options of course!
- Built-in image optimization: Skwd-wall can automatically convert all images to webp as well as downscale the resolution to match your maximum resolution. The system is completely optional but useful when you are asking yourself why you have 70 GB of wallpapers.
- Built-in video optimization (WIP): Video conversion to hevc with bitrate and resolution control is coming soon.
- Retention out of the box: Accidentally converted your 4k wallpaper to 1080p webp? No problem - Skwd-wall moves the originals to a retention directory and only deletes them automatically after the retention period on opt-in.
- Wide system support: Anywhere you can resolve the dependencies below and you have a wlr-layer-shell capable compositor, this should run.
- For those that don't speak nerd: That means it works on OS:es like Arch, Fedora & NixOS and downstream OS:es like CachyOS and Nobara but also with things like KDE Plasma, Hyprland, Sway or Niri - pretty much any Wayland compositor. It does not work with GNOME.
- Keybinds: A lot of features in Skwd-wall is navigatable by keybinds, available for reference under the keybind configuration tab.
- Random wallpaper: Press once for a random wallpaper, keep toggled for a random wallpaper every X seconds, X being configurable in the settings.
- Different wallpapers on different monitors: Control left click to select which monitors your wallpaper should apply to.
This is part of my personal shell Skwd that I have broken out into standalone components because it was a popular request. I develop it because I feel most wallpaper selectors are very boring traditional grids, lack filtering options that don't accomodate people like me who have thousands of wallpapers and also because it is fun!
Note that I use AI tooling in my development just like I do in my professional life, however most of the code is mine including the stupid decisions.
Performance is a big consideration for Skwd.
The daemon takes a tiny 10 MB of RAM and is the only permanent thing taking memory on your system. As Skwd-wall shuts down entirely between uses it has zero footprint when not in use, and while in use it takes between 150 to 300 MB of RAM depending on the size of your wallpaper collection.
As Skwd-wall isn't simply flipping between hidden and shown fast startup times is a must and it takes about 0.2 seconds to start, with an optional 400 ms fade in animation.
Dependency list
| Dependency | Why |
|---|---|
| quickshell | It is written with Quickshell... so um yeah |
| Qt6 Multimedia | Powers the video previews |
| matugen | Automatic colour extraction from the wallpapers |
| ffmpeg | Used by skwd-daemon for video thumbnails and the optional video transcoder |
| ImageMagick | Gives us the dominant colour and saturation for colour sorting |
| curl | Qt has a built in web request function but curl just works better |
| inotify-tools | Used to see if there's changes in the wallpaper directories to trigger add or delete functionality |
| Nerd Fonts Symbols | UI icons, as they're symbols we can colour them any way we like which is good when Matugen does the colouring |
| Roboto + Roboto Condensed + Roboto Mono | The main fonts used in Skwd |
| Material Design Icons | Not all symbols are in nerd fonts symbols, so this supplements that |
| Dependency | Why |
|---|---|
| ollama | Used for computer vision to automatically tag wallpapers. Disabled by default - enable in settings |
| steamcmd | Steam Workshop integration for the in-app browsing of Wallpaper Engine wallpapers. Requires API keys and an actual purchased copy of Wallpaper Engine. Disabled by default but the functionality is in there if you want to try it out |
| linux-wallpaperengine | Wallpaper Engine scene rendering. Not required if you only want video wallpapers! |
The base wallpaper path is ~/Pictures/Wallpapers so that's where you put your pictures and videos unless you want to customise and put them elsewhere.
# Niri
Mod+T hotkey-overlay-title="Skwd-wall" { spawn "skwd wall toggle"; }
# Hyprland
bind = SUPER+T, exec, skwd wall toggle
# KDE Plasma - Use the shortcut app
skwd wall toggle
Research how to do this in your specific compositor, I'm sure it supports keybinds.
Arch Linux, CachyOS, EndevourOS, Manjaro, Garuda Linux etc.
# Install Skwd-wall and all its dependencies
yay -S skwd-daemon-bin skwd-wall
# Enable Skwd-daemon
systemctl --user enable --now skwd-daemon.service
# Note that on some setups you will need to execute skwd-daemon on startup
# Here are some examples:
# # Niri (~/.config/niri/config.kdl)
# spawn-at-startup "skwd-daemon"
#
# # Hyprland (~/.config/hypr/hyprland.conf)
# exec-once = skwd-daemon
# Launch Skwd-wall. Bind this command to a key in your compositor for quick access:
skwd wall toggleIf you're updating Skwd-wall, note that Skwd-wall is two applications - Skwd-wall and Skwd-daemon.
Skwd-daemon is automatically installed as part of installing Skwd-wall, but if you're updating and not updating all packages you need to
either use yay -S skwd-wall --devel or yay -S skwd-daemon-bin skwd-wall
Note:
yayis an AUR helper. If you don't have it, install it or use another helper likeparu.
NixOS
Most NixOS users already have a flake.nix that looks roughly like this:
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs, ... }: {
nixosConfigurations.someHost = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
];
};
};
}You just add three lines to it (marked +):
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ skwd-wall.url = "github:liixini/skwd-wall";
};
- outputs = { self, nixpkgs, ... }: {
+ outputs = { self, nixpkgs, skwd-wall, ... }: {
nixosConfigurations.someHost = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
+ skwd-wall.nixosModules.default
];
};
};
}Then in configuration.nix:
programs.skwd-wall.enable = true;Rebuild and start the daemon:
sudo nixos-rebuild switch
systemctl --user daemon-reload
systemctl --user enable --now skwd-daemon.service
# Or auto-start it from your compositor:
# # Niri (~/.config/niri/config.kdl)
# spawn-at-startup "skwd-daemon"
#
# # Hyprland (~/.config/hypr/hyprland.conf)
# exec-once = skwd-daemon
# Launch the picker (bind to a key in your compositor for quick access):
skwd wall toggleFedora, Bazzite, Nobara etc.
# Enable the COPR repos
sudo dnf copr enable errornointernet/quickshell
sudo dnf copr enable piixini/skwd
# Install skwd-wall:
sudo dnf install skwd-wall
# Enable Skwd-daemon
systemctl --user enable --now skwd-daemon.service
# Note that on some setups you will need to execute skwd-daemon on startup
# Here are some examples:
# # Niri (~/.config/niri/config.kdl)
# spawn-at-startup "skwd-daemon"
#
# # Hyprland (~/.config/hypr/hyprland.conf)
# exec-once = skwd-daemon
# Launch Skwd-wall. Bind this command to a key in your compositor for quick access:
skwd wall toggleHyprland fixes and tweaks
In testing I experienced issues with NixOS + systemctl service autostart on Hyprland.This was resolved by adding a basic exec once to hyprland.conf, e.g.
exec-once = systemctl --user start skwd-daemon
I am sure there's a much more graceful way to solve this, but I am not a Hyprland user and this works.
KDE Plasma fixes and tweaks
Skwd-wall auto-detects KDE Plasma and uses Plasma's native wallpaper APIs instead of Skwd-paper.Static wallpapers work out of the box via plasma-apply-wallpaperimage - you don't have to do anything, it just works but still good to know.
Video wallpapers require the Smart Video Wallpaper Reborn Plasma plugin. Without it, video wallpapers will not work on KDE.
KDE Store (any distro):
Install via the KDE Store: right click Desktop > Desktop and Wallpaper > Get New Plugins > search "Smart Video Wallpaper Reborn" (or just select it, should be in the top)
After installing, Skwd-wall will automatically use the plugin for video wallpapers. No configuration required.
Arch Linux:
yay -S plasma6-wallpapers-smart-video-wallpaper-rebornFedora:
sudo dnf install plasma-smart-video-wallpaper-rebornSkwd-wall supports two optional features - Wallpaper Engine wallpapers through Linux Wallpaper Engine and automated tagging for the tag search feature using computer vision through Ollama.
As far as I am aware to use Wallpaper Engine on Linux you have to own the Steam application. Swkd-wall finds Wallpaper Engine wallpapers automatically and sorts them based on type (video or Wallpaper Engine Scene). You can use the Steam application to manage your Steam Engine wallpaper collection.
However if you don't want to use the default Wallpaper Engine browser you can use Skwd-wall's internal one, which uses Steamcmd which is Valve's Command Line Interface for Steam to search the Workshop behind the scenes.
You won't have to interact with Steamcmd more than logging in once so that Skwd-wall can use your logged in Steamcmd to browse the Workshop and download Wallpaper Engine workshop items (wallpapers) for you and Skwd-wall will warn you if your token has expired or needs refreshing (read: you need to log into Steam again).
Skwd-wall does not handle any of your Steam credentials - this is all done through Valve's Steamcmd - it simply tries to use Steamcmd and either you're logged in or you're not. This means that I will not be implementing in-app login flows for this - I do not wish to handle any authentication and I leave this solely on the shoulders of Valve.
Ollama is a local-only LLM that in Skwd-wall's case is used to automatically tag wallpapers as it is a very easy way to setup computer vision.
You simply need to enter the Ollama URL, download a model that supports computer vision e.g. ollama pull gemma3:4b and select the model in the field in Skwd-wall's Ollama settings - it automatically fetches installed models from Ollama for you.
You then press the O-button in the filter bar that is start / stop and after a couple of wallpapers tagged it will give you an estimated time until completion. You are safe to close Skwd-wall at this point as Skwd-daemon is the one executing the job and listening to the start/stop commands from Skwd-wall.
This does not overwrite existing tags should you already have tags set up. In testing I've found gemma3:4b to be very good at tagging while also being reasonable on the hardware requirements.
There's also a WIP tag consolidation system where similar tags get merged, but it is highly experimental right now.
Ilyamiro1 for the 250 IQ idea to use duckduckgo to retrieve wallpapers which made me realise wallhaven.cc & Steam have API:s for similar functionality. Also for implementing my ideas of parallelogram animations and colour sorting in his wallpaper selector - just happy people like my whacky ideas.
Horizon0427 for his excellent hexagon wallpaper selector from which I designed my hexagon style presentation entirely, with added animations and other features.
Happyzxzxz for showing me the Nix wizard way to do NixOS things.