Installer Script
install.sh is the umbrella installer for the full Deckery stack. It is idempotent — re-running is safe and will update components to their latest version.
What it does
-
Clone / update sub-repos — clones
makima-deckeryanddeckery-hudnext to the deckery repo. When running from a tagged release, each sub-repo is checked out at the same tag as the main repo. If a matching tag is missing in a sub-repo, the installer exits with a clear error. See Updates for details on the release-pinning mechanism. -
Create the distrobox container — runs
distrobox assemble createusingdistrobox.iniin the repo root. The container (Arch Linux) is shared by all three services. On subsequent runs this step is a no-op. -
Build and install Makima — delegates to
makima-deckery/install.sh, which compiles the Rust binary inside the container and deploys it to~/.local/bin/. -
Install Deckery HUD — delegates to
deckery-hud/install.sh, which installs Python/GTK4 packages inside the container and links the systemd service. -
Install Deckery Tray — installs Python/GTK3 packages inside the container, links the launch script to
~/.local/bin/deckery-tray, and installsdeckery-tray.service. -
Install the app icon and
.desktoplauncher — copies the icon to the hicolor icon theme and installs a.desktopfile so Deckery appears in the application launcher. -
Copy the Steam Input config — copies
desktop_neptune.vdfto Steam's controller config directory if it differs from what's already there. -
Link the default makima config — symlinks
configs/Steam Deck.tomlto~/.config/makima/Steam Deck.toml. App-specific configs are copied once and not overwritten on subsequent runs.
Service hierarchy
Deckery-tray manages the entire stack:
deckery-tray.service ← starts on login, owns the distrobox container
├── makima.service (PartOf tray — stops and restarts with it)
└── deckery-hud.service (PartOf tray — stops and restarts with it)
Starting the tray starts everything. Stopping it stops everything cleanly.
Manual invocation
# First install / update — always use get.sh
bash <(curl -sSL https://raw.githubusercontent.com/Plasma-Deckery/deckery/main/get.sh)
get.sh fetches the latest release tag, checks out that tag, sets DECKERY_RELEASE_TAG, and then calls install.sh. Running install.sh directly without this env var skips release pinning and runs in development mode (sub-repos pull their latest main branch instead of a matching tag).