#!/usr/bin/env bash set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # shellcheck source=scripts/deploy-manifest.sh source "$REPO_ROOT/scripts/deploy-manifest.sh" echo "Installing from $REPO_ROOT..." for entry in "${DEPLOY_FILES[@]}"; do dest="$HOME/${entry##*:}" mkdir -p "$(dirname "$dest")" cp "$REPO_ROOT/${entry%%:*}" "$dest" done for entry in "${DEPLOY_EXECUTABLES[@]}"; do dest="$HOME/${entry##*:}" mkdir -p "$(dirname "$dest")" cp "$REPO_ROOT/${entry%%:*}" "$dest" chmod +x "$dest" done for entry in "${DEPLOY_DIRS[@]}"; do dest="$HOME/${entry##*:}" rm -rf "$dest" mkdir -p "$dest" cp -r "$REPO_ROOT/${entry%%:*}/." "$dest/" done # Install git hooks into the current repo checkout HOOKS_SRC="$REPO_ROOT/scripts/git-hooks" if [[ -d "$HOOKS_SRC" ]]; then # Unset inherited GIT_DIR/GIT_WORK_TREE — set by git when this script runs as # a hook (e.g. pre-push), they override -C's directory-based discovery and # would resolve against the invoking repo instead of $REPO_ROOT. GIT_HOOKS_DIR="$(env -u GIT_DIR -u GIT_WORK_TREE git -C "$REPO_ROOT" rev-parse --git-path hooks)" [[ "$GIT_HOOKS_DIR" = /* ]] || GIT_HOOKS_DIR="$REPO_ROOT/$GIT_HOOKS_DIR" mkdir -p "$GIT_HOOKS_DIR" for hook_file in "$HOOKS_SRC"/*; do [[ -f "$hook_file" ]] || continue hook_name="$(basename "$hook_file")" dest_hook="$GIT_HOOKS_DIR/$hook_name" cp "$hook_file" "$dest_hook" chmod +x "$dest_hook" done fi echo "" echo "Deployed:" for entry in "${DEPLOY_FILES[@]}" "${DEPLOY_EXECUTABLES[@]}"; do echo " ~/${entry##*:}" done for entry in "${DEPLOY_DIRS[@]}"; do echo " ~/${entry##*:}/" done