From a895a38b52f9eb4121ef79141d94c384b016dc44 Mon Sep 17 00:00:00 2001 From: PowerUser64 Date: Thu, 12 Aug 2021 02:24:49 -0700 Subject: [PATCH] Add dotfiles install and backup script --- .local/bin/dotfiles-install.sh | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 .local/bin/dotfiles-install.sh diff --git a/.local/bin/dotfiles-install.sh b/.local/bin/dotfiles-install.sh new file mode 100755 index 0000000..ddc3210 --- /dev/null +++ b/.local/bin/dotfiles-install.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# this script will install the dotfiles from the target git repository, and back up any conflicting files +# credit for this idea and basic script outline goes to https://www.atlassian.com/git/tutorials/dotfiles + +DOTFILES_REPO_DIR="$HOME/git/dotfiles" +DOTFILES_REPO_URL="https://git.blakenorth.net/dotfiles" +DOTFILES_BACKUP_DIR="$HOME/.dotfiles-backup" # cannot contain the character '#' + +set -e + +# 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 +fi + +git clone --bare "$DOTFILES_REPO_URL" "$DOTFILES_REPO_DIR" + +dot() { + git --git-dir="$DOTFILES_REPO_DIR" --work-tree="$HOME" "$@" +} + +# remove the '&> /dev/null' part if things don't seem to work right +if dot checkout > /dev/null 2>&1; then + echo "Checked out dotfiles." +else + echo "Backing up pre-existing dotfiles." + # get the list of files that need to be backed up + DOTFILES_BACKUP_LIST=($(dot checkout 2>&1 | grep -Po "\t.*$" | cut -c 1 --complement)) + # create directories for everything that needs one + mkdir -p $(printf '%s\n' "${DOTFILES_BACKUP_LIST[@]}" | grep -Po '.*/' | sed "s#.*#$DOTFILES_BACKUP_DIR/&#g") + # backup the files to avoid them being overwritten + printf '%s\n' "${DOTFILES_BACKUP_LIST[@]}" | xargs -I{} mv "$HOME"/{} "$DOTFILES_BACKUP_DIR"/{} +fi + +dot checkout +dot config status.showUntrackedFiles no +