improve version and mirror updating
shellcheck / shellcheck (push) Failing after 14s

This commit is contained in:
2026-11-04 07:08:44 -07:00
parent 7f37a1b9ee
commit c3ac9f49d0
10 changed files with 175 additions and 2 deletions
+52
View File
@@ -0,0 +1,52 @@
#!/bin/bash
#
# Purpose : Keep pacman's mirrorlist on mirrors that are up to date with Arch.
# A mirror that stops syncing doesn't cause an error: update and
# version just stop seeing new packages, such as a new kernel.
#
# reflector.timer picks fresh mirrors once a week, and update picks new ones
# straight away when the first mirror falls a day behind (updates.d/10-pacman.sh).
# To choose mirrors yourself, edit /etc/xdg/reflector/reflector.conf: once it
# doesn't start with the CoreDesktop line below, this leaves it alone. To stop
# CoreDesktop changing the mirrorlist at all, add reflector to
# ~/.config/coredesktop/skip-packages.
COREDESKTOP="$HOME/.local/share/coredesktop"
source "$COREDESKTOP/utils.sh"
CONF=/etc/xdg/reflector/reflector.conf
MARKER="# CoreDesktop: choose up-to-date mirrors (system/mirrors.sh)"
install_packages reflector || exit 1
# Skipped in skip-packages
is_installed reflector || exit 0
# Ours, or reflector's own that no one has edited, is ours to replace (pacman
# translates UNMODIFIED, hence LC_ALL=C)
if head -n 1 "$CONF" 2> /dev/null | grep -qxF "$MARKER" \
|| LC_ALL=C pacman -Qii reflector 2> /dev/null | grep -qE "^UNMODIFIED[[:space:]]+$CONF$"; then
# Mirrors that synced in the last 12 hours, fastest first. --latest rates only
# the 20 most recently synced, as rating every mirror takes minutes.
sudo tee "$CONF" > /dev/null << EOF
$MARKER
# Delete the line above to choose your own; CoreDesktop then leaves this alone.
--save /etc/pacman.d/mirrorlist
--protocol https
--age 12
--completion-percent 100
--latest 20
--sort rate
EOF
else
echo "Keeping your own mirror choices in $CONF."
fi
enable_services reflector.timer
# A failed refresh leaves the mirrorlist as it was
echo "Choosing up-to-date mirrors..."
if ! sudo systemctl start reflector.service; then
echo "Couldn't choose new mirrors; keeping the ones in /etc/pacman.d/mirrorlist."
fi
exit 0