#!/bin/bash set -euo pipefail IFS=$'\n\t' # ╭─────────────────────────────────────╮ # │ CONFIGURATION │ # ╰─────────────────────────────────────╯ GIT_REMOTE_NAME="github" REPO_NAME=$(basename "$(pwd)") DEFAULT_NAME="Mark Randall Havens" DEFAULT_EMAIL="mark.r.havens@gmail.com" SCRIPT_VERSION="1.0" # ╭─────────────────────────────────────╮ # │ LOGGING UTILS │ # ╰─────────────────────────────────────╯ info() { echo -e "\e[1;34m[INFO]\e[0m $*"; } warn() { echo -e "\e[1;33m[WARN]\e[0m $*"; } error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; } # ╭─────────────────────────────────────╮ # │ TOOLCHAIN SETUP │ # ╰─────────────────────────────────────╯ info "Checking for required tools..." sudo apt update -qq sudo apt install -y git curl jq openssh-client lsb-release || error "Tool install failed" if ! command -v gh &>/dev/null; then info "Installing GitHub CLI..." curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture)] signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg https://cli.github.com/packages stable main" | \ sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null sudo apt update && sudo apt install gh -y || error "GitHub CLI install failed" fi # ╭─────────────────────────────────────╮ # │ AUTH + IDENTITY │ # ╰─────────────────────────────────────╯ if ! gh auth status &>/dev/null; then gh auth login || error "GitHub authentication failed" fi git config --global user.name "${DEFAULT_NAME}" git config --global user.email "${DEFAULT_EMAIL}" # ╭─────────────────────────────────────╮ # │ SSH + GIT INIT │ # ╰─────────────────────────────────────╯ if [ ! -f "$HOME/.ssh/id_ed25519" ]; then ssh-keygen -t ed25519 -C "$DEFAULT_EMAIL" -f "$HOME/.ssh/id_ed25519" -N "" eval "$(ssh-agent -s)" ssh-add "$HOME/.ssh/id_ed25519" gh ssh-key add "$HOME/.ssh/id_ed25519.pub" --title "$(hostname)" || warn "Manual add may be needed" fi if [ ! -d .git ]; then git init git add . git commit -m "Initial commit" fi # ╭─────────────────────────────────────╮ # │ GITHUB REPO CONFIGURATION │ # ╰─────────────────────────────────────╯ USERNAME=$(gh api user | jq -r .login) SSH_REMOTE_URL="git@github.com:$USERNAME/$REPO_NAME.git" WEB_LINK="https://github.com/$USERNAME/$REPO_NAME" if ! git remote get-url "$GIT_REMOTE_NAME" &>/dev/null; then if gh repo view "$USERNAME/$REPO_NAME" &>/dev/null; then git remote add "$GIT_REMOTE_NAME" "$SSH_REMOTE_URL" else gh repo create "$REPO_NAME" --public --source=. --remote="$GIT_REMOTE_NAME" --push || error "Failed to create repo" fi else git remote set-url "$GIT_REMOTE_NAME" "$SSH_REMOTE_URL" fi # ╭─────────────────────────────────────╮ # │ GIT METADATA SNAPSHOT │ # ╰─────────────────────────────────────╯ TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')" DEFAULT_BRANCH="$(git symbolic-ref --short HEAD)" REPO_PATH="$(git rev-parse --show-toplevel)" mkdir -p "$REPO_PATH/.gitfield" && MARKDOWN_FILE="$REPO_PATH/.gitfield/github.sigil.md" LATEST_SHA=$(git rev-parse HEAD) LAST_COMMIT_MSG=$(git log -1 --pretty=format:"%s") LAST_COMMIT_DATE=$(git log -1 --pretty=format:"%ad") LAST_COMMIT_AUTHOR=$(git log -1 --pretty=format:"%an <%ae>") TOTAL_COMMITS=$(git rev-list --count HEAD) TRACKED_FILES=$(git ls-files | wc -l) UNCOMMITTED=$(if ! git diff --quiet || ! git diff --cached --quiet; then echo "Yes"; else echo "No"; fi) LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "None") HOSTNAME=$(hostname) CURRENT_USER=$(whoami) TIMEZONE=$(date +%Z) # ╭─────────────────────────────────────╮ # │ HARDWARE + OS FINGERPRINT BLOCK │ # ╰─────────────────────────────────────╯ OS_NAME=$(uname -s) KERNEL_VERSION=$(uname -r) ARCHITECTURE=$(uname -m) OS_PRETTY_NAME=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"') || OS_PRETTY_NAME="Unknown" DOCKER_CHECK=$(grep -qE '/docker|/lxc' /proc/1/cgroup 2>/dev/null && echo "Yes" || echo "No") WSL_CHECK=$(grep -qi microsoft /proc/version 2>/dev/null && echo "Yes" || echo "No") VM_CHECK=$(systemd-detect-virt 2>/dev/null || echo "Unknown") UPTIME=$(uptime -p 2>/dev/null || echo "Unknown") MAC_ADDR=$(ip link | awk '/ether/ {print $2}' | head -n 1) LOCAL_IP=$(hostname -I | awk '{print $1}') CPU_MODEL=$(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | sed 's/^ //') RAM_GB=$(awk '/MemTotal/ {printf "%.2f", $2/1024/1024}' /proc/meminfo) # ╭─────────────────────────────────────╮ # │ WRITE RICH MARKDOWN ARTIFACT │ # ╰─────────────────────────────────────╯ cat > "$MARKDOWN_FILE" </dev/null; then git push -u "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH" else git push "$GIT_REMOTE_NAME" "$DEFAULT_BRANCH" fi info "✅ GitHub push complete." echo -e "\n🔗 View in browser: $WEB_LINK\n"