# NoSignal — settings app "Updates" page

The Caelestia shell (`caelestia-shell` 2.0.2) settings app has an **Updates**
page under System that's an upstream "under construction" placeholder. NoSignal
fills it in as the GUI face of `nosignal-update`.

## What the page shows / does

- **Pending updates**: official repos (`checkupdates`), AUR (`yay -Qua`),
  Flatpak, and NoSignal layer migrations not yet applied
- **History**: last full system upgrade (from pacman.log), last check time
- **Check for updates now** — refreshes the counts
- **Update now** — runs `nosignal-update` in a floating terminal (`TUI.float`
  rule), so sudo and pacman prompts stay visible and honest

## Architecture (two layers, deliberately)

**Backend (robust, zero fragility):**
- `nosignal-update-check` → `~/.local/bin` — writes
  `~/.local/state/nosignal/update-status.json`; the page reads this cache so it
  opens instantly
- `nosignal-update-check.timer` (systemd user) — refresh every 6h (+5min after
  boot); the JSON is also usable for icon badges later
- Needs `pacman-contrib` (for `checkupdates`)

**UI (a patch on a moving upstream — see caveat):**
- `UpdatesPage.qml` — written in the shell's own idiom (PageBase, InfoRow,
  NavRow, Process/StdioCollector); copied into
  `/etc/xdg/quickshell/caelestia/modules/nexus/pages/` (untracked file —
  pacman upgrades leave it alone)
- `patch-updates-page.sh` — swaps the first System `PlaceholderComp` in
  `PageCompRegistry.qml` for the real page (backs up to `.pre-nosignal` once;
  idempotent; **first match only**, so the Plugins stub is untouched)
- **Pacman hook** (`/etc/pacman.d/hooks/nosignal-updates-panel.hook`) — shell
  upgrades revert `PageCompRegistry.qml`, so the hook re-runs the patch after
  every `caelestia-shell` install/upgrade

## Caveat for the builder

The QML patch tracks upstream `caelestia-shell` (2.0.2 at time of writing).
If upstream reshapes `PageCompRegistry.qml`, the perl regex won't match — the
patch script then **warns and leaves the file untouched** (settings app keeps
working, page just stays a placeholder). Upstream also has a commented-out
"Display" page and a "Plugins" stub, suggesting they may ship their own pages
eventually; if their Updates page lands, drop this patch and keep the backend.

## Install

```sh
sh ~/Downloads/updates-panel/install-updates-panel.sh   # needs sudo for the patch + hook
```

Then restart the shell (`Ctrl+Super+Alt+R`) and open Settings → Updates.
Also wired into `nosignal-update` as migration `1781236800-updates-panel.sh`.

## Packaging

- Add `pacman-contrib` to the package list.
- Bake: `nosignal-update-check` (+ enable the user timer), the patched/copied
  QML (or run the patch in the image build), and the pacman hook with the
  user's home path.
- Patch regex targets caelestia-shell 2.0.2.
