#!/usr/bin/env bash # Wire up the project-wide dotfiles: # - symlink docs/setup/dotfiles/aliases.zsh → ~/.oh-my-zsh/custom/aliases.zsh # - copy docs/setup/dotfiles/gitconfig.txt to ~/.gitconfig and overlay your identity set -euo pipefail # shellcheck source=./lib.sh source "$(cd "$(dirname "$0")" && pwd)/lib.sh" require_debian require_not_root REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)" if [[ -z "$REPO_ROOT" ]]; then err "Run from inside a git checkout of apf_portal." exit 1 fi DOTFILES_DIR="$REPO_ROOT/docs/setup/dotfiles" # ─── 1. Aliases ─────────────────────────────────────────────────────── SOURCE_ALIASES="$DOTFILES_DIR/aliases.zsh" if [[ ! -f "$SOURCE_ALIASES" ]]; then err "$SOURCE_ALIASES not found." exit 1 fi OMZ_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" if [[ ! -d "$OMZ_CUSTOM" ]]; then err "$OMZ_CUSTOM not found — run 20-zsh.sh first." exit 1 fi TARGET_ALIASES="$OMZ_CUSTOM/aliases.zsh" if [[ -L "$TARGET_ALIASES" \ && "$(readlink -f "$TARGET_ALIASES")" == "$(readlink -f "$SOURCE_ALIASES")" ]]; then skip "aliases.zsh symlink already correct." else if [[ -e "$TARGET_ALIASES" || -L "$TARGET_ALIASES" ]]; then backup="$TARGET_ALIASES.bak.$(date +%s)" mv "$TARGET_ALIASES" "$backup" warn "Existing $TARGET_ALIASES backed up to $backup." fi ln -s "$SOURCE_ALIASES" "$TARGET_ALIASES" ok "Linked $TARGET_ALIASES → $SOURCE_ALIASES." fi # ─── 2. gitconfig — copy + identity overlay ─────────────────────────── SOURCE_GITCONFIG="$DOTFILES_DIR/gitconfig.txt" if [[ ! -f "$SOURCE_GITCONFIG" ]]; then err "$SOURCE_GITCONFIG not found." exit 1 fi TARGET_GITCONFIG="$HOME/.gitconfig" if [[ -f "$TARGET_GITCONFIG" ]] && ! confirm "$TARGET_GITCONFIG exists — overwrite (existing backed up)?"; then skip "Keeping existing $TARGET_GITCONFIG." else if [[ -f "$TARGET_GITCONFIG" ]]; then cp "$TARGET_GITCONFIG" "$TARGET_GITCONFIG.bak.$(date +%s)" fi # Prompt for identity. Defaults: pre-existing config values, else blank. current_name="$(git config --global user.name 2>/dev/null || true)" current_email="$(git config --global user.email 2>/dev/null || true)" read -r -p "Git user.name [${current_name:-}]: " new_name new_name="${new_name:-$current_name}" read -r -p "Git user.email [${current_email:-}]: " new_email new_email="${new_email:-$current_email}" if [[ -z "$new_name" || -z "$new_email" ]]; then err "Both user.name and user.email are required." exit 1 fi cp "$SOURCE_GITCONFIG" "$TARGET_GITCONFIG" # `git config --global` finds and rewrites the [user] section # cleanly even when the source carries a different identity. git config --global user.name "$new_name" git config --global user.email "$new_email" ok "Wrote $TARGET_GITCONFIG with identity $new_name <$new_email>." fi