Files
dotfiles/term/scripts/setup.sh
T
2026-09-21 21:42:09 +02:00

156 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGES_FILE="$SCRIPT_DIR/packages.txt"
# ---------------------------------------------------------------------------
# Read packages.txt, split into pacman / aur / npm sections.
# ---------------------------------------------------------------------------
read_packages() {
local section="pacman"
local current
current=""
while IFS= read -r line || [[ -n "$line" ]]; do
current="${line%%#*}"
current="${current##*( )}"
current="${current%%*( )}"
[[ -z "$current" ]] && continue
case "$current" in
@pacman) section="pacman" ;;
@aur) section="aur" ;;
@npm) section="npm" ;;
*)
case "$section" in
pacman) pacman_pkgs+=("$current") ;;
aur) aur_pkgs+=("$current") ;;
npm) npm_pkgs+=("$current") ;;
esac
;;
esac
done < "$PACKAGES_FILE"
}
declare -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
# ---------------------------------------------------------------------------
# Install sections.
# ---------------------------------------------------------------------------
install_pacman() {
if ((${#pacman_pkgs[@]})); then
echo "==> Installiere Pacman-Pakete: ${pacman_pkgs[*]}"
yay -S --needed "${pacman_pkgs[@]}"
fi
}
install_aur() {
if ((${#aur_pkgs[@]})); then
echo "==> Installiere AUR-Pakete: ${aur_pkgs[*]}"
yay -S --needed "${aur_pkgs[@]}"
fi
}
install_npm() {
if ((${#npm_pkgs[@]})); then
echo "==> Installiere globale npm-Pakete: ${npm_pkgs[*]}"
# Arch installiert npm nach /usr/lib/node_modules (root-owned),
# daher braucht der globale Install sudo.
sudo npm install -g "${npm_pkgs[@]}"
fi
}
# ---------------------------------------------------------------------------
# Post-install configuration.
# ---------------------------------------------------------------------------
set_fish_default_shell() {
if command -v fish >/dev/null 2>&1; then
if [[ "$SHELL" != "/usr/bin/fish" ]]; then
echo "Setze fish als Standard-Shell ..."
chsh -s /usr/bin/fish
else
echo "fish ist bereits die Standard-Shell."
fi
else
echo "Warnung: fish wurde nicht installiert; ueberspringe chsh."
fi
}
install_tmuxifier() {
if [[ -d "$HOME/.tmuxifier" ]]; then
echo "tmuxifier bereits installiert; fahre fort."
else
echo "Klone tmuxifier ..."
git clone https://github.com/jimeh/tmuxifier.git "$HOME/.tmuxifier"
fi
}
install_tmux_tpm() {
if [[ -x "$HOME/.config/tmux/plugins/tpm/tpm" ]]; then
echo "tmux TPM bereits installiert; fahre fort."
else
echo "Klone tmux TPM ..."
mkdir -p "$HOME/.config/tmux/plugins"
git clone https://github.com/tmux-plugins/tpm "$HOME/.config/tmux/plugins/tpm"
fi
}
install_tmux_plugins() {
local tpm_install="$HOME/.config/tmux/plugins/tpm/bin/install_plugins"
if ! command -v tmux >/dev/null 2>&1; then
echo "Warnung: tmux nicht installiert; ueberspringe Plugin-Installation (C-Space I beim ersten Start)."
return 0
fi
if ! command -v git >/dev/null 2>&1; then
echo "Warnung: git nicht installiert; ueberspringe tmux Plugin-Installation."
return 0
fi
if [[ ! -f "$HOME/.config/tmux/tmux.conf" ]]; then
echo "tmux.conf noch nicht verlinkt (stow laeuft nach setup.sh); Plugins werden beim ersten tmux-Start bzw. Re-Run installiert (C-Space I)."
return 0
fi
if [[ ! -x "$tpm_install" ]]; then
echo "Warnung: TPM install_plugins nicht gefunden; ueberspringe tmux Plugin-Installation."
return 0
fi
echo "Installiere tmux-Plugins via TPM ..."
"$tpm_install"
}
add_yazi_git_plugin() {
if command -v yazi >/dev/null 2>&1 && command -v ya >/dev/null 2>&1; then
if ya pkg list 2>/dev/null | grep -q 'yazi-rs/plugins:git'; then
echo "yazi git-Plugin bereits installiert; fahre fort."
else
echo "Fuege yazi git-Plugin hinzu ..."
ya pkg add yazi-rs/plugins:git
fi
fi
}
# ---------------------------------------------------------------------------
# Main
# ---------------------------------------------------------------------------
main() {
# Hinweis: multilib, yay und das System-Update werden von
# basic/setup.sh uebernommen (laeuft vor term im Makefile).
echo "==> Lese Paketliste: $PACKAGES_FILE"
read_packages
install_pacman
install_aur
install_npm
set_fish_default_shell
install_tmuxifier
install_tmux_tpm
install_tmux_plugins
add_yazi_git_plugin
echo "==> Aktualisiere locate-Datenbank ..."
sudo updatedb
echo "Fertig. Starte ein neues Terminal, damit fish und die Umgebung greifen."
}
main