NoSignal-OS/os updates/nosignal-update/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

3.4 KiB
Executable file

NoSignal — update mechanism (nosignal-update)

NoSignal had no update path. This adds one, modeled on Omarchy's omarchy-update but adapted to the fact that there is no central NoSignal git repo.

The model

Concern How it's handled
Official + AUR packages nosignal-update runs pacman -Syu via an AUR helper (bootstraps yay if none is installed — the base currently ships none)
Safety Takes a snapper snapshot first (btrfs is present)
The NoSignal layer (overrides/scripts) Re-applied idempotently by forward-only migrations — each migration just calls a component's installer
Caelestia dotfiles Opt-in --caelestia (its repo has an upstream remote); off by default to avoid clobbering local overrides
New layer changes Delivered in a new ISO (rebuilt from these notes) — there is no live fetch channel. A running box stays current on packages and re-applies the layer; it gets new layer features by reinstalling.

Layout

nosignal-update/
├── bin/nosignal-update            # the command
├── migrations/                  # forward-only, timestamped, idempotent
│   ├── 1781049600-keybind-help.sh       -> install-keybinds-help.sh
│   ├── 1781053200-fish-to-bash.sh       -> fish-to-bash/install-fish-to-bash.sh
│   ├── 1781222400-software-install.sh   -> software-install/install-software-install.sh
│   ├── 1781226000-omarchy-keys.sh       -> omarchy-keys/install-omarchy-keys.sh
│   ├── 1781229600-omadots-extras.sh     -> omadots-extras/install-omadots-extras.sh
│   ├── 1781233200-monitor-control.sh    -> monitor-control/install-monitor-control.sh
│   ├── 1781236800-updates-panel.sh      -> updates-panel/install-updates-panel.sh
│   └── 1781240400-system-polish.sh      -> system-polish/install-system-polish.sh
└── install-nosignal-update.sh     # populates ~/.local/share/nosignal + PATH symlink

install-nosignal-update.sh copies the NoSignal sources from this Downloads tree to ~/.local/share/nosignal/ (the on-system "repo") and symlinks nosignal-update into ~/.local/bin. On the real ISO the build process bakes the same tree to the same path, so the command works identically.

Migrations

A migration is a timestamped *.sh file. nosignal-update runs every migration whose name isn't yet recorded in ~/.local/state/nosignal/applied, then records it. They run with NOSIGNAL_SRC pointing at the repo root so they can call the component installers. Each must be idempotent (safe to re-run).

Adding a change: drop the component (with its installer) into the NoSignal tree, add a new migrations/<epoch>-<name>.sh that calls its installer, and add the component to the COMPONENTS list in install-nosignal-update.sh.

Usage

nosignal-update                              # snapshot + full package upgrade + layer
nosignal-update -y                           # non-interactive
nosignal-update --no-packages --no-snapshot  # re-apply the NoSignal layer only
nosignal-update --caelestia                  # also git-pull the Caelestia dotfiles

First-time install (or after an ISO rebuild)

sh ~/Downloads/nosignal-update/install-nosignal-update.sh
nosignal-update --no-packages --no-snapshot   # apply the layer without touching packages

Requirements

bash, sudo, git, base-devel (for the yay bootstrap), and snapper (optional, for snapshots).