From 1f514edcb2718d1952708e1bcb5c40d525a25c76 Mon Sep 17 00:00:00 2001 From: Alicia Sykes Date: Wed, 9 Mar 2022 22:10:48 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Updates=20the=20install=20script?= =?UTF-8?q?=20to=20use=20YADM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 152 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 122 insertions(+), 30 deletions(-) diff --git a/install.sh b/install.sh index 59cc637..7b585c6 100644 --- a/install.sh +++ b/install.sh @@ -1,49 +1,141 @@ #!/usr/bin/env bash +# Bash script to setup or update my dotfiles +# For docs and dotfiles, see: https://github.com/lissy93/dotfiles +# Licensed under MIT - (C) Alicia Sykes, 2022 -# Variables -CYAN_BOLD='\033[1;96m' -YELLOW_BOLD='\033[1;93m' -RED_BOLD='\033[1;31m' -PLAIN_BOLD='\033[1;37m' +# Paths and Settings +YADM_REPO_NAME="Lissy93/Dotfiles" +YADM_REPO="https://github.com/${YADM_REPO_NAME}.git" +# https://github.com/Lissy93/Dotfiles.git +# git@github.com:${YADM_REPO}.git +DOTFILES_DIR="/home/alicia/Documents/personal-projects/dotfiles" +# DOTFILES_DIR="~/dotfiles" +YADM_DATA="$HOME/.local/share/yadm" +BIN_PATH="$HOME/.local/bin" +YADM_BIN="$BIN_PATH/yadm" +TITLE='šŸ§° Lissy93/Dotfiles Setup' -# Print Welcome Message -printf "${CYAN_BOLD}" -printf "ā•­ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā•®\n" -printf "ā”‚ " -printf "${PLAIN_BOLD}" -printf "Dotfile Setup Script " -printf "${CYAN_BOLD}" -printf "ā”‚\n" -printf "ā•°ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā•Æ\n" +# Color Variables +CYAN_B='\033[1;96m' +YELLOW_B='\033[1;93m' +RED_B='\033[1;31m' +GREEN_B='\033[1;32m' +PLAIN_B='\033[1;37m' +RESET='\033[0m' + +# Start timer +start_time=`date +%s` + +# Get system type - Linux / MacOS (Darwin) +system_type=$(uname -s) + +# Function that prints important text in a banner with colored border +# First param is the text to output, then optional color and padding +make_banner () { + bannerText=$1 + lineColor="${2:-$CYAN_B}" + padding="${3:-0}" + titleLen=$(expr ${#bannerText} + 2 + $padding); + lineChar="ā”€"; line="" + for (( i = 0; i < "$titleLen"; ++i )); do line="${line}${lineChar}"; done + banner="${lineColor}ā•­${line}ā•®\nā”‚ ${PLAIN_B}${bannerText}${lineColor} ā”‚\nā•°${line}ā•Æ" + echo -e "\n${banner}\n${RESET}" +} # Checks if a given package is installed command_exists () { hash "$1" 2> /dev/null } -# Shows warning if required modules are missing +# Displays death banner, and terminates app with exit code 1 +terminate () { + make_banner "Installation failed. Terminating..." ${RED_B} + exit 1 +} + +# Checks if command / package (in $1) exists and then shows +# warning or error + terminates depending if required ($2) system_verify () { if ! command_exists $1; then - printf "${YELLOW_BOLD}Warning:" - printf "${PLAIN_BOLD} $1 is not installed\n" + if $2; then + echo -e "šŸš« ${RED_B}Error:${PLAIN_B} $1 is not installed" + terminate + else + echo -e "āš ļø ${YELLOW_B}Warning:${PLAIN_B} $1 is not installed" + fi fi } -system_verify "zsh" -system_verify "vim" -system_verify "git" -system_verify "tmux" +# Show starting banner +make_banner "${TITLE}" "${CYAN_B}" 1 +# Verify required packages are installed +system_verify "zsh" false +system_verify "vim" false +system_verify "git" true +system_verify "tmux" false +system_verify "yadm" false -set -e +# If on Mac, offer to install Brew +if [ "$system_type" = "Darwin" ] && ! command_exists brew; then + read -p "Would you like to install Homebrew? (y/N)" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + echo -en "šŸŗ ${YELLOW_B}Installing Homebrew...${RESET}\n" + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + fi +fi -CONFIG=".install.conf.yaml" -DOTBOT_DIR=".dotbot" -DOTBOT_BIN="bin/dotbot" -BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +# Offer to install YADM if not setup +if ! command_exists yadm && ! [ -a "${YADM_BIN}" ]; then + read -p "Install YDAM now? (y/N)" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + if command_exists brew && [ "$system_type" = "Darwin" ]; then + brew install yadm + else + echo "Installing YADM into ${YADM_DATA}\n" + git clone https://github.com/TheLocehiliosan/yadm.git $YADM_DATA + mkdir -p $BIN_PATH; ln -s $YADM_DATA/yadm $YADM_BIN + fi + else + echo "šŸš« YDAM is required, exiting setup..." && exit 1 + fi +fi -cd "${BASEDIR}" -git -C "${DOTBOT_DIR}" submodule sync --quiet --recursive -git submodule update --init --recursive "${DOTBOT_DIR}" +# If YADM alias not set, then point it to yadm binary +if ! command_exists yadm; then + shopt -s expand_aliases + alias yadm=$YADM_BIN +fi -"${BASEDIR}/${DOTBOT_DIR}/${DOTBOT_BIN}" -d "${BASEDIR}" -c "${CONFIG}" "${@}" +# Download / update dotfiles repo with YADM +if [[ ! -d "$DOTFILES_DIR" ]] +then + echo "Dotfiles not yet present. Will download ${YADM_REPO_NAME} into ${DOTFILES_DIR}" + mkdir -p "${DOTFILES_DIR}" + cd "${DOTFILES_DIR}" && yadm clone ${YADM_REPO} +else + echo -e "Pulling changes from ${YADM_REPO_NAME} into ${DOTFILES_DIR}" + cd "${DOTFILES_DIR}" && yadm pull +fi + +# If git clone / pull failed, then exit with error +ret=$? +if ! test "$ret" -eq 0 +then + echo >&2 "Failed to fetch dotfiels $ret" + terminate +fi + +# If on Mac, update Brew bundle +if [ "$system_type" = "Darwin" ] && command_exists brew && [ -f "$HOME/.Brewfile" ] +then + echo "Updating homebrew bundle" + brew bundle --global +fi + +# Print success message, and time taken +total_time=$((`date +%s`-start_time)) +make_banner "āœØ Dotfiles configured succesfully in $total_time seconds" ${GREEN_B} 1 +exit 0