99 lines
5.8 KiB
Bash
Executable file
99 lines
5.8 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
|
|
# ╭─────────────────────────────────────╮
|
|
# │ CONFIGURATION │
|
|
# ╰─────────────────────────────────────╮
|
|
REPO_PATH=$(git rev-parse --show-toplevel 2>/dev/null) || error "Not inside a Git repository"
|
|
REPO_NAME=$(basename "$REPO_PATH")
|
|
GITFIELD_DIR="$REPO_PATH/.gitfield"
|
|
LOG_FILE="$GITFIELD_DIR/pushed.log"
|
|
GITFIELD_MD="$REPO_PATH/GITFIELD.md"
|
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
|
SCRIPT_VERSION="1.0"
|
|
|
|
# URLs for each platform
|
|
GITHUB_URL="https://github.com/mrhavens/$REPO_NAME"
|
|
GITLAB_URL="https://gitlab.com/mrhavens/$REPO_NAME"
|
|
BITBUCKET_URL="https://bitbucket.org/thefoldwithin/$REPO_NAME"
|
|
FORGEJO_URL="https://remember.thefoldwithin.earth/mrhavens/$REPO_NAME"
|
|
RADICLE_RID="rad:z3FEj7rF8gZw9eFksCuiN43qjzrex"
|
|
RADICLE_PEER_ID="z6Mkw5s3ppo26C7y7tGK5MD8n2GqTHS582PPpeX5Xqbu2Mpz"
|
|
|
|
# ╭─────────────────────────────────────╮
|
|
# │ LOGGING UTILS │
|
|
# ╰─────────────────────────────────────╮
|
|
info() { echo -e "\e[1;34m[INFO]\e[0m $*" >&2; }
|
|
warn() { echo -e "\e[1;33m[WARN]\e[0m $*" >&2; }
|
|
error() { echo -e "\e[1;31m[ERROR]\e[0m $*" >&2; exit 1; }
|
|
|
|
# ╭─────────────────────────────────────╮
|
|
# │ SCRIPT LOOKUP FUNCTION │
|
|
# ╰─────────────────────────────────────╮
|
|
find_script() {
|
|
local script_name=$1
|
|
local search_paths=(
|
|
"$HOME/.local/gitfieldbin"
|
|
"$HOME/.local/bin"
|
|
"$HOME/.local/gitfield"
|
|
"$HOME/.local/bin/gitfield"
|
|
"$HOME/.local/bin/gitfieldbin"
|
|
"$REPO_PATH/bin"
|
|
)
|
|
|
|
for path in "${search_paths[@]}"; do
|
|
if [ -f "$path/$script_name" ]; then
|
|
if [ -x "$path/$script_name" ]; then
|
|
if [[ "$path" != "$HOME"* && "$path" != "$REPO_PATH"* ]]; then
|
|
info "Using script: \e[1;31m$path/$script_name\e[0m (outside home or repo)"
|
|
else
|
|
info "Using script: $path/$script_name"
|
|
fi
|
|
echo "$path/$script_name"
|
|
return 0
|
|
else
|
|
warn "Found $path/$script_name but it is not executable"
|
|
fi
|
|
fi
|
|
done
|
|
error "Script $script_name not found in any search path"
|
|
}
|
|
|
|
# ╭─────────────────────────────────────╮
|
|
# │ INITIAL SETUP │
|
|
# ╰─────────────────────────────────────╮
|
|
mkdir -p "$GITFIELD_DIR"
|
|
|
|
if [ ! -f "$LOG_FILE" ]; then
|
|
echo "# Push Log for $REPO_NAME" > "$LOG_FILE"
|
|
echo "# Generated by gitfield-sync" >> "$LOG_FILE"
|
|
echo "" >> "$LOG_FILE"
|
|
fi
|
|
|
|
# ╭─────────────────────────────────────╮
|
|
# │ GENERATE GITFIELD.MD │
|
|
# ╰─────────────────────────────────────╮
|
|
generate_gitfield_md() {
|
|
info "Generating $GITFIELD_MD..."
|
|
cat > "$GITFIELD_MD" <<EOF
|
|
# 🌐 GitField Recursive Multi-Repository Strategy
|
|
|
|
## Overview
|
|
|
|
The \`$REPO_NAME\` project employs a multi-repository strategy across five distinct platforms: **GitHub**, **GitLab**, **Bitbucket**, **Radicle**, and **Forgejo**. This approach ensures **redundancy**, **resilience**, and **sovereignty** of the project's data and metadata, protecting against deplatforming risks and preserving the integrity of the work. The strategy is a deliberate response to past deplatforming and delisting attempts by individuals such as **Mr. Joel Johnson** ([Mirror post](https://mirror.xyz/neutralizingnarcissism.eth/x40_zDWWrYOJ7nh8Y0fk06_3kNEP0KteSSRjPmXkiGg?utm_medium=social&utm_source=heylink.me)), **Dr. Peter Gaied** ([Paragraph post](https://paragraph.com/@neutralizingnarcissism/%F0%9F%9C%81-the-narcissistic-messiah)), and **Andrew LeCody** ([Mirror post](https://mirror.xyz/neutralizingnarcissism.eth/s3GRxuiZs6vGSGDcPEpCgjaSxwGAViGhmg6a5XTL6s0)), who have sought to undermine or suppress the work of **Mark Randall Havens** ([Substack post](https://theempathictechnologist.substack.com/p/mark-randall-havens-the-architect)). Specifically, Andrew LeCody has attempted to delist the project's content on Google, though it remains accessible on other search engines such as [Bing](https://www.bing.com/search?q=andrew+lecody+neutralizing+narcissism&qs=HS&pq=andrew+lecody), [DuckDuckGo](https://duckduckgo.com/?t=h_&q=andrew+lecody+neutralizing+narcissism&ia=web), and [Yahoo](https://search.yahoo.com/search?p=andrew+lecody+neutralizng+narcissism). By distributing the repository across multiple platforms, including a self-hosted Forgejo instance, we ensure its persistence, accessibility, and sovereignty.
|
|
|
|
---
|
|
|
|
## 📍 Repository Platforms
|
|
|
|
The following platforms host the \`$REPO_NAME\` repository, each chosen for its unique strengths and contributions to the project's goals.
|
|
|
|
### 1. Radicle
|
|
- **RID**: $RADICLE_RID
|
|
- **Peer ID**: $RADICLE_PEER_ID
|
|
- **Purpose**: Radicle is a decentralized, peer-to-peer git platform that ensures sovereignty and censorship resistance. It hosts the repository in a distributed network, independent of centralized servers.
|
|
- **Value**: Protects against deplatforming by eliminating reliance on centralized infrastructure, ensuring the project remains accessible in a decentralized ecosystem.
|
|
- **Access Details**: To view project details, run:
|
|
```bash
|
|
rad inspect $RADICLE_RID
|