Browse, preview, apply, install, and remove SDDM login themes without logging out every time. Works on Hyprland, Plasma, and any other desktop that uses SDDM. Multi-variant collections such as ZenMatrix Collection show up as a filmstrip under a large 16:9 preview.
Built with Qt 6 and Kirigami. You do not need a Plasma session day to day — only SDDM and the libraries listed under Requirements.
Current version: 2.3.0
| Light | Dark |
![]() |
![]() |
I use Hyprland daily with SDDM and like customizing the login screen. The only reliable way to see how a theme really looked was to set it, log out, and test on the actual greeter — over and over.
Themes with multiple background variants (Themes/*.conf) were worse: switching meant editing metadata.desktop by hand. KDE’s SDDM settings help with thumbnails, but they do not show a faithful fullscreen preview — especially for video, GIF, or QML backgrounds.
This app fixes that: browse variants, preview backgrounds, run the real greeter in test mode, and apply changes without logging out every time.
Library and preview
- Lists every installed SDDM theme (
metadata.desktop) from:/usr/share/sddm/themes/(Arch / Manjaro / most distros)/run/current-system/sw/share/sddm/themes/and/var/lib/sddm/themes/(NixOS)~/.local/share/sddm/themes/(per-user)- extra roots from
XDG_DATA_DIRS
- Multi-variant themes: horizontal filmstrip, apply a variant, large 16:9 stage
- Simple themes: apply as the current SDDM theme and open a full greeter preview
- Sharp static thumbnails for video variants (cached JPEG frames via
ffmpeg)
Install and remove
- Local folder or archive: zip, tar, tar.gz, tar.xz, tar.bz2, tar.zst (or drag-and-drop)
- GitHub (experimental): clone a public repo, read
install.sh(never execute it), copy theme folders into this distro’s SDDM directories - Remove writable user or system themes from the theme stage (with confirmation)
Compatibility
- Full login preview via
sddm-greeter/sddm-greeter-qt6 --test-mode(picked automatically) - Warns when a theme’s Qt 5 / Qt 6 stack does not match your greeter
- Detects missing greeter modules (QtMultimedia, Qt5Compat, …). Themes are never rewritten on disk for real login
- NixOS-aware: system installs go to
/var/lib/sddm/themes/; activating a theme writes/etc/sddm.conf.d/(no rebuild)
The app is not in official distro repos yet. Use one of the paths below.
Enable flakes (nix-command + flakes). Do not copy a debug build/ binary into the system — the flake wraps Qt, Kirigami, QtMultimedia, ffmpeg, and git.
Try without installing
nix run github:melker22/sddm-variant-managerFrom a local clone: nix run .
User profile (usual install on a personal machine — application menu + ~/.nix-profile)
nix profile add github:melker22/sddm-variant-manager
sddm-variant-managerFrom a local clone (includes uncommitted tree changes when the worktree is dirty):
nix profile remove sddm-variant-manager # skip if this is the first install
nix profile add .After a new release: nix profile upgrade sddm-variant-manager
System-wide flake, Home Manager, and greeter video modules
System-wide — add the flake input and put the package on environment.systemPackages:
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
sddm-variant-manager.url = "github:melker22/sddm-variant-manager";
};
outputs = { nixpkgs, sddm-variant-manager, ... }: {
nixosConfigurations.YOUR_HOSTNAME = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
{
environment.systemPackages = [
sddm-variant-manager.packages.x86_64-linux.default
];
}
];
};
};
}Then sudo nixos-rebuild switch.
Home Manager
home.packages = [
inputs.sddm-variant-manager.packages.${pkgs.system}.default
];Or vendor the package without a flake input:
home.packages = [
(pkgs.callPackage ./path/to/sddm-variant-manager/nix/package.nix { })
];Video themes at the real login screen need QtMultimedia inside the SDDM greeter, not only in this app:
services.displayManager.sddm.extraPackages = with pkgs.kdePackages; [
qtmultimedia
qtsvg
qt5compat
qtvirtualkeyboard
];Do not set services.displayManager.sddm.package if Plasma already defines it (option conflict). Use extraPackages only, rebuild, and log out once.
How install and apply work on NixOS
/usr and the Nix store theme tree are immutable. This app therefore:
| Action | Location |
|---|---|
| Scan system themes | /run/current-system/sw/share/sddm/themes/ (read-only) |
| Install system-wide | /var/lib/sddm/themes/ (writable, persists across rebuilds) |
| Install per-user | ~/.local/share/sddm/themes/ |
| Activate theme | /etc/sddm.conf.d/99-sddm-variant-manager.conf (Current= and ThemeDir=) |
That drop-in overrides Theme from generated 00-nixos.conf without a rebuild. Polkit (pkexec) is required.
Home-installed themes are copied unchanged into /var/lib/sddm/themes/ when activated, because the sddm user often cannot read $HOME (mode 700).
Read-only Nix store themes (e.g. breeze) can still be activated and previewed. Applying a variant (editing metadata.desktop) needs a writable copy — install the theme first.
If you prefer a fully declarative theme instead of the GUI:
services.displayManager.sddm = {
enable = true;
theme = "breeze"; # directory name under ThemeDir
};The GUI drop-in and declarative theme= can conflict — remove /etc/sddm.conf.d/99-sddm-variant-manager.conf if you switch fully to declarative management.
There is no AUR package yet. Build from packaging/arch/ (currently 2.3.0):
sudo pacman -S --needed base-devel
cd packaging/arch
./build-package.sh
sudo pacman -U ./sddm-variant-manager-*.pkg.tar.zstOr pamac install ./sddm-variant-manager-*.pkg.tar.zst --no-confirm.
This installs to /usr/bin and adds a .desktop entry. Qt 6, Kirigami, and breeze-icons come in via depends. ffmpeg and git are optdepends (thumbnails and experimental GitHub clone).
Remove later with sudo pacman -R sddm-variant-manager.
For video at the real login screen:
sudo pacman -S --needed qt6-multimedia qt6-5compat qt6-svgOn Hyprland / other Wayland compositors, install qt6-wayland if the window does not appear.
No COPR / OBS packages yet. Install build dependencies, then follow From source.
Fedora
sudo dnf install cmake extra-cmake-modules ninja-build gcc-c++ \
qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtmultimedia-devel \
qt6-qtsvg-devel qt6-qtwayland-devel \
kf6-kirigami-devel kf6-kcoreaddons-devel kf6-ki18n-devel kf6-karchive-devel \
breeze-icon-theme ffmpeg git sddm polkitFor video login themes: sudo dnf install qt6-qtmultimedia qt6-qt5compat qt6-qtsvg
openSUSE Tumbleweed
sudo zypper install cmake extra-cmake-modules ninja gcc-c++ \
qt6-base-devel qt6-declarative-devel qt6-multimedia-devel qt6-svg-devel \
kf6-kirigami-devel kf6-kcoreaddons-devel kf6-ki18n-devel kf6-karchive-devel \
breeze6-icons ffmpeg git sddm polkitPackage names on Leap may differ; prefer Tumbleweed for Qt 6 / KF6.
Debian / Ubuntu
Need Qt 6 and KF6 (Debian testing/unstable, Ubuntu 25.04+). Ubuntu 24.04 LTS is often too old.
sudo apt install cmake extra-cmake-modules ninja-build g++ \
qt6-base-dev qt6-declarative-dev qt6-multimedia-dev qt6-svg-dev \
kirigami-dev libkf6coreaddons-dev libkf6i18n-dev libkf6archive-dev \
breeze-icon-theme ffmpeg git sddm policykit-1After installing the distro packages above (or any distro with Qt 6.5+ and KF6 Kirigami):
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build
sudo cmake --install buildThis installs the binary to /usr/bin and a .desktop entry. On NixOS prefer nix profile add . — an unpackaged binary will not find QML plugins.
- Launch SDDM Variant Manager from the application menu (or
sddm-variant-manager). - Pick a theme in the library on the left.
- For multi-variant themes, choose a variant in the filmstrip, then Apply as SDDM Theme (optional “Also set as current SDDM theme”).
- For simple themes (no
Themes/*.conf), apply the theme as a whole. - Use Full SDDM Preview to test the login screen.
- Use Remove on the theme stage to delete a writable installed theme. Read-only Nix store themes cannot be deleted from the app.
Applying variants, system-wide installs, system theme removals, and writing SDDM config require Polkit (pkexec).
- Click Install Theme at the bottom of the library (or drop a folder/archive onto the window).
- From file: Choose Archive… (
.zip,.tar,.tar.gz/.tgz,.tar.xz/.txz,.tar.bz2,.tar.zst) or Choose Folder… (must containmetadata.desktop). You can also paste a path. - Optionally enable Install system-wide (admin password).
- Click Install.
Where it lands
- Unchecked:
~/.local/share/sddm/themes/ - NixOS, system-wide:
/var/lib/sddm/themes/(not/usr/share/...) - Arch / Manjaro, system-wide:
/usr/share/sddm/themes/
Every folder with a valid metadata.desktop (+ QML entry) in the source is installed.
BETA. Needs git on PATH. Only public GitHub repos (https://github.com/user/repo or git@github.com:user/repo.git).
- Install Theme → GitHub
- Paste the repository URL
- User vs system-wide, then Install
The app clones the repo, reads install.sh / install-sddm.sh (it does not run the script), copies theme folders into this distro’s SDDM directories, and falls back to scanning the clone if there is no usable script. If the script points at a non-standard location, the theme is still installed into the usual SDDM dirs and the status message says so. Extra steps in the script (fonts, Plymouth, …) are ignored. The Nix package already wraps git.
Many older themes (Layan-style Plasma greeters, …) use QtQuick.Controls 1.x and only work with a Qt 5 greeter. Modern systems often ship only sddm-greeter-qt6.
| Theme | System greeter | Result |
|---|---|---|
| Qt 5 (Controls 1.x) | Qt 6 only | Warning: incompatible at login |
| Qt 6 | Qt 5 only | Warning: incompatible at login |
| Matching stacks | Matching | OK |
Prefer Qt 6 themes on modern SDDM, or keep a Qt 5 greeter if your distro still provides sddm-greeter.
The preview is the real greeter in test mode and covers the whole screen. This app stays open in the background.
Plasma: Alt+Tab → SDDM Variant Manager → Close preview
Hyprland: focus the preview (usually already focused) and use your close-window bind (often Super+Q).
Required
- Qt 6 and KF6 Kirigami (a Plasma install usually pulls these on Arch/Manjaro)
- KF6 Archive (
karchive) — zip / tar when installing from a local file - SDDM
sddm-greeter-qt6and/orsddm-greeter(Qt 5 themes prefer the latter when available)pkexec(PolicyKit) for system theme files and system-wide installs
# Arch / Manjaro (if not already pulled in with Plasma)
sudo pacman -S karchiveStrongly recommended — ffmpeg
Sharp thumbnails from video backgrounds. Without it, variant thumbnails fall back to low-resolution GIF previews.
# Arch / Manjaro
sudo pacman -S ffmpeg
# NixOS user profile (not needed if you install this app via the flake — ffmpeg is wrapped)
nix profile add nixpkgs#ffmpegOptional — git
Needed for Install Theme → GitHub. The app clones the repo and reads install.sh; it never runs the script. The Nix package wraps git.
sudo pacman -S git # Arch / ManjaroCMake
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/sddm-variant-managerOpen the project in Qt Creator via CMakeLists.txt.
Nix flake
nix run . # one-shot
nix develop # cmake, Qt 6, Kirigami, git, …
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build
./build/sddm-variant-managerOn NixOS you can also use shell.nix / ./qtcreator-dev.sh so Qt Creator sees the correct QML plugin paths.
Self-test (folder install, remove, install.sh parser fixtures, archive install; no network):
sddm-variant-manager --qa-self-test
# or: ./build/Desktop_Nix_Qt6-Debug/sddm-variant-manager --qa-self-testCopyright (C) 2026 Melker Halberd Pereira Alves
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
See LICENSE for the full text.
Melker Halberd Pereira Alves melker168@gmail.com

