source "${ZDOTDIR:-$HOME}/.dotfiles/zsh/functions/figlet-sample.zsh"
source "${ZDOTDIR:-$HOME}/.dotfiles/zsh/functions/prettify-json.zsh"
source "${ZDOTDIR:-$HOME}/.dotfiles/zsh/functions/status.zsh"
+source "${ZDOTDIR:-$HOME}/.dotfiles/zsh/functions/sync-repos.zsh"
+source "${ZDOTDIR:-$HOME}/.dotfiles/zsh/functions/check-repos.zsh"
################################################################################
# Load Modules
--- /dev/null
+#!/usr/bin/env zsh
+
+# Function to check status of a git repository
+check-repo() {
+ local repo_path="$1"
+ local relative_path="${repo_path#$PWD/}"
+
+ pushd "$repo_path" >/dev/null
+
+ print -n "${relative_path}: "
+
+ local status_output=$(git status --porcelain)
+
+ if [[ -z "$status_output" ]]; then
+ print -P "%F{green}CLEAN%f"
+ popd >/dev/null
+ return
+ fi
+
+ local messages=()
+
+ # Check for untracked files (??), modified files (M or space+M), and staged files (non-? non-space in first column)
+ if echo "$status_output" | grep -q "^??"; then
+ messages+=("%F{yellow}UNTRACKED%f")
+ fi
+ if echo "$status_output" | grep -q "^.[M]" || echo "$status_output" | grep -q "^M"; then
+ messages+=("%F{red}MODIFIED%f")
+ fi
+ if echo "$status_output" | grep -q "^[^? ]"; then
+ messages+=("%F{blue}STAGED%f")
+ fi
+
+ print -P "${(j: :)messages}"
+ popd >/dev/null
+}
+
+check-repos() {
+ local start_dir="${1:-.}"
+ fd -H -t d '^\.git$' -x echo {} | sort | sed 's/\/\.git$//' | rg -v "${SYNC_REPOS_IGNORE}" | while read -r repo_path; do
+ check-repo "$repo_path"
+ done
+}
--- /dev/null
+#!/usr/bin/env zsh
+
+# Function to check and process git repositories
+sync-repo() {
+ local repo_path="$1"
+ local relative_path="${repo_path#$PWD/}"
+
+ pushd "$repo_path"
+
+ print -n "${relative_path}: "
+
+ local remotes=($(git remote))
+
+ if [[ ${#remotes[@]} -eq 0 ]]; then
+ print -P "%F{red}NO REMOTES%f"
+ popd
+ return
+ fi
+
+ # Check for required remotes
+ local has_origin=0
+ local has_conchos=0
+ local existing_remotes=""
+
+ for remote in $remotes; do
+ [[ $remote == "origin" ]] && has_origin=1
+ [[ $remote == "conchos" ]] && has_conchos=1
+ existing_remotes="${existing_remotes:+$existing_remotes,}$remote"
+ done
+
+ # If missing any required remote
+ if [[ $has_origin -eq 0 || $has_conchos -eq 0 ]]; then
+ print -P "%F{yellow}MISSING REMOTES ${existing_remotes}%f"
+ popd
+ return
+ fi
+
+ # Try pushing to both remotes
+ if git push --all origin >/dev/null 2>&1 && git push --all conchos >/dev/null 2>&1; then
+ print -P "%F{green}UPDATED%f"
+ else
+ print -P "%F{red}OUTDATED%f"
+ fi
+ popd
+}
+
+sync-repos() {
+ local start_dir="${1:-.}"
+ fd -H -t d '^\.git$' -x echo {} | sort | sed 's/\/\.git$//' | rg -v "${SYNC_REPOS_IGNORE}" | while read -r repo_path; do
+ sync-repo "$repo_path"
+ done
+}