vitorpy's Dotfiles

Add server bootstrap script

+149
+149
private_dot_config/private_arch/executable_bootstrap-server.sh
··· 1 + #!/bin/bash 2 + # Bootstrap script for server installations 3 + # Installs packages from packages.txt but skips desktop/GUI applications 4 + 5 + set -e 6 + 7 + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 + PACKAGES_FILE="$SCRIPT_DIR/packages.txt" 9 + 10 + # Color output 11 + GREEN='\033[0;32m' 12 + YELLOW='\033[1;33m' 13 + RED='\033[0;31m' 14 + NC='\033[0m' # No Color 15 + 16 + echo -e "${GREEN}=== Server Bootstrap Script ===${NC}" 17 + echo "Reading packages from: $PACKAGES_FILE" 18 + echo "" 19 + 20 + # Packages to install 21 + PACMAN_PACKAGES=() 22 + AUR_PACKAGES=() 23 + 24 + # Sections to skip (desktop/GUI related) 25 + SKIP_SECTIONS=( 26 + "# Hyprland ecosystem" 27 + "# GNOME Apps" 28 + "# Sway ecosystem" 29 + "# Communication & Productivity" 30 + "# Theming & Fonts" 31 + "# Multimedia & Hardware Acceleration" 32 + ) 33 + 34 + # Individual packages to skip (GUI apps in other sections) 35 + SKIP_PACKAGES=( 36 + "firefox" 37 + "chromium" 38 + "bitwarden" # GUI version, keep bitwarden-cli 39 + "nautilus" 40 + "ghostty" 41 + "vlc" 42 + "vscodium-bin" 43 + "jan-appimage" 44 + "veracrypt" 45 + "framework-tool-tui" 46 + ) 47 + 48 + skip_this_section=false 49 + 50 + while IFS= read -r line || [ -n "$line" ]; do 51 + # Skip empty lines and comments 52 + [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && { 53 + # Check if this is a section header we should skip 54 + for section in "${SKIP_SECTIONS[@]}"; do 55 + if [[ "$line" == "$section"* ]]; then 56 + skip_this_section=true 57 + echo -e "${YELLOW}Skipping section: $line${NC}" 58 + break 59 + fi 60 + done 61 + 62 + # Reset skip flag on any new section that's not in skip list 63 + if [[ "$line" =~ ^[[:space:]]*# ]] && [[ ! " ${SKIP_SECTIONS[@]} " =~ " ${line} " ]]; then 64 + skip_this_section=false 65 + fi 66 + 67 + continue 68 + } 69 + 70 + # Skip if we're in a skipped section 71 + [[ "$skip_this_section" == true ]] && continue 72 + 73 + # Parse package line: "package-name | source" 74 + if [[ "$line" =~ ^([^|]+)\|[[:space:]]*(pacman|aur|flatpak) ]]; then 75 + package="${BASH_REMATCH[1]}" 76 + source="${BASH_REMATCH[2]}" 77 + 78 + # Trim whitespace 79 + package=$(echo "$package" | xargs) 80 + 81 + # Skip individual packages 82 + skip=false 83 + for skip_pkg in "${SKIP_PACKAGES[@]}"; do 84 + if [[ "$package" == "$skip_pkg" ]]; then 85 + skip=true 86 + echo -e "${YELLOW}Skipping GUI package: $package${NC}" 87 + break 88 + fi 89 + done 90 + [[ "$skip" == true ]] && continue 91 + 92 + # Skip flatpak packages on servers 93 + if [[ "$source" == "flatpak" ]]; then 94 + echo -e "${YELLOW}Skipping flatpak: $package${NC}" 95 + continue 96 + fi 97 + 98 + # Add to appropriate array 99 + if [[ "$source" == "pacman" ]]; then 100 + PACMAN_PACKAGES+=("$package") 101 + elif [[ "$source" == "aur" ]]; then 102 + AUR_PACKAGES+=("$package") 103 + fi 104 + fi 105 + done < "$PACKAGES_FILE" 106 + 107 + echo "" 108 + echo -e "${GREEN}Packages to install:${NC}" 109 + echo " Pacman packages: ${#PACMAN_PACKAGES[@]}" 110 + echo " AUR packages: ${#AUR_PACKAGES[@]}" 111 + echo "" 112 + 113 + # Ask for confirmation 114 + read -p "Continue with installation? (y/N) " -n 1 -r 115 + echo 116 + if [[ ! $REPLY =~ ^[Yy]$ ]]; then 117 + echo "Aborted." 118 + exit 1 119 + fi 120 + 121 + # Update system first 122 + echo -e "${GREEN}Updating system...${NC}" 123 + sudo pacman -Syu --noconfirm 124 + 125 + # Install pacman packages 126 + if [ ${#PACMAN_PACKAGES[@]} -gt 0 ]; then 127 + echo "" 128 + echo -e "${GREEN}Installing pacman packages...${NC}" 129 + sudo pacman -S --needed --noconfirm "${PACMAN_PACKAGES[@]}" || { 130 + echo -e "${RED}Some pacman packages failed to install${NC}" 131 + } 132 + fi 133 + 134 + # Install AUR packages (requires yay) 135 + if [ ${#AUR_PACKAGES[@]} -gt 0 ]; then 136 + if command -v yay &> /dev/null; then 137 + echo "" 138 + echo -e "${GREEN}Installing AUR packages...${NC}" 139 + yay -S --needed --noconfirm "${AUR_PACKAGES[@]}" || { 140 + echo -e "${RED}Some AUR packages failed to install${NC}" 141 + } 142 + else 143 + echo -e "${YELLOW}yay not found, skipping AUR packages${NC}" 144 + echo "Install yay first or manually install: ${AUR_PACKAGES[*]}" 145 + fi 146 + fi 147 + 148 + echo "" 149 + echo -e "${GREEN}=== Bootstrap complete! ===${NC}"