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> |
||
|---|---|---|
| .. | ||
| bin | ||
| migrations | ||
| install-nosignal-update.sh | ||
| README.md | ||
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).