Skip to content

Instantly share code, notes, and snippets.

@myinusa
Created March 7, 2026 17:55
Show Gist options
  • Select an option

  • Save myinusa/0d8e043f923c6ad7d21a75a23da97ae9 to your computer and use it in GitHub Desktop.

Select an option

Save myinusa/0d8e043f923c6ad7d21a75a23da97ae9 to your computer and use it in GitHub Desktop.
a-series-of-tools-linux-bootstrap.sh
#!/usr/bin/env bash
set -Eeuo pipefail
LOG_FILE="${HOME}/install-bootstrap.log"
log() {
printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" | tee -a "$LOG_FILE"
}
run() {
log "START: $1"
shift
"$@" 2>&1 | tee -a "$LOG_FILE"
log "DONE: $1"
}
trap 'echo; echo "Failed on line $LINENO. Check log: $LOG_FILE"' ERR
log "Bootstrap install started"
# --- 1. System Services (Tailscale) ---
log "Installing Tailscale (requires sudo)"
curl -fsSL https://tailscale.com/install.sh | sudo sh 2>&1 | tee -a "$LOG_FILE"
# --- 2. Language Managers ---
log "Installing Rustup"
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y 2>&1 | tee -a "$LOG_FILE"
log "Installing pyenv"
curl -fsSL https://pyenv.run | bash 2>&1 | tee -a "$LOG_FILE"
# --- 3. Modern Package Managers ---
log "Installing uv"
curl -LsSf https://astral.sh/uv/install.sh | sh 2>&1 | tee -a "$LOG_FILE"
log "Installing pnpm"
curl -fsSL https://get.pnpm.io/install.sh | sh 2>&1 | tee -a "$LOG_FILE"
log "Installing Bun"
curl -fsSL https://bun.sh/install | bash 2>&1 | tee -a "$LOG_FILE"
log "Installing Claude CLI"
curl -fsSL https://claude.ai/install.sh | bash 2>&1 | tee -a "$LOG_FILE"
cat <<'EOF'
All installers finished.
You may need to reload your shell for PATH changes to take effect:
source "$HOME/.cargo/env" # Rust
export PATH="$HOME/.pyenv/bin:$PATH" # pyenv, if not already added by installer
exec "$SHELL" -l
Log saved to:
~/install-bootstrap.log
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment