Upgrading systemd runs its post_upgrade scriptlet mid-transaction, which reexecs both the system manager and every user manager. When pacman runs inside a user-session scope (the floating update terminal), that reexec can SIGKILL it and abandon the transaction halfway, with packages upgraded but none of the post-transaction hooks run. Route every Omarchy-owned system mutation through a new hidden omarchy-update-pacman helper that registers the transaction as a PID 1 scope via systemd-run, keeping it out of the user manager's cgroups. System scopes survive the system manager's own reexec, and as a bonus the transaction now also survives its terminal window closing. On unbooted systems (the installer chroot) the helper runs pacman directly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
27 lines
914 B
Bash
Executable File
27 lines
914 B
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Overwrite the package configuration for /etc/pacman with the Omarchy default of using its dedicated mirrors and repositories, then update all packages.
|
|
# omarchy:requires-sudo=true
|
|
|
|
sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak
|
|
sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
|
|
|
|
channel="${1:-stable}"
|
|
|
|
if [[ $channel != "stable" && $channel != "rc" && $channel != "edge" ]]; then
|
|
echo "Error: Invalid channel '$channel'. Must be one of: stable, rc, edge"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Setting channel to $channel"
|
|
echo
|
|
|
|
sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf
|
|
sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist
|
|
|
|
# Allow user customization of /etc/pacman.conf before the upgrade runs
|
|
omarchy-hook pre-refresh-pacman
|
|
|
|
# Reset all package DBs and then update
|
|
omarchy-update-pacman -Syyuu --noconfirm
|