Hotfix round. Half the install pipeline was quietly broken and nobody noticed because existing users don't re-install. Fresh CachyOS users noticed though — loudly.
Added
- Branch awareness: non-main branches now visually stand out everywhere — bar update indicator, settings about page, update overlay,
inir versionCLI, andsetup update. Tertiary-colored hints, no blocking, just so people know they're off the release track. - Conflicting shell detection: install and doctor now detect all known Quickshell-based shells (noctalia, DankMaterialShell, caelestia, bms) and handle removal in the correct order — meta-package first, then shell, then runtime. CachyOS users who picked Niri from the installer no longer have to manually fight package conflicts.
Fixed
- 20-60 second gray screen on fresh boot: two
systemctl --user show-environmentD-Bus calls ran sequentially at startup, each blocking 10-30s when the user manager wasn't warm yet. Now cached with a single 3s-timeout call. Worst case dropped from a full minute of staring at nothing to ~3 seconds. - Shell never auto-starting on boot: fresh installs never created the systemd service file.
sync_user_inir_service_from_repo_if_present()only updates existing files and bails on missing ones. Added a fresh-install code path that creates the service from template. - Shell starting on KDE/GNOME (again):
detect_compositor_service()still fell back tographical-session.targetin several code paths even after 2.22.0's [Install] section removal. KDE activates that target too. Nuked every remaining fallback — if we can't detect your compositor, we refuse to wire the service. - Install silently dying at phase 3: migration 023 had top-level
set -euo pipefailandexit 0. The migration system loads viasource, so those killed the parent setup process. Everything after migrations never ran. Rewrote to use the standard function pattern. - ExecStopPost path wrong on repo-sync installs: service sync only rewrote
ExecStart, leavingExecStopPostpointing to/usr/bin/inir. Cleanup-orphans failed silently on every shutdown. - SDDM theme skipped with
-y: non-interactive installs explicitly skipped the SDDM theme. Now installs automatically. - Bar resources freezing after 15s: ResourceUsage auto-stops polling after 15s. The bar never renewed its subscription, so CPU/RAM/temp went stale until you opened a sidebar. Persistent panels now use
keepAlive()/releaseKeepAlive(). - Doctor launching duplicate shell: symlink path vs resolved path mismatch in
qs -pcalls. Now resolves symlinks first. - VSCode/Cursor/OpenCode theming broken: orphaned
strip_neovim_spec()referencing undefined variable crashed the editors module withset -euo pipefail, killing all editor theming. - Phantom dock icons for uninstalled apps: pinned apps with no
.desktopfile (e.g. Firefox on Fedora) no longer show ghost icons. The pin stays in config so the icon comes back if you install the app later.
Changed
- Removed stale legacy config:
dots/.config/illogical-impulse/config.jsonwas a 349-key relic from the end-4 era. Fresh installs always useddefaults/config.json(856 keys) — the fallback was dead code that would have delivered a broken config if it ever triggered.
Update: inir update or ./setup update
Fresh install: see docs/INSTALL.md
Full changelog: CHANGELOG.md