150 lines
4.4 KiB
Cheetah
150 lines
4.4 KiB
Cheetah
{{ if eq .chezmoi.os "linux" -}}
|
||
{{/* ---- 安裝腳本 ------------------------------------------------------- */ -}}
|
||
#!/bin/bash
|
||
|
||
{{/* ==== Debian ======================================================== */ -}}
|
||
{{ if eq .chezmoi.osRelease.id "debian" -}}
|
||
|
||
{{/* ---- 整理待安裝清單 -------------------------------------------------- */ -}}
|
||
{{- $aptInstall := .packages.linux.debian.apt -}}
|
||
apt_packages=( {{ $aptInstall | quoteList | join " " }} )
|
||
|
||
to_install_apt=()
|
||
for package in "${apt_packages[@]}"; do
|
||
to_install_apt+=("$package")
|
||
done
|
||
|
||
echo " - Installing packages via apt: ${to_install_apt[@]}"
|
||
if [ "$EUID" -ne 0 ]; then
|
||
sudo apt install -y "${to_install_apt[@]}"
|
||
else
|
||
apt install -y "${to_install_apt[@]}"
|
||
fi
|
||
{{ end -}}
|
||
|
||
|
||
{{/* ==== Arch Linux / Manjaro ========================================== */ -}}
|
||
{{ if or (eq .chezmoi.osRelease.id "manjaro") (eq .chezmoi.osRelease.id "arch") -}}
|
||
|
||
{{/* ---- 整理待安裝清單 -------------------------------------------------- */ -}}
|
||
|
||
{{- $pacman_force := .packages.linux.arch.pacman_force -}}
|
||
{{- $pacmanInstall := .packages.linux.arch.pacman -}}
|
||
{{- $aurInstall := .packages.linux.arch.aur -}}
|
||
{{- if not .noGUI -}}
|
||
{{- $pacmanInstall := concat .packages.linux.arch.pacman .packages.linux.arch.pacman_gui -}}
|
||
{{- $aurInstall := concat .packages.linux.arch.aur .packages.linux.arch.aur_gui -}}
|
||
{{- end -}}
|
||
|
||
{{ if eq .chezmoi.osRelease.id "manjaro" -}}
|
||
{{- $pacman_force := .packages.linux.manjaro.pacman_force -}}
|
||
{{- $pacmanInstall := .packages.linux.manjaro.pacman -}}
|
||
{{- $aurInstall := .packages.linux.manjaro.aur -}}
|
||
{{- if not .noGUI -}}
|
||
{{- $pacmanInstall := concat .packages.linux.manjaro.pacman .packages.linux.manjaro.pacman_gui -}}
|
||
{{- $aurInstall := concat .packages.linux.manjaro.aur .packages.linux.manjaro.aur_gui -}}
|
||
{{- end -}}
|
||
{{ end -}}
|
||
|
||
{{/* ---- 安裝腳本 ------------------------------------------------------- */ -}}
|
||
{{- /* 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=( {{ $pacman_force | quoteList | join " " }})
|
||
pacman_packages=( {{ $pacmanInstall | quoteList | join " " }} )
|
||
aur_packages=( {{ $aurInstall | 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 -Sy --needed --noconfirm "${to_install_pacmanForce[@]}"
|
||
else
|
||
sudo pacman -Sy
|
||
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 eq .chezmoi.osRelease.id "manjaro" -}}
|
||
if ! is_installed "yay"; then
|
||
echo " - Installing yay"
|
||
sudo pacman -S --needed --noconfirm yay
|
||
fi
|
||
{{ else -}}
|
||
if ! command -v yay &> /dev/null; then
|
||
git clone https://aur.archlinux.org/yay-bin.git && cd yay-bin && makepkg -si
|
||
fi
|
||
{{ end -}}
|
||
|
||
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 -}}
|