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