# thyx swaps an SDDM greeter in through a staging directory, not in place

> A QML login theme for Linux with five visual presets, one of them video capable, and an installer written as an ordered list of twenty six steps that stages the theme, swaps it in, and rolls back if validation fails.

**rccyx/thyx** — Exquisite SDDM greeter for Linux (infinitely customizable +  safe atomic install/uninstall)

- Repository: https://github.com/rccyx/thyx
- Stars: 343 · Forks: 10
- Language: QML
- License: MIT
- Published: 2026-09-18 · Updated: 2026-09-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/rccyx-thyx

## The install stages into .thyx.stage and swaps atomically

The atomic part is literal rather than aspirational, and the install sequence shows exactly how. Steps 8 through 18 work on fixed paths: any leftover `/usr/share/sddm/themes/.thyx.stage` is removed, any leftover `/usr/share/sddm/themes/.thyx.previous` is removed, a fresh stage directory is created, and the repository is copied into it with `rsync --delete`. Development-only files are stripped from the staged copy, including `.git/`, `.github/`, `fonts/` because those get installed system wide instead, and `.qmllint.ini`. The staged theme is validated before anything is activated. An existing `/usr/share/sddm/themes/thyx` is moved to `.thyx.previous`, the stage directory is moved into place as `thyx`, and the activated theme is validated again. If either validation fails, `.thyx.previous` is restored; only after a successful activation is that backup removed.

## The greeter activates only after Current=thyx is written

Copying files is the easy half. The steps that make the login screen actually change are 21 through 24: `/etc/sddm.conf` is backed up once to `/etc/sddm.conf.thyx-back` when an existing config is present, then `Current=thyx` is written under the `[Theme]` section, SDDM is enabled when `systemctl` exists, and the installed theme, the selected SDDM theme, metadata, config file and fonts are all verified. Step 25 prints a safe greeter test command rather than restarting anything. The whole run is logged to `~/.cache/thyx/thyx-install-*.log`. The design point is that your current session survives: the installer is described as keeping the current session alive, and the promised recovery model rests on the staging and rollback paths described above, which is what docs/guide.md is said to explain. Between the two there is theme.conf and metadata.desktop at the repository root, staged along with the source.

## Two install routes: a NixOS flake module or a shell installer

NixOS users get a different path from everyone else. The theme exposes a flake, and the documented configuration adds `thyx.nixosModules.default` to a NixOS configuration with two options set: `services.displayManager.sddm.thyx.enable = true` and `services.displayManager.sddm.wayland.enable = true`. After editing the flake you rebuild with:

```bash
sudo nixos-rebuild switch --flake .#host
```

The repository root carries default.nix, flake.nix, flake.lock and module.nix, so the NixOS route is a first-class part of the project rather than a community wrapper. Everyone else runs the installer instead:

```bash
bash ./scripts/install
```

and for unattended runs, `bash ./scripts/install --yes`. The installer describes itself as local, explicit and idempotent: it prints the exact plan, asks for confirmation and sudo, installs end to end, and logs the run. With `--yes`, those prompts are skipped.

## The package manifest is a map, and the distro list is effectively a whitelist

The installer detects your distribution, then selects a matching package manifest from `scripts/data/deps.map`, installs the missing runtime packages, and verifies required shell commands, the SDDM greeter, the runtime packages, and `fc-cache` when bundled fonts exist. The distros named in the documentation are Arch, Fedora, Ubuntu across Jammy 22.04, Noble 24.04 and Resolute 26.04, Debian across Bookworm, Trixie, Forky and Sid, Linux Mint, Pop!_OS, Zorin, openSUSE, Gentoo and Alpine. Outside that list the project points you at a generic package contract under `scripts/data/deps.generic` and tells you to map it through your own package manager. The installer can also be skipped entirely by following the same steps by hand, which is the practical answer if your package manager does not fit the manifest model.

## Cinder is the only preset that accepts a video background

Five visual systems ship: four static ones named Gilded, Blush, Malachite and Sakura, plus one dynamic preset called Cinder. Each preset is a complete design system with its own palette and background, and the stated aim is that you can build your own from the same pieces. Cinder differs in kind rather than in palette, since it takes video: a video file can be used anywhere a background image is accepted and is rendered as a full screen, looped, ambient background. The accepted formats are mp4, webm, mkv, mov, m4v and avi, with H.264 encoded MP4 strongly recommended for compatibility and reliability. For good results the guidance is specific: keep videos short, around six to ten seconds, no audio, 720p or 1080p, and designed to loop without a visible seam.

## Uninstall runs from the repo, and its own step list is cut off

Removal is a first class script rather than something you improvise, described as a way to avoid bricking your login screen. It logs everything and prints a plan before proceeding, and it is run from the repository:

```bash
./scripts/uninstall
```

with `./scripts/uninstall --yes` for non interactive use. The sequence of steps the uninstaller performs is where this README stops, cut off as the collapsible list of what it does opens, so the removal order itself is not spelled out in the copy available here. What can be said is that the script pairs with an installer that already keeps a rollback copy at `.thyx.previous` until the new theme passes validation, and that the backing up of `/etc/sddm.conf` to `/etc/sddm.conf.thyx-back` is done once rather than repeatedly. Whether the uninstaller restores those two artefacts is exactly what the missing section would have said.

## The justfile formats your QML before it checks anything

Development runs through a justfile, and the first recipe is not read only. The `f` target shells out to `find src -name "*.qml"` and hands the results to `qmlformat -i`, rewriting every QML file under src in place. The `format-check` target, aliased as `fc`, reaches the same files a different way, through `find src -name "*.qml" -print0` piped into `xargs -0 qmlformat -i`, then runs `git diff --exit-code -- src`. So the check fails when formatting changed anything, and it fails by having modified your working tree on the way to failing. That is a deliberate CI shape: the check is a diff, not a linter. The `l` target runs `qmllint` across src, which is why a `.qmllint.ini` sits at the repository root even though the installer strips it from staged copies. `p` runs `./scripts/preview`, `i` and `u` are shortcuts for the install and uninstall scripts, and the `s` alias runs shellcheck against both scripts.

## Conclusion

Pick thyx if you want an SDDM greeter you can restyle into your own design rather than accept as shipped, and if your distribution appears in the installer's manifest, because anything outside that list means mapping the generic package contract yourself. Do not expect the installer to explain itself if it stops midway: it validates the staged theme and the activated theme separately and restores the previous copy when either fails, so the failure mode is a rollback rather than a half written greeter. Three things to check first: whether your SDDM session is Wayland, since the NixOS path sets `services.displayManager.sddm.wayland.enable` alongside the theme flag; whether the preset you want is one of the four static ones or Cinder, which is the only one taking video; and whether your video is short, silent and H.264, since those are the conditions the project calls out for reliable looping. There are no GitHub releases, and the last push to main is dated 11 August 2026.

## FAQ

### What is thyx and what does it replace on my system?

thyx is an SDDM greeter for Linux written in QML. After installation the theme lives at /usr/share/sddm/themes/thyx, which is where SDDM loads it from, and the installer writes Current=thyx under the [Theme] section of /etc/sddm.conf.

### How do I install thyx without breaking my login screen?

The installer stages the theme into /usr/share/sddm/themes/.thyx.stage, validates it, moves any existing thyx to .thyx.previous, swaps the staged copy into place, then validates the activated theme and restores .thyx.previous if that validation fails. It also backs up /etc/sddm.conf once to /etc/sddm.conf.thyx-back and keeps your current session alive.

### Which Linux distributions does thyx install on?

Arch, Fedora, Ubuntu on Jammy 22.04, Noble 24.04 and Resolute 26.04, Debian on Bookworm, Trixie, Forky and Sid, Linux Mint, Pop!_OS, Zorin, openSUSE, Gentoo and Alpine. Other distributions are pointed at a generic package contract that you map through your own package manager.

### Can thyx use a video background, and which preset supports it?

Yes, and Cinder is the dynamic preset built for it. Video can be used anywhere a background image is accepted and renders as a full screen looped ambient background, in mp4, webm, mkv, mov, m4v or avi, with H.264 encoded MP4 recommended. Keep clips short, around six to ten seconds, with no audio, at 720p or 1080p.

### How do I remove thyx again?

Run ./scripts/uninstall from the repository, or ./scripts/uninstall --yes for a non interactive run. It logs everything and prints a plan before proceeding. The detailed list of removal steps is cut off partway through the README, so the exact order is not documented there.

## Sources

- [Issues](https://github.com/rccyx/thyx/issues)
- [License: MIT](https://github.com/rccyx/thyx/blob/main/LICENSE)
- [rccyx/thyx on GitHub](https://github.com/rccyx/thyx)
- [README](https://github.com/rccyx/thyx/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/rccyx-thyx
