dotfile-hopping, without the fear

Snapshot your rice.
Break everything.
Get back exactly what you had.

caelback is a stdlib-only Python CLI that captures your entire Caelestia (Hyprland) setup: configs, themed apps, exact package versions, systemd units, sddm sessions, all of it. Trying someone else's dotfiles is just a caelback restore away from being undone.

rusty@arch: ~/dotfile-hopping

Caelestia is wired into everything

Caelestia doesn't just live in ~/.config/hypr. It themes a pile of third-party apps, including kitty, rofi, waybar, yazi, btop, cava, fastfetch, swaync, and the Qt5/Qt6 style engines. It also ships systemd units, pins fast-moving AUR packages like quickshell-git at exact versions, and picks the sddm session that actually logs you in.

Manually tracking all of that before trying a different rice is tedious and easy to get wrong. One real dotfile-hop restore correctly reverted ~/.config/hypr but silently left everything else on the other repo's theming: notifications and Qt apps stuck in a light color scheme, and the terminal fetch banner still carrying someone else's branding. It was invisible until you actually looked.

caelback finds all of it automatically, combining named roots with a fuzzy scan for anything else with "caelestia" in its path, so a snapshot is actually complete, and a restore actually verifies it landed.

$ caelback restore
restoring snapshot 2026-08-30_211004...
✓ hypr, caelestia, livewall
✓ kitty, rofi, waybar, yazi, btop, cava
✓ swaync, qt5ct, qt6ct, quickshell
✓ systemd --user units re-enabled
✓ sddm session restored
✓ 4 packages restored at pinned versions
✓ post-restore verification passed
live system checked, not just exit codes

What it actually does

01
caelback snapshot

Full-fidelity snapshots

Config dirs, themed apps, state dirs, systemd units, sddm sessions, and exact package versions, found by combining known roots with a fuzzy scan instead of a hardcoded list.

02
caelback restore

Restore that verifies itself

Post-restore, caelback re-checks that the live system actually matches what was restored, instead of just trusting that the restore commands exited 0.

03
caelback undo

Undo the undo

Restores create a pre-restore backup automatically, so even a restore itself can be walked back if it wasn't what you wanted.

04
caelback star

Star a trusted default

Pin a known-good snapshot as your trusted baseline. Starred snapshots are exempt from prune, so your safety net never gets swept.

05
caelback preview <repo-url>

Try before you commit

Auto-detects chezmoi, stow, a Makefile, or an install script in an unfamiliar dotfiles repo and applies it, with automatic revert on Ctrl-C or exit.

06
caelback reclaim

Kill the stragglers

Config restores don't kill running processes. reclaim finds and kills leftover bars/wallpaper daemons from an abandoned setup.

07
caelback cache-missing

Offline-exact package restore

Package tarballs are cached locally at snapshot time. Anything an AUR helper didn't keep around gets fetched or rebuilt so restore never needs the network.

08
caelback doctor --all

Diagnose before you trust it

Sanity-checks snapshots and the live environment so a broken restore is caught before you need it, not during a crisis.

09
caelback diff / export / import

Inspect, move, share

Diff two snapshots, export one to a portable archive, or import one on another machine; it's the same snapshot format either way.

10
SUPER + ALT + B

Quickshell GUI panel

A read-only panel for browsing and starring snapshots at a glance. Restoring stays CLI-only on purpose, since it can need sudo and explicit confirmation.

All 17 subcommands

snapshot
Capture the current Caelestia setup.
list
List all snapshots (--json for scripting).
show
Inspect exactly what a snapshot contains.
restore
Restore a snapshot, then verify it landed.
undo
Revert the most recent restore.
prune
Delete old, unstarred snapshots.
star / unstar
Pin or unpin a trusted-default snapshot.
doctor [--all]
Diagnose snapshots and the live environment.
reclaim
Kill leftover processes from an abandoned setup.
cache-missing
Fetch/build tarballs for uncached packages.
install-timer / uninstall-timer
Manage a scheduled auto-snapshot systemd timer.
preview <repo-url>
Try an unfamiliar dotfiles repo with auto-revert.
diff
Compare two snapshots.
export / import
Move a snapshot to/from a portable archive.

Install

# requires uv, see https://docs.astral.sh/uv/
$ git clone https://github.com/rusty-workshop/caelback.git
$ cd caelback
$ uv tool install --editable .
# take your first snapshot
$ caelback snapshot
git clone https://github.com/rusty-workshop/caelback.git && cd caelback && uv tool install --editable .
Python 3.12+ stdlib only, zero deps uv-managed Arch Linux + Hyprland