# 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/-.sh` that calls its installer, and add the component to the `COMPONENTS` list in `install-nosignal-update.sh`. ## Usage ```sh 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 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).