Skip to content

liixini/skwd-wall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Skwd-wall

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.

Stars License Last Commit Repo Size Issues

Arch Linux Fedora NixOS

image image image image image image

A video is a thousand pictures - Sun Tzu (probably)

skwdwalldemo.mp4

What is Skwd-wall?

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.

What's cool about it?

  • 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.

The long story - Personal motivation and development practices

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

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.

Dependencies

Dependency list

Required

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

Optional

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!

Install

Base wallpaper path

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.

Compositor-specific examples on how to launch

# 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

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 toggle

If 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: yay is an AUR helper. If you don't have it, install it or use another helper like paru.

NixOS

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 toggle

Fedora

Fedora, 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 toggle

Compositor-specific tweaks (KDE Plasma, Hyprland etc)

Hyprland

Hyprland 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

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.

Installing the video wallpaper plugin

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-reborn

Fedora:

sudo dnf install plasma-smart-video-wallpaper-reborn

Optional - Wallpaper Engine, Steamcmd & Ollama

Skwd-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.

Wallpaper Engine

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

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.

Acknowledgements

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.

License

MIT

About

An aesthetics-first wallpaper selector that supports images, videos and Wallpaper Engine Scenes. It can generate matugen themes from these sources as well! Also has a built in Wallhaven.cc & Steam browser because why not.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages