NoSignal-OS/os updates/additions-installer/README.md
28allday 19fd794b6b NoSignal — fully-offline Arch → Hyprland desktop installer
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>
2026-06-21 11:03:10 +01:00

4.5 KiB
Executable file

additions-installer — Settings → Additions (optional software on demand)

Turns the Settings app's placeholder Plugins section into an Additions page: a curated list of optional software with one-click installs.

Sources policy

No AUR. No Flatpak. Official pacman repos or official upstream installers/git only:

Item Source
DeckShift Gaming Mode official git — https://git.no-signal.uk/nosignal/deckshift.gitdeckshift.shdeckshift-login installer (the one-shot-autologin fix, always run after deckshift.sh)
Spotify [omarchy] pacman repo (proprietary — no upstream git exists)
Once (Basecamp) [omarchy] pacman repo (once-bin)
Obsidian Arch [extra]
OBS Studio Arch [extra] (obs-studio) + GPU-detected encoder runtimes via obs-extras.sh (see below)
Claude Code official installer — curl -fsSL https://claude.ai/install.sh | bash
Codex CLI official installer — curl -fsSL https://chatgpt.com/codex/install.sh | sh
opencode official installer — curl -fsSL https://opencode.ai/install | bash

OBS hardware encoders (obs-extras.sh)

First-round testing found obs-studio alone ships only the x264 software encoder path. The ISO lands on arbitrary GPUs (AMD / Intel / NVIDIA, any mix), so the OBS entry delegates check AND install to obs-extras.sh, which detects GPUs via lspci per machine:

  • AMD — VAAPI (H.264/HEVC/AV1) ships inside mesa: nothing to add.
  • Intel — installs intel-media-driver + vpl-gpu-rt (QSV).
  • NVIDIA — NVENC comes with the proprietary driver; deliberately not auto-installed (driver branch is a system decision — see gaming-enablement); prints a pointer if the driver is absent.

Because the check also requires the detected runtimes, an OBS installed without them shows as not-installed — clicking Install completes the set idempotently.

How it works (same mechanism as the Updates page)

  • additions.json — the manifest, single source of truth. Per item: id, name, desc, icon (Material Symbol), check (sh, exit 0 = installed), install (sh). Edit this file to add/remove items — no code changes needed.
  • nosignal-additions (~/.local/bin) — status re-runs every check and writes ~/.local/state/nosignal/additions-status.json; install <id> runs the item's installer then re-statuses; list.
  • AdditionsPage.qml — reads the status cache; each item is a row (Installed ✓ or description + click-to-install). Installs run in a visible floating terminal (kitty --class TUI.float) so git/sudo/ pacman prompts stay in front of the user. Modeled line-for-line on UpdatesPage (Process objects inside the layout — see the comment).
  • patch-additions-page.sh — root-run, idempotent: installs the page QML, swaps the remaining System PlaceholderComp (the Plugins stub) for the page, and relabels the menu entry Plugins → Additions / "Install optional software". Ordering: requires the Updates-page patch first — before it, the first placeholder is the Updates stub (guarded: warns and skips). Backups at *.pre-nosignal-additions; warns and degrades gracefully on upstream drift.
  • pacman hook (nosignal-additions-page.hook) re-applies after every caelestia-shell upgrade.

Packaging

  • Ship the component in the layer tree + COPY-list; migration 1781420400-additions-installer.sh (sorts after the cliamp-music migration; add to the baked applied list).
  • The patch can be baked at image build (after the Updates-page patch).
  • Do NOT pre-install any of the additions — the page is the opt-in.

Version pins / drift

  • Registry patch pinned against caelestia-shell 2.0.2 (same pin as the Updates page; both patch scripts warn-and-degrade on drift).
  • The three curl | sh installers and the DeckShift git URL are upstream-controlled endpoints; if one moves, only additions.json needs editing.

Test

  1. Settings → System shows Additions (not "Plugins"); page lists 8 items with sensible installed/not-installed state.
  2. Install something small (e.g. Obsidian) → floating terminal, sudo prompt, pacman runs → row flips to "Installed" after the terminal closes.
  3. "Re-check installed state" refreshes after installing/removing something from a terminal.
  4. DeckShift entry: full chain (clone → deckshift.sh → deckshift-login fix), then the Gaming Mode checklist items apply (Super+Shift+S etc.).