46 lines
1.4 KiB
Bash
Executable file
46 lines
1.4 KiB
Bash
Executable file
#!/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="[33m"
|
||
GREEN="[32m"
|
||
NC="(B[m"
|
||
fi
|
||
|
||
# Avoiding copy pasting this over and over
|
||
g() { git -C "$REPO" "$@"; }
|
||
|
||
# shellcheck disable=SC2016
|
||
REPO_ABBR='echo ${REPO/"$HOME"/"~"}'
|
||
|
||
# `git pull` everything mentioned in the REPOS_TO_UPDATE variable
|
||
IFS=: read -ra REPOS_TO_UPDATE_ARR <<< "${REPOS_TO_UPDATE:-}:${DOCS_DIR:-}:$HOME/bin:${NIXOS_DIR:-}:$HOME/code/faust-ideas:$HOME/.config/home-manager:$HOME/code/nixvim-config"
|
||
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}"
|