Add dotfiles install and backup script
This commit is contained in:
parent
be4d7a3de8
commit
a895a38b52
1 changed files with 38 additions and 0 deletions
38
.local/bin/dotfiles-install.sh
Executable file
38
.local/bin/dotfiles-install.sh
Executable file
|
@ -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
|
||||
|
Loading…
Add table
Reference in a new issue