presets-demo.mp4
Ships with 5 total full visual systems.
4 static, and 1 dynamic.
Each one is a complete preset with its own palette and background.
Fully configurable, so you can also create your own.
| Gilded | Blush |
|---|---|
| Malachite | Sakura |
|---|---|
It supports video backgrounds.
cinder-demo.mp4
Supported formats and guidelines
Video files can be used anywhere a background image is accepted and are rendered as full-screen, looped, ambient backgrounds.
mp4(recommended)webmmkvmovm4vavi
For maximum compatibility and reliability, H.264-encoded MP4 is strongly recommended.
- Keep videos short (~6–10 seconds)
- No audio
- Prefer 720p or 1080p
- Designed to loop seamlessly
Want a fast mental model of what this is, what SDDM is, what it changes, and how recovery works? Read this.
Clone the repo, then run the installer from the repo root.
./scripts/installFor non interactive installs, pass --yes.
./scripts/install --yesThe installer will install and setup everything for the following (through the manifests in scripts/data):
-
Arch
-
Fedora
-
Ubuntu
- Jammy / 22.04
- Noble / 24.04
- Resolute / 26.04
-
Debian
- Bookworm
- Trixie
- Forky
- Sid
-
Linux Mint
-
Pop!_OS
-
Zorin
-
openSUSE Tumbleweed
-
Gentoo
-
Alpine Edge
If you use another distro, have a look at the generic package contract and map it through your package manager.
The installer is local, explicit, and idempotent. It validates the theme tree, installs missing runtime packages, checks required commands, stages the install atomically, writes the SDDM theme selection, and keeps the current session alive.
During setup, it prints the exact plan, asks for confirmation and sudo, installs end to end, and logs the run.
What the installer does
It runs in this order.
-
finds the Thyx repo from the script path or current directory
-
detects the distro
-
selects the matching package manifest from
scripts/data/deps.map -
installs missing runtime packages from the selected manifest
-
verifies required shell commands, the SDDM greeter, runtime packages, and
fc-cachewhen bundled fonts exist -
prints the install plan
-
asks for confirmation and sudo
-
removes the previous fixed stage path at
/usr/share/sddm/themes/.thyx.stageif exists -
removes the previous fixed rollback path at
/usr/share/sddm/themes/.thyx.previousif exists -
creates a fresh stage directory at
/usr/share/sddm/themes/.thyx.stage -
copies the repo into the stage directory with
rsync --delete -
strips dev-only files from the staged install:
.git/.github/justfile.qmllint.ini
-
validates the staged theme before activation
-
moves an existing
/usr/share/sddm/themes/thyxto/usr/share/sddm/themes/.thyx.previousduring activation -
moves
/usr/share/sddm/themes/.thyx.stageinto/usr/share/sddm/themes/thyx -
validates the activated theme
-
restores
/usr/share/sddm/themes/.thyx.previousif activation or validation fails -
removes
/usr/share/sddm/themes/.thyx.previousafter a successful activation -
installs bundled fonts into
/usr/local/share/fonts/thyx -
refreshes the font cache
-
backs up
/etc/sddm.confonce to/etc/sddm.conf.thyx-backwhen an existing config is present -
writes
Current=thyxunder[Theme]in/etc/sddm.conf -
enables SDDM when
systemctlexists -
verifies the installed theme, selected SDDM theme, metadata, config file, and fonts
-
prints a safe greeter test command
-
logs everything to
~/.cache/thyx/thyx-install-*.log
After installation, the theme is at /usr/share/sddm/themes/thyx. This is where SDDM loads it from.
The same install can be done manually by following the same steps.
Thyx comes off as clean as if… it never got in.
Ships with a first-class uninstall script so you don’t brick your login screen or get left hanging.
It logs everything and prints a plan before proceeding.
Run it from the repo.
./scripts/uninstallFor non-interactive uninstall:
./scripts/uninstall --yesWhat the uninstaller does
It runs in this order.
-
validates the repo tree
-
verifies required uninstall commands
-
prints a plan before touching anything
-
asks for confirmation and sudo
-
restores
/etc/sddm.conffrom/etc/sddm.conf.thyx-backwhen that backup exists -
otherwise removes
Current=thyxfrom/etc/sddm.conf -
removes:
/usr/share/sddm/themes/thyx/usr/share/sddm/themes/.thyx.stage/usr/share/sddm/themes/.thyx.previous/usr/local/share/fonts/thyx
-
refreshes font cache when fonts were removed
-
verifies that Thyx files are gone
-
verifies that
/etc/sddm.confno longer selectsthyx -
never restarts SDDM automatically
-
logs everything to
~/.cache/thyx/thyx-uninstall-*.log
When you’re ready to apply changes, restart SDDM from a TTY:
sudo systemctl restart sddmWarning
Restarting SDDM will log you out of your current session!
Or reboot.
From the repo, run:
./scripts/previewRuns the SDDM greeter in test mode. Your session is untouched.
Close the window when done (your compositor’s normal close shortcut, for example Alt+Q on Hyprland).
All settings live in theme.conf. Edit, preview, repeat.
From /usr/share/sddm/themes/thyx, copy any preset config from presets/ over the main theme.conf.
cp presets/malachite.conf theme.conf
./scripts/previewWhen satisfied, restart SDDM or reboot.
You can create custom presets by duplicating an existing preset and modifying it.
cp presets/gilded.conf presets/my-custom.conf
cp presets/my-custom.conf theme.conf
./scripts/previewEdit freely, keep as many presets as you want, and swap them by copying into theme.conf.
If you’re already in an editor, you can point SDDM at a preset directly through metadata.desktop.
[SddmGreeterTheme]
Theme-Id=thyx
ConfigFile=presets/gilded.confPoint ConfigFile to any preset in presets/.
ConfigFile=presets/blush.conf
# or
ConfigFile=presets/malachite.conf
# or
ConfigFile=presets/sakura.confSave the file, then restart SDDM or reboot.
Tip
You can wire a shell function or keybinds to switch presets instantly. I personally use Alt + R to rotate the login screen and desktop matching themes.
Ships with Plus Jakarta Sans, and the installer installs it system wide for SDDM.
The Font setting in theme.conf must match the font family name exactly as your system registers it.
Font="Plus Jakarta Sans"Confirm availability:
fc-list -f "%{family}\n" | grep -i "Plus Jakarta Sans" || trueIf you’ve installed additional fonts on your system, you can instruct the greeter to use a different one by updating the Font setting.
To see all available font families:
fc-list -f "%{family}\n" | sort -uThen replace the Font value with the exact family name.
For example, if you have Inter already installed:
Font="Inter"After changing fonts, rebuild the font cache if needed:
sudo fc-cache -f -vAll settings are in theme.conf. You can safely test edits using ./scripts/preview so you don’t get locked out and have to recover via TTY.
| Setting | Description | Example |
|---|---|---|
Font |
System font family | "Plus Jakarta Sans" |
FontSize |
Base font size in points | "12" |
Background |
Wallpaper or video path, relative to theme | "backgrounds/gilded.jpg" |
AllowUppercaseLettersInUsernames |
Username capitalization behavior | "true", "false" |
| Setting | Description | Options |
|---|---|---|
HourFormat |
Time format | "HH:mm" (24h), "hh:mm AP" (12h), "long" |
DateFormat |
Date format | "dddd d MMMM" gives Thursday 29 August |
| Setting | Description | Options |
|---|---|---|
FormPosition |
Login form position | "left", "center", "right" |
Blur |
Background blur intensity | "0.0" to "1.0" |
| Setting | Description | Options |
|---|---|---|
AnimationDuration |
Hover or focus transition speed | "80", "120", "300" |
AnimationEasing |
Animation curve | "OutQuart", "OutCubic", "OutBack" |
DateTextColor- Date display colorTimeTextColor- Time display colorLoginFieldTextColor- Username textPasswordFieldTextColor- Password textPlaceholderTextColor- Input placeholder textLoginButtonTextColor- Login button textEnvironmentButtonTextColor- Environment selector textSystemButtonsIconsColor- Power, restart, and sleep button icons and labels
FormBackgroundColor- Login form backgroundLoginFieldBackgroundColor- Username input backgroundPasswordFieldBackgroundColor- Password input backgroundLoginButtonBackgroundColor- Login button background
DropdownTextColor- Dropdown menu textDropdownSelectedTextColor- Selected item textDropdownBackgroundColor- Dropdown backgroundDropdownSelectedBackgroundColor- Selected item backgroundDropdownBorderColor- Dropdown borderDropdownSelectedBorderColor- Selected item border
HoverLoginButtonBackgroundColor- Login button on hoverHoverSystemButtonsIconsColor- System buttons on hoverHoverEnvironmentButtonTextColor- Environment button on hover
FormPosition="center"
# or
FormPosition="right"DateTextColor="#e0e0e0"
TimeTextColor="#ffffff"
FormBackgroundColor="#1a1a1a"AnimationDuration="50"
AnimationEasing="OutCubic"Background="backgrounds/my-video.mp4"Video backgrounds use the same Background setting as image backgrounds.
If your system uses PAM fingerprint authentication, it can start fingerprint login as soon as the screen appears.
AutoFingerprintOnLoad=trueWhen enabled, it automatically calls PAM’s fingerprint check on load and logs in as soon as the scan matches.
If fingerprint isn’t configured or fails, the greeter falls back to password login normally.
Important
PAM must already be configured for fingerprints in /etc/pam.d/sddm with pam_fprintd.so.
Having issues? Read this.
MIT © @rccyx