130 lines
4.7 KiB
Bash
Executable File
130 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Git + SSH onboarding script for developer environments.
|
|
# Prompts for missing git config, sets recommended options, and helps create and test SSH keys.
|
|
# Author: [ilia] | Created: [Aug 28, 2025]
|
|
|
|
set -euo pipefail # Exit on error, unset vars, and in pipe failures
|
|
|
|
## FUNCTIONS
|
|
|
|
# Prompt for and set global git config if missing
|
|
set_git_config() {
|
|
local key="$1"
|
|
local prompt="$2"
|
|
if ! git config --get "user.${key}" &>/dev/null; then
|
|
read -rp "$prompt" value
|
|
git config --global "user.${key}" "$value"
|
|
fi
|
|
}
|
|
|
|
# Create ed25519 SSH key if missing
|
|
setup_ssh_key() {
|
|
if [ ! -f ~/.ssh/id_ed25519 ]; then
|
|
read -rp "No ed25519 SSH key found! Create one for Git usage? (y/n): " sshyn
|
|
if [[ "$sshyn" =~ ^[Yy]$ ]]; then
|
|
ssh-keygen -t ed25519 -C "$(git config --get user.email)"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Show public SSH key and copy to clipboard
|
|
show_and_copy_ssh_key() {
|
|
if [ -f ~/.ssh/id_ed25519.pub ]; then
|
|
echo "Your public ed25519 SSH key:"
|
|
cat ~/.ssh/id_ed25519.pub
|
|
if command -v xclip &>/dev/null; then
|
|
xclip -sel clip < ~/.ssh/id_ed25519.pub
|
|
echo "Public key copied to clipboard."
|
|
fi
|
|
echo "Add this key to Gitea: http://10.0.30.169:3000/user/settings/keys"
|
|
else
|
|
echo "No public ed25519 SSH key found. You might need to generate it."
|
|
fi
|
|
}
|
|
|
|
# SSH connection test
|
|
test_ssh_connection() {
|
|
read -rp "Test SSH connection to Gitea server? (y/n): " testssh
|
|
if [[ "$testssh" =~ ^[Yy]$ ]]; then
|
|
ssh -T gitvm@10.0.30.169
|
|
fi
|
|
}
|
|
|
|
# Environment verification function
|
|
verify_environment() {
|
|
echo
|
|
echo "=== Environment Verification ==="
|
|
echo
|
|
|
|
# Check key development tools
|
|
echo "🛠️ Development Tools:"
|
|
command -v node >/dev/null && echo " ✓ Node.js: $(node --version)" || echo " ✗ Node.js: Not found"
|
|
command -v python3 >/dev/null && echo " ✓ Python3: $(python3 --version)" || echo " ✗ Python3: Not found"
|
|
command -v docker >/dev/null && echo " ✓ Docker: $(docker --version)" || echo " ✗ Docker: Not found"
|
|
command -v code >/dev/null && echo " ✓ VS Code: $(code --version | head -n1)" || echo " ✗ VS Code: Not found"
|
|
|
|
echo
|
|
echo "🐚 Shell Environment:"
|
|
echo " ✓ Current shell: $SHELL"
|
|
command -v zsh >/dev/null && echo " ✓ Zsh: $(zsh --version)" || echo " ✗ Zsh: Not found"
|
|
command -v tmux >/dev/null && echo " ✓ Tmux: $(tmux -V)" || echo " ✗ Tmux: Not found"
|
|
command -v fzf >/dev/null && echo " ✓ Fzf: $(fzf --version)" || echo " ✗ Fzf: Not found"
|
|
|
|
echo
|
|
echo "📊 Monitoring Tools:"
|
|
command -v htop >/dev/null && echo " ✓ htop: Available" || echo " ✗ htop: Not found"
|
|
command -v btop >/dev/null && echo " ✓ btop: Available" || echo " ✗ btop: Not found"
|
|
command -v bandwhich >/dev/null && echo " ✓ bandwhich: Available" || echo " ✗ bandwhich: Not found"
|
|
|
|
echo
|
|
echo "🔒 Security & VPN:"
|
|
command -v ufw >/dev/null && echo " ✓ UFW: $(ufw --version | head -n1)" || echo " ✗ UFW: Not found"
|
|
systemctl is-active fail2ban >/dev/null 2>&1 && echo " ✓ fail2ban: Active" || echo " ✗ fail2ban: Not active"
|
|
command -v tailscale >/dev/null && echo " ✓ Tailscale: $(tailscale version --short)" || echo " ✗ Tailscale: Not found"
|
|
|
|
echo
|
|
echo "💾 Backup Tools:"
|
|
command -v rsync >/dev/null && echo " ✓ rsync: $(rsync --version | head -n1)" || echo " ✗ rsync: Not found"
|
|
command -v borgbackup >/dev/null && echo " ✓ borgbackup: Available" || echo " ✗ borgbackup: Not found"
|
|
command -v rclone >/dev/null && echo " ✓ rclone: Available" || echo " ✗ rclone: Not found"
|
|
|
|
echo
|
|
echo "🔧 System Tools:"
|
|
command -v jq >/dev/null && echo " ✓ jq: $(jq --version)" || echo " ✗ jq: Not found"
|
|
command -v ripgrep >/dev/null && echo " ✓ ripgrep: $(rg --version | head -n1)" || echo " ✗ ripgrep: Not found"
|
|
command -v fd >/dev/null && echo " ✓ fd-find: Available" || echo " ✗ fd-find: Not found"
|
|
|
|
echo
|
|
echo "For a complete list of installed applications, see applications.md"
|
|
}
|
|
|
|
## MAIN LOGIC
|
|
|
|
echo "Checking Git global config..."
|
|
set_git_config "name" "Enter your Git user name: "
|
|
set_git_config "email" "Enter your Git email: "
|
|
|
|
# Set best-practice Git global defaults
|
|
git config --global credential.helper cache
|
|
git config --global color.ui auto
|
|
|
|
echo
|
|
echo "Current global Git configuration:"
|
|
git config --global --list
|
|
|
|
setup_ssh_key
|
|
show_and_copy_ssh_key
|
|
test_ssh_connection
|
|
|
|
# Ask if user wants to verify environment
|
|
echo
|
|
read -rp "Would you like to verify your development environment? (y/n): " verify
|
|
if [[ "$verify" =~ ^[Yy]$ ]]; then
|
|
verify_environment
|
|
fi
|
|
|
|
echo
|
|
echo "Git/SSH setup complete!"
|
|
echo "📋 See applications.md for the complete list of 60+ installed applications"
|
|
echo "🔧 Run individual commands from the verification section to check specific tools"
|