This repository provides a single, opinionated installer script install-all.sh that automates installing and building:
- Niri (Wayland compositor)
- xwayland-satellite (rootless Xwayland helper)
- Quickshell (Qt-based shell)
- Noctalia shell assets (extracted into Quickshell config)
Important: this installer performs system package installs and builds large projects (Qt6, Rust builds). Run it only on a machine where you are comfortable installing development packages and building from source.
Quick start
- Make the script executable:
chmod +x install-all.sh- Run the installer (recommended):
sudo ./install-all.shRunning under sudo is fine: the script detects SUDO_USER and will run user-local steps (rustup, cargo installs, config extraction) as that non-root user so ownership and paths remain correct.
NO_PACSTALL=1— skip the optionalpacstallstep (recommended if you don't want to run third-party install scripts).NOCTALIA_TARBALL_URL="<url>"— override the default Noctalia release tarball URL (the script extracts this into~/.config/quickshell/noctalia-shell).
- Installs system packages (build tools, XCB dev libs, Qt6 dev packages used by Quickshell, and utilities).
- Installs Rust (
rustup) for the invoking user if missing, then builds Niri withcargoand runscargo install. - Copies the resulting
niribinary to/usr/local/bin/niriso display managers (GDM) can execute it. - Builds
xwayland-satellitefrom source and installs it to/usr/local/bin. - Builds Quickshell with CMake/Ninja and installs it system-wide via
cmake --install. - Installs a few helper tools (for example
matugenviacargo) and optionally runspacstallif not skipped. - Downloads and extracts the Noctalia release tarball into
~/.config/quickshell/noctalia-shellfor the invoking user. - Writes a Wayland session file at
/usr/share/wayland-sessions/niri.desktopthat points to/usr/local/bin/niri.
- If
aptfails to find a package (especially Qt6 dev packages), your apt sources may not include the required repositories. Inspect the failedaptoutput and add the necessary sources or install those packages manually. - If
cargo buildfails, copy the cargo error output and re-run the failingcargo buildcommand manually as the invoking user — commonly missing native dev packages or incorrect toolchain versions cause failures. - If
niriwarns aboutxwayland-satellitemissing at runtime, verify the installed binary exists in the path visible to the compositor session:
which xwayland-satellite || ls -l /usr/local/bin/xwayland-satellite
which niri || ls -l /usr/local/bin/niri ~/.cargo/bin/niri- If your display manager does not show the Niri session, ensure
/usr/share/wayland-sessions/niri.desktopexists and itsExecpoints to/usr/local/bin/niri. Some DMs require a session restart:
sudo systemctl restart display-manager # careful: this ends the graphical session- If you prefer not to copy the
niribinary system-wide, I can change the script to create a small wrapper at/usr/local/bin/nirithat execs the invoking user's~/.cargo/bin/niriinstead. - If you only want Niri (not Quickshell), or only Quickshell, tell me and I will add flags (e.g.
--no-quickshell) to make the installer modular.
If anything fails when you run install-all.sh, paste the failing command output here and I will help fix the script or the missing dependencies.
This repository contains installer scripts and instructions only. The projects built by the script (Niri, Quickshell, xwayland-satellite, Noctalia) are external — review their upstream licenses and documentation for runtime and build notes.