github snowarch/iNiR v2.22.1

latest release: v2.22.0
20 hours ago

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 version CLI, and setup 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-environment D-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 to graphical-session.target in 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 pipefail and exit 0. The migration system loads via source, 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, leaving ExecStopPost pointing 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 -p calls. Now resolves symlinks first.
  • VSCode/Cursor/OpenCode theming broken: orphaned strip_neovim_spec() referencing undefined variable crashed the editors module with set -euo pipefail, killing all editor theming.
  • Phantom dock icons for uninstalled apps: pinned apps with no .desktop file (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.json was a 349-key relic from the end-4 era. Fresh installs always used defaults/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

Don't miss a new iNiR release

NewReleases is sending notifications on new releases.