Single-script builder (nosignal.sh) that turns a stock Arch Linux ISO into a fully-offline installer for a themed Hyprland + caelestia (Quickshell) desktop: matching SDDM greeter, Btrfs/Limine bootable snapshots, chwd-style GPU detection, and a curated "os updates" layer (keybind cheatsheet, settings panels, system polish, on-box management skill). See README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
62 lines
2.8 KiB
Markdown
Executable file
62 lines
2.8 KiB
Markdown
Executable file
# 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.
|