dotfiles/.chezmoiscripts/run_onchange_before_linux-install-packages.sh.tmpl

98 lines
2.5 KiB
Cheetah
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{ if eq .chezmoi.os "linux" -}}
{{ if eq .chezmoi.osRelease.id "manjaro" -}}
{{- /* https://github.com/mriehl/dotfiles/blob/master/run_onchange_packages.sh.tmpl */ -}}
#!/usr/bin/env bash
wait_for_pacman_unlock() {
local LOCKFILE="/var/lib/pacman/db.lck"
local MAX_IDLE=10 # 如果沒有 pacman process最多等這麼久再自動移除殘留
local WAITED=0
echo "⏳ 檢查 pacman 鎖定中..."
while [ -e "$LOCKFILE" ]; do
if ! pgrep -x pacman >/dev/null && \
! pgrep -x packagekitd >/dev/null && \
! pgrep -x packagekit >/dev/null; then
echo "🔍 找不到 pacman 或 PackageKit疑似殘留鎖檔。"
if [ "$WAITED" -ge "$MAX_IDLE" ]; then
echo "🧹 自動移除殘留鎖檔(已閒置 $MAX_IDLE 秒)"
sudo rm -f "$LOCKFILE"
break
fi
WAITED=$((WAITED + 1))
fi
sleep 1
done
echo "✅ 鎖定解除,繼續執行。"
}
pacmanForce_packages=( {{.packages.linux.manjaro.pacman_force | quoteList | join " " }})
pacman_packages=( {{.packages.linux.manjaro.pacman | quoteList | join " " }})
aur_packages=( {{.packages.linux.manjaro.aur | quoteList | join " " }})
installed_packages=($(pacman -Qq))
is_installed() {
[[ " ${installed_packages[*]} " =~ " $1 " ]]
}
to_install_pacmanForce=()
for package in "${pacmanForce_packages[@]}"; do
to_install_pacmanForce+=("$package")
done
# 等待鎖定檔案被移除
wait_for_pacman_unlock
if [[ ${#to_install_pacmanForce[@]} -gt 0 ]]; then
echo " - Installing missing packages via pacman: ${to_install_pacmanForce[@]}"
sudo pacman -S --needed --noconfirm "${to_install_pacmanForce[@]}"
fi
# 等待鎖定檔案被移除
wait_for_pacman_unlock
to_install_pacman=()
for package in "${pacman_packages[@]}"; do
if ! is_installed "$package"; then
to_install_pacman+=("$package")
fi
done
if [[ ${#to_install_pacman[@]} -gt 0 ]]; then
echo " - Installing missing packages via pacman: ${to_install_pacman[@]}"
sudo pacman -S --needed --noconfirm "${to_install_pacman[@]}"
fi
# 等待鎖定檔案被移除
wait_for_pacman_unlock
if ! is_installed "yay"; then
echo " - Installing yay"
sudo pacman -S --needed --noconfirm yay
fi
to_install_aur=()
for package in "${aur_packages[@]}"; do
if ! is_installed "$package"; then
to_install_aur+=("$package")
fi
done
if [[ ${#to_install_aur[@]} -gt 0 ]]; then
echo " - Installing missing AUR packages via yay: ${to_install_aur[@]}"
yay -S --noconfirm "${to_install_aur[@]}"
fi
{{ end -}}
{{ end -}}