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>
79 lines
4.4 KiB
Markdown
79 lines
4.4 KiB
Markdown
# cachyos-repo-switch — CachyOS optimized repos + kernel switch (sudoless, auto-tier)
|
|
|
|
Works **both directions** — ON → reboot into `linux-cachyos`; OFF → reboot back to stock.
|
|
|
|
## What it is
|
|
One toggle in **Settings → Services** (under "Passwordless sudo") that switches the
|
|
system **to/from** CachyOS-optimized builds **and** the `linux-cachyos` kernel —
|
|
passwordless, auto-detecting the best x86-64 tier (v4 > v3), fully unattended
|
|
(`--noconfirm`). Refuses below x86-64-v3.
|
|
|
|
## Pieces
|
|
- **`nosignal-cachy-repo`** → `/usr/local/bin` — `detect` / `status` / `enable` /
|
|
`disable` (+ `--dry-run`).
|
|
- **`02-nosignal-cachy`** → `/etc/sudoers.d` (0440, `visudo -c`-validated at install)
|
|
— `%wheel` NOPASSWD, pinned to the four exact subcommands of the fixed helper.
|
|
- **`CachyRepoToggleRow.qml`** → `nexus/common/` — baked into the pinned
|
|
nosignal-shell fork; this copy + `patch-servicespage.sh` are the migration
|
|
path for old stock-caelestia installs.
|
|
- **`patch-servicespage.sh`** — inserts the toggle into `ServicesPage.qml` (only used
|
|
by the nosignal-update migration; the builder skips it via NOSIGNAL_SKIP_SHELL_PATCH).
|
|
|
|
## Two design fixes baked in — DO NOT reintroduce the bugs
|
|
1. **Architecture (critical).** CachyOS v3/v4 packages have arch `x86_64_v3`/`x86_64_v4`.
|
|
Upstream relies on its OWN pacman (reads `Architecture = auto` as "include v3/v4").
|
|
We keep **stock pacman** (reads `auto` as just `x86_64`) → it would arch-reject every
|
|
v3/v4 package and the conversion would silently do nothing. So `enable` sets
|
|
`Architecture` EXPLICITLY to the tier (`x86_64 x86_64_v3 x86_64_v4` for v4,
|
|
`x86_64 x86_64_v3` for v3); `disable` restores `Architecture = auto`.
|
|
2. **Targeted revert (no whole-base pull).** `disable` reinstalls ONLY packages whose
|
|
local-DB `Packager` is `CachyOS …` (excluding the cachy keyring/mirrorlist pkgs,
|
|
removed separately) — never the full base. Nothing converted ⇒ nothing to do.
|
|
|
|
## Why stock pacman (and `--ignore pacman`)
|
|
Upstream `cachyos-repo.sh` is interactive, ends with `pacman -Syu`, and swaps in a
|
|
CachyOS `pacman`. We reuse its signed keyring/mirrorlists + `.awk` stanza files but
|
|
drive pacman ourselves (stock, unattended). The CachyOS `pacman` build stamps an
|
|
`%INSTALLED_DB%` key into the local DB that stock pacman then warns about on every op,
|
|
so `enable` runs `pacman -Suu --ignore pacman` to pin pacman stock. **Keep that flag.**
|
|
|
|
## Kernel guard
|
|
`enable` installs `linux-cachyos` + `-headers` (the limine-mkinitcpio-hook generates
|
|
the boot entry; stock `linux` stays as a fallback). `disable` removes the cachy kernel
|
|
ONLY after confirming stock `linux` is installed — never strips the last bootable
|
|
kernel. A **reboot** is needed after ON (to run the new kernel) and after OFF (to leave
|
|
it); pick the entry at the Limine menu.
|
|
|
|
## Live-fetch vs vendored (build decision: LIVE-FETCH)
|
|
`enable`/`disable` fetch upstream `cachyos-repo.tar.xz` (keyring + mirrorlists + `.awk`).
|
|
Enabling CachyOS is inherently online (it pulls optimized builds + the kernel from
|
|
CachyOS mirrors), so there is no offline scenario to vendor for — live-fetch needs no
|
|
bundled artifacts and never goes stale. If a future air-gapped image needs it, vendor
|
|
the tarball and drop the fetch in `fetch_upstream()`.
|
|
|
|
## CachyOS-exclusive packages don't revert (by design)
|
|
Any package with no stock equivalent stays a CachyOS build on OFF and is reported, not
|
|
removed (e.g. `quickshell-git`, `gamescope-session-git` —
|
|
harmless; self-clear on the next `yay -Sua`). The `linux-cachyos` kernel is the one
|
|
exception (removed explicitly, guarded as above). Snapshot entries keep historical
|
|
cachy UKIs under the Snapshots submenu (cosmetic; age out as snapshots rotate).
|
|
|
|
## Closure deps
|
|
`curl`, `tar`/`xz`, `gawk` (all via Arch `base`), `kitty`, plus `limine` +
|
|
`limine-mkinitcpio-hook` for the kernel boot entry — all already on the NoSignal base.
|
|
|
|
## Install (root)
|
|
```
|
|
sudo sh ~/.local/share/nosignal/cachyos-repo-switch/install-cachyos-repo-switch.sh
|
|
```
|
|
Then reload caelestia (or log out/in) so the toggle loads.
|
|
|
|
## Use
|
|
- Settings → Services → **CachyOS repositories**: on opens a floating terminal showing
|
|
the full pacman transaction (passwordless); off reverts to stock.
|
|
- Or terminal: `sudo nosignal-cachy-repo enable` / `disable`,
|
|
`nosignal-cachy-repo status` / `detect` (add `--dry-run` to preview).
|
|
|
|
## Files
|
|
- `nosignal-cachy-repo`, `02-nosignal-cachy`, `install-cachyos-repo-switch.sh`,
|
|
`CachyRepoToggleRow.qml`, `patch-servicespage.sh`.
|