From 4dbfc602bf7c0515628904d08f427e74fd9ec0fb Mon Sep 17 00:00:00 2001 From: PowerUser64 Date: Fri, 16 Sep 2022 19:03:17 -0700 Subject: [PATCH] update dotfiles install script --- .local/bin/dotfiles-install.sh | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/.local/bin/dotfiles-install.sh b/.local/bin/dotfiles-install.sh index bd2550c..14a7387 100755 --- a/.local/bin/dotfiles-install.sh +++ b/.local/bin/dotfiles-install.sh @@ -2,21 +2,22 @@ # this script will install the dotfiles from the target git repository, and back up any conflicting files # credit for the basic outline of this script goes to https://www.atlassian.com/git/tutorials/dotfiles +set -eu + DOTFILES_REPO_DIR="$HOME/git/dotfiles" DOTFILES_REPO_URL="https://git.blakenorth.net/dotfiles" DOTFILES_BACKUP_DIR="$HOME/.dotfiles-backup_$(date +'%Y-%m-%d_%H:%m:%S')" -set -e - -printf "\n Installing dotfiles from $DOTFILES_REPO_URL\n\n" +printf "\n Installing dotfiles from %s\n\n" "$DOTFILES_REPO_URL" # check for the git command and exit if it doesn't exist if ! command -v git > /dev/null;then - echo 'git is not installed or could not be found in PATH, please install git to proceed' - exit 1 + echo 'Error: git is not installed or could not be found in PATH. Please install git to proceed.' >&2 + return 1 fi -git clone --bare "$DOTFILES_REPO_URL" "$DOTFILES_REPO_DIR" || echo "Resuming installation" +mkdir -p "$DOTFILES_REPO_DIR" +git clone --bare "$DOTFILES_REPO_URL" "$DOTFILES_REPO_DIR" || echo " Resuming installation" dot() { git --git-dir="$DOTFILES_REPO_DIR" --work-tree="$HOME" "$@" @@ -24,18 +25,23 @@ dot() { # remove the '> /dev/null' part if things don't seem to work right if ! dot checkout > /dev/null 2>&1; then - echo "Backing up pre-existing dotfiles." + echo " Backing up pre-existing dotfiles." mkdir -p "$DOTFILES_BACKUP_DIR" # get the list of files that need to be backed up - while read -r LINE; do + dot checkout 2>&1 \ + | grep -Po '\t\K.*$' \ + | while read -r LINE; do LINE_DIR="$(dirname "$LINE")" # No file + [ "$LINE_DIR" = '.' ] || [ "$LINE_DIR" = '..' ] && continue mkdir -p "$DOTFILES_BACKUP_DIR/$LINE_DIR" mv "$HOME/$LINE" "$DOTFILES_BACKUP_DIR/$LINE_DIR" - done <<< "$(dot checkout 2>&1 | grep -Po '\t\K.*$')" + done + + # now that all the files are out of the way, we can do one final checkout + dot checkout fi -dot checkout dot config status.showUntrackedFiles no -printf "\nInstallation complete!\n" +printf "\n Installation complete!\n"