-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·165 lines (146 loc) · 4.48 KB
/
install.sh
File metadata and controls
executable file
·165 lines (146 loc) · 4.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export ROOT
if [[ "${EUID:-$(id -u)}" -eq 0 ]]; then
cat >&2 <<EOF
Do not run this script with sudo.
Run it as your normal user instead:
bash install.sh --full
bash install.sh --user-only
The script calls sudo internally when system changes are required.
For root dotfiles, use:
sudo bash dotfiles/install_root.sh
EOF
exit 1
fi
show_help() {
cat <<EOF
Usage: bash install.sh [OPTIONS]
Options:
--full Install everything (default if no flags are provided)
--user-only Only install dotfiles, user tools, and user scripts (no sudo required)
--system-only Only install packages and system configs
--docker Install Docker (requires apt)
--no-system Skip system configurations (journald, coredump, sysctl)
--dry-run Print what would happen without making any changes
--help Show this help message
EOF
exit 0
}
MODE_FULL=0
MODE_USER_ONLY=0
MODE_SYSTEM_ONLY=0
MODE_DOCKER=0
MODE_NO_SYSTEM=0
export DRY_RUN=0
export INSTALL_SUMMARY_FILE="$(mktemp -t ava_install_summary.XXXXXX)"
# Summary tracking
export SUM_DOT_INSTALLED=0
export SUM_DOT_SKIPPED=0
export SUM_DOT_CONFLICTS=0
export SUM_BACKUPS=0
export SUM_SYS_PROFILES=0
export SUM_SYS_CONFIGS=0
export SUM_DOCKER=0
# Parse arguments
if [[ $# -eq 0 ]]; then
MODE_FULL=1
fi
while [[ $# -gt 0 ]]; do
case "$1" in
--full) MODE_FULL=1 ;;
--user-only) MODE_USER_ONLY=1 ;;
--system-only) MODE_SYSTEM_ONLY=1 ;;
--docker) MODE_DOCKER=1 ;;
--no-system) MODE_NO_SYSTEM=1 ;;
--dry-run) export DRY_RUN=1 ;;
--help) show_help ;;
*) echo "Unknown option: $1" >&2; exit 1 ;;
esac
shift
done
# Resolve effective modes
if [[ $MODE_FULL -eq 1 ]]; then
MODE_USER_ONLY=1
MODE_SYSTEM_ONLY=1
fi
if [[ $MODE_USER_ONLY -eq 1 && $MODE_SYSTEM_ONLY -eq 0 ]]; then
MODE_NO_SYSTEM=1
fi
echo "======================================"
echo " Starting Workstation Installation"
echo "======================================"
if [[ $DRY_RUN -eq 1 ]]; then
echo " *** DRY-RUN MODE: NO CHANGES WILL BE MADE ***"
fi
export HAS_APT=0
if command -v apt-get >/dev/null 2>&1; then
HAS_APT=1
fi
# 1. System packages
if [[ $MODE_SYSTEM_ONLY -eq 1 ]]; then
if [[ $HAS_APT -eq 1 ]]; then
echo ">> Installing base profiles..."
bash "$ROOT/profiles/base.sh"
bash "$ROOT/profiles/dev-tools.sh"
bash "$ROOT/profiles/embedded-reliability.sh"
bash "$ROOT/profiles/desktop.sh"
SUM_SYS_PROFILES=4
else
echo ">> Warning: apt-get not found. Skipping system packages."
fi
fi
# 2. Docker
if [[ $MODE_DOCKER -eq 1 ]]; then
if [[ $HAS_APT -eq 1 ]]; then
echo ">> Installing Docker..."
bash "$ROOT/profiles/docker.sh"
SUM_DOCKER=1
else
echo ">> Warning: apt-get not found. Skipping Docker install."
fi
fi
# 3. System Config
if [[ $MODE_SYSTEM_ONLY -eq 1 && $MODE_NO_SYSTEM -eq 0 ]]; then
echo ">> Applying system configuration..."
bash "$ROOT/system/apply.sh"
SUM_SYS_CONFIGS=1
fi
# 4. User Tools, Shell, Dotfiles & User Config
if [[ $MODE_USER_ONLY -eq 1 ]]; then
echo ">> Preparing user tools..."
bash "$ROOT/profiles/user-tools.sh"
echo ">> Preparing user shell..."
bash "$ROOT/profiles/user-shell.sh"
echo ">> Installing dotfiles..."
bash "$ROOT/dotfiles/install.sh"
echo ">> Installing Neovim plugins..."
bash "$ROOT/profiles/user-nvim.sh"
fi
echo ""
echo "======================================"
echo " Installation Summary"
echo "======================================"
if [[ $DRY_RUN -eq 0 && -n "${INSTALL_SUMMARY_FILE:-}" && -f "$INSTALL_SUMMARY_FILE" ]]; then
source "$INSTALL_SUMMARY_FILE"
rm -f "$INSTALL_SUMMARY_FILE"
fi
echo " Dotfiles Linked : $SUM_DOT_INSTALLED"
echo " Dotfiles Skipped : $SUM_DOT_SKIPPED"
echo " Manual Conflicts : $SUM_DOT_CONFLICTS"
echo " Backups Created : $SUM_BACKUPS"
echo " Profiles Installed : $SUM_SYS_PROFILES"
echo " Sys Config Applied : $SUM_SYS_CONFIGS"
echo " Docker Installed : $SUM_DOCKER"
echo "======================================"
echo " Next Steps:"
if [[ $MODE_USER_ONLY -eq 1 ]]; then
echo " - Reload your shell: exec zsh"
echo " - Start a tmux session: tmux new -s work"
fi
if [[ $SUM_SYS_CONFIGS -gt 0 ]]; then
echo " - Check crash dumps: coredumpctl list"
echo " - Debug a service: debug-service <service-name>"
fi
echo "======================================"