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>
57 lines
2.3 KiB
Bash
Executable file
57 lines
2.3 KiB
Bash
Executable file
#!/bin/sh
|
|
# install-kernel-reboot-notify.sh — idempotent.
|
|
#
|
|
# After a kernel update nothing tells the user to reboot. The new
|
|
# kernel + modules are on disk but the old kernel keeps running with its modules
|
|
# dir removed (can't load fresh modules), and the new UKI isn't booted. Installs:
|
|
# 1. nosignal-reboot-check -> ~/.local/bin (helper + desktop notify)
|
|
# 2. 95-nosignal-kernel-reboot.hook -> /etc/pacman.d/hooks (root; terminal warn)
|
|
# 3. a call to nosignal-reboot-check at the end of nosignal-update (idempotent)
|
|
#
|
|
# Re-runnable. The pacman-hook step needs root; if not root, it is skipped with a
|
|
# notice (run once as root, or let the builder ship the hook in the ISO).
|
|
set -eu
|
|
|
|
HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
BIN_DIR="$HOME/.local/bin"
|
|
mkdir -p "$BIN_DIR"
|
|
|
|
# 1. helper
|
|
install -m 0755 "$HERE/nosignal-reboot-check" "$BIN_DIR/nosignal-reboot-check"
|
|
echo "installed $BIN_DIR/nosignal-reboot-check"
|
|
|
|
# 2. pacman hook (root)
|
|
HOOK_DST=/etc/pacman.d/hooks/95-nosignal-kernel-reboot.hook
|
|
if [ "$(id -u)" -eq 0 ]; then
|
|
install -Dm 0644 "$HERE/95-nosignal-kernel-reboot.hook" "$HOOK_DST"
|
|
echo "installed $HOOK_DST"
|
|
elif command -v sudo >/dev/null 2>&1; then
|
|
sudo install -Dm 0644 "$HERE/95-nosignal-kernel-reboot.hook" "$HOOK_DST" \
|
|
&& echo "installed $HOOK_DST (via sudo)" \
|
|
|| echo "WARN: could not install pacman hook (need root) — skipped"
|
|
else
|
|
echo "WARN: not root and no sudo — pacman hook NOT installed ($HOOK_DST)"
|
|
fi
|
|
|
|
# 3. wire into nosignal-update (idempotent; edits the real file behind the symlink)
|
|
NU=$(command -v nosignal-update 2>/dev/null || echo "$BIN_DIR/nosignal-update")
|
|
NU=$(readlink -f -- "$NU" 2>/dev/null || echo "$NU")
|
|
MARKER="# >>> nosignal kernel-reboot-notify >>>"
|
|
if [ -f "$NU" ] && ! grep -qF "$MARKER" "$NU"; then
|
|
# insert the call just before the final 'NoSignal up to date' log line
|
|
tmp=$(mktemp)
|
|
awk -v marker="$MARKER" '
|
|
/log "NoSignal up to date"/ && !done {
|
|
print marker
|
|
print "command -v nosignal-reboot-check >/dev/null 2>&1 && nosignal-reboot-check || true"
|
|
print "# <<< nosignal kernel-reboot-notify <<<"
|
|
done=1
|
|
}
|
|
{ print }
|
|
' "$NU" > "$tmp" && cat "$tmp" > "$NU" && rm -f "$tmp"
|
|
echo "wired nosignal-reboot-check into $NU"
|
|
else
|
|
echo "nosignal-update already wired (or not found at $NU) — skipped"
|
|
fi
|
|
|
|
echo "kernel-reboot-notify: ok"
|