dotfiles-install: handle directories with spaces properly, auto resume installation, friendly information messages
This commit is contained in:
parent
9008b44324
commit
24463705ee
1 changed files with 11 additions and 16 deletions
|
@ -1,26 +1,22 @@
|
|||
#!/bin/sh
|
||||
# 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
|
||||
|
||||
## shellcheck
|
||||
# Allow variables in single quotes
|
||||
# shellcheck disable=SC2016
|
||||
# read -d is not posix-complient (but it exists in sh on my machine, so it's probably fine)
|
||||
# shellcheck disable=SC3045
|
||||
# credit for the basic outline of this script 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"
|
||||
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"
|
||||
|
||||
# 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"
|
||||
git clone --bare "$DOTFILES_REPO_URL" "$DOTFILES_REPO_DIR" || echo "Resuming installation"
|
||||
|
||||
dot() {
|
||||
git --git-dir="$DOTFILES_REPO_DIR" --work-tree="$HOME" "$@"
|
||||
|
@ -32,15 +28,14 @@ if ! dot checkout > /dev/null 2>&1; then
|
|||
mkdir -p "$DOTFILES_BACKUP_DIR"
|
||||
|
||||
# get the list of files that need to be backed up
|
||||
dot checkout 2>&1 | grep -Po "(?<=\t)(.*)$" |
|
||||
while read -rd '' LINE; do
|
||||
LINE_DIR="${LINE%%/*}"
|
||||
mkdir -p "$DOTFILES_BACKUP_DIR/${LINE_DIR#"$HOME"}/${LINE##*/}"
|
||||
mv "$FILE" "$DOTFILES_BACKUP_DIR"
|
||||
done
|
||||
while read -r LINE; do
|
||||
LINE_DIR="$(dirname "$LINE")" # No file
|
||||
mkdir -p "$DOTFILES_BACKUP_DIR/$LINE_DIR"
|
||||
mv "$HOME/$LINE" "$DOTFILES_BACKUP_DIR/$LINE_DIR"
|
||||
done <<< "$(dot checkout 2>&1 | grep -Po '\t\K.*$')"
|
||||
fi
|
||||
|
||||
dot checkout
|
||||
dot config status.showUntrackedFiles no
|
||||
|
||||
echo "Done"
|
||||
printf "\nInstallation complete!\n"
|
||||
|
|
Loading…
Add table
Reference in a new issue