#! /bin/bash set -eu function check_clean() { if ! git diff-index --quiet HEAD -- ; then echo "Git repository is dirty, aborting." git status --short --untracked-files=no exit 1 fi } function dry_run() { rsync -HPrlm \ --itemize-changes \ --dry-run \ --files-from=./tracked-files \ --exclude-from=./.gitignore \ "${source}" "${destination}" } source=${HOME} repo_root=$(git rev-parse --show-toplevel) destination="${1:-$repo_root}" echo "Importing working dotfiles to $destination" dry_run if [ -z "${1+x}" ]; then echo "Performing git repository check..." check_clean fi if [ -z "${2+x}" ]; then read -r -p "Are you sure? [y/N] " response response=${response,,} else response=$2 fi if [[ "$response" =~ ^(yes|y)$ ]]; then rsync -HPrlm \ --itemize-changes \ --files-from=./tracked-files \ --exclude-from=./.gitignore \ "${source}" "${destination}" fi