dotfiles/.config/shell/bin/upd

68 lines
1.9 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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}"