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

68 lines
3.4 KiB
Markdown
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
```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).