Skip to content

v2.0.0 — Modular plugin architecture

Choose a tag to compare

@T-Crypt T-Crypt released this 31 Aug 00:40
· 594 commits to main since this release
dcbad2e

A rewritten install.sh that defaults to zero prompts, and the start of a real modular plugin architecture: AI capabilities are no longer bundled into the ai layer — each one is now independently installable and removable, the same way a third-party plugin would be.

⚠️ If you're upgrading from before 2.0.0, read this first

Claude Code, Codex, and OpenCode agent-hook wiring, and Agent Graph, no longer install automatically with the ai layer. They're opt-in plugins now. If you had live per-session agent tracking in the bar/dashboard before, git pull && ./install.sh (or --config-only) will not bring it back on its own — you'll just lose it silently otherwise. Run this once after updating:

aphotic plugin install claude-hooks     # or codex-hooks / opencode-hooks, matching whichever harness you use
aphotic plugin install agent-graph      # if you want the Dashboard's live tool-call graph back too

Each is independent — install only the ones for the harness(es) you actually use. aphotic plugin list --remote shows everything currently available. See the README's Plugin System section for the full picture, or the Install section's upgrade callout for the short version.

Highlights

Modular plugin architecture — Aphotic base is now shell + rice/theming + Settings + core Quickshell modules only. A plugin is a directory with a plugin.toml manifest (manifest v3) declaring exactly what it is and what it touches:

  • [ui.dashboard_tab] lets a plugin contribute a real Command Center tab, loaded dynamically at runtime — no shell rebuild to add or remove one. Agent Graph is the flagship example, fully extracted out of the base shell.
  • The new [harness] table (the harness-hook capability) is for a plugin that wires itself into a different program's own config instead of reacting to an Aphotic-internal event — exactly what Claude Code, Codex, and OpenCode's agent-hook wiring needed. Install/enable runs the plugin's wire script; disable/remove runs unwire, since the "enabled" state lives in the harness's own config file, not something Aphotic can gate on its own.
  • Bar-tab harness icons now follow plugin install state, not live process presence — install only codex-hooks and you'll see only the Codex icon, even if Claude Code happens to be running too.

install.sh rewritten as an orchestrator over lib/install/*.sh stage modules instead of one growing monolithic script. Running it with no flags now installs the daily-driver setup (full profile, no optional layers) with zero prompts; the old interactive wizard is still there via --opt-in. The WiFi-powersave prompt is gone entirely — it interrupted the install for a system tweak with no bearing on whether the desktop actually works.

--strip-conflicts/--keep-conflicts — a prior rice's leftover waybar/rofi/dunst/etc. gets offered for removal before install, instead of silently fighting Aphotic's own bar/launcher/notification center for the same role (#41).

Also in this release

  • Two real config-preservation bugs fixed: ~/.config/hypr/monitors.lua and ~/.config/gtk-3.0/settings.ini were silently overwritten by every install.sh/--config-only run (#45)
  • Fixed yay failing to land on PATH on a fresh/torn-down system (stale/empty pacman sync databases before the AUR build)
  • Fixed a stale-pacman-db install failure ([ERROR] - firefox install had failed..., #41)
  • Fixed the "Hyprland was started without start-hyprland" warning on login
  • AiProviders' Claude/Codex/Ollama auto-probe is now gated behind the installer's ai layer, instead of probing for CLIs that were never installed and logging noise for anyone without that layer

Known open item

yay not landing on PATH after the above fix has one more unresolved report (#45) — likely an existing paru install resolving first (not a bug) or an environment-specific issue, still being triaged with the reporter.

Full history: the README Roadmap section.