#!/bin/sh BOLD="$(tput bold)" RED="$(tput setaf 1)" GREEN="$(tput setaf 2)" BLUE="$(tput setaf 4)" NC="$(tput sgr0)" target=$HOME gitdir=$target/.local/share/dots mkdir -p "$(dirname "$gitdir")" baregit() { git --git-dir="$gitdir" --work-tree="$target" "$@" } [ -e "$gitdir" ] || { printf "%b" "${BOLD}${BLUE}Cloning dotfiles...$NC\n" git clone --bare git@git.snaile.de:luca/dotfiles "$gitdir" baregit checkout # baregit config status.showUntrackedFiles no cd "$target" || exit for f in *; do [ "$f" = ".config" ] || [ "$f" = ".local" ] && { echo "$f" >>"$gitdir/info/exclude" rm -rf "$f" } done cd - || exit cat <>"$gitdir/info/exclude" /* !/\.config !/\.local /\.local/share/dots /\.local/share/service EOF echo ".local/share/dots" >>"$gitdir/info/exclude" } printf "%b" "${BOLD}${BLUE}Stashing existing changes...$NC\n" stash_result=$(baregit stash push) needs_pop=1 if [ "$stash_result" = "No local changes to save" ]; then needs_pop=0 fi printf "\n" printf "%b" "${BOLD}${BLUE}Pulling updates from dotfiles repo...$NC\n" old_commit="$(baregit rev-parse HEAD)" baregit pull origin main baregit submodule update --remote --merge printf "\n" if [ $needs_pop -eq 1 ]; then printf "%b" "${BOLD}${BLUE}Popping stashed changes...$NC\n" baregit stash pop fi printf "\n" unmerged_files=$(baregit diff --name-only --diff-filter=U) if [ -n "$unmerged_files" ]; then printf "%b" "${RED}The following files have merge conflicts after popping the stash:$NC\n\n" printf "%s" "$unmerged_files\n\n" printf "%s" "${BOLD}${BLUE}Reverting to previous commit...$NC" baregit checkout "$old_commit" fi printf "%b" "${BOLD}${GREEN}Dotfiles synced successfully!$NC\n" # BOLD="$(tput bold)" # RED="$(tput setaf 1)" # GREEN="$(tput setaf 2)" # BLUE="$(tput setaf 4)" # NC="$(tput sgr0)" # # dgit() { # git -C "$STOW_DIR/$DOTS_PACKAGE" "$@" # } # # printf "%b" "${BOLD}${BLUE}Removing dotfile symlinks...$NC\n\n" # stow -D -d "$STOW_DIR" -t "$HOME" "$DOTS_PACKAGE" || printf "%b" "${RED}Failed to run stow!$NC\n" # # printf "%b" "${BOLD}${BLUE}Stashing existing changes...$NC\n" # stash_result=$(dgit stash push) # needs_pop=1 # if [ "$stash_result" = "No local changes to save" ]; then # needs_pop=0 # fi # printf "\n" # # printf "%b" "${BOLD}${BLUE}Pulling updates from dotfiles repo...$NC\n" # old_commit="$(dgit rev-parse HEAD)" # dgit pull origin main # dgit submodule update --remote --merge # printf "\n" # # if [ $needs_pop -eq 1 ]; then # printf "%b" "${BOLD}${BLUE}Popping stashed changes...$NC\n" # dgit stash pop # fi # printf "\n" # # unmerged_files=$(dgit diff --name-only --diff-filter=U) # if [ -n "$unmerged_files" ]; then # printf "%b" "${RED}The following files have merge conflicts after popping the stash:$NC\n\n" # printf "%s" "$unmerged_files\n\n" # printf "%s" "${BOLD}${BLUE}Reverting to previous commit...$NC" # dgit checkout "$old_commit" # fi # # printf "%b" "${BOLD}${BLUE}Symlinking dotfiles...$NC\n\n" # stow -d "$STOW_DIR" -t "$HOME" "$DOTS_PACKAGE" || printf "%b" "${RED}Failed to run stow!$NC\n" # # printf "%b" "${BOLD}${GREEN}Dotfiles synced successfully!$NC\n"