#!/bin/bash # updates some important repositories in my home folder (and elsewhere) that exist on multiple devices set -eu # Check for git if ! command -v git > /dev/null; then echo "git is not installed, please install git and try again" exit 1 fi # Set colors if command -v tput > /dev/null; then YELLOW="$(tput setaf 3)" GREEN="$(tput setaf 2)" NC="$(tput sgr0)" elif [ -n "$TERMUX_VERSION" ]; then YELLOW="" GREEN="" NC="(B" fi # Avoiding copy pasting this over and over g() { git -C "$REPO" "$@"; } REPOS_TO_UPDATE="${REPOS_TO_UPDATE:-}" # path_append from https://superuser.com/questions/39751/add-directory-to-path-if-its-not-already-there # checks if a path is already in the PATH and if it exists path_append() { if [ -d "$1" ]; then # shellcheck disable=SC3010 if command '[[' > /dev/null 2>&1 && [[ ":$REPOS_TO_UPDATE:" != *":$1:"* ]]; then REPOS_TO_UPDATE="${REPOS_TO_UPDATE:+"$REPOS_TO_UPDATE:"}$1" else REPOS_TO_UPDATE="$REPOS_TO_UPDATE:$1" fi fi } # shellcheck disable=SC2016 REPO_ABBR='echo ${REPO/"$HOME"/"~"}' path_append "${DOCS_DIR:-}" path_append "$HOME/bin" path_append "${NIXOS_DIR:-}" path_append "$HOME/code/faust-ideas" path_append "$HOME/code/nixvim-config" path_append "$HOME/.config/nvim" # `git pull` everything mentioned in the REPOS_TO_UPDATE variable IFS=: read -ra REPOS_TO_UPDATE_ARR <<< "${REPOS_TO_UPDATE:-}" for REPO in "${REPOS_TO_UPDATE_ARR[@]}"; do if [ -n "$REPO" ]; then if g rev-parse > /dev/null 2>&1; then echo " ${GREEN}Pulling $(eval "$REPO_ABBR")‥${NC}" g pull g diff --quiet || echo "${YELLOW}Warning: Working tree for $(eval "$REPO_ABBR") is dirty${NC}" fi fi UPDATED_STUFF=true done # check for dotfiles updates ${UPDATED_STUFF:-false} && echo echo " ${GREEN}Updating dotfiles…${NC}" dotfiles pull dotfiles diff --quiet || echo "${YELLOW}Warning: Working tree for dotfiles is dirty${NC}"