154 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/zsh
 | 
						|
 | 
						|
# ./install.zsh $HOST
 | 
						|
 | 
						|
function at-repos-env() {
 | 
						|
	host=$1
 | 
						|
	if [ -z "$1" ];then
 | 
						|
		host=syu.is
 | 
						|
	fi
 | 
						|
	did=did:plc:6qyecktefllvenje24fcxnie
 | 
						|
	icon=https://git.syui.ai/ai/at/raw/branch/main/icons/Logotype.tsx
 | 
						|
	repos=(
 | 
						|
		https://github.com/did-method-plc/did-method-plc
 | 
						|
		https://github.com/bluesky-social/indigo
 | 
						|
		https://github.com/bluesky-social/atproto
 | 
						|
		https://github.com/bluesky-social/social-app
 | 
						|
		https://github.com/bluesky-social/feed-generator
 | 
						|
	)
 | 
						|
	d=${0:a:h}
 | 
						|
	dh=${0:a:h:h}
 | 
						|
	name=${host%%.*}
 | 
						|
	domain=${host##*.}
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-json() {
 | 
						|
	f=~/.config/atproto/token.json
 | 
						|
	j="{ \"did\": \"did:plc:6qyecktefllvenje24fcxnie\", \"didDoc\": { \"service\": [ { \"serviceEndpoint\": \"https://syu.is\" } ] }, \"handle\": \"ai.syu.is\", \"accessJwt\": \"xxx\" }"
 | 
						|
	if [ ! -f "$f" ];then
 | 
						|
		mkdir -p ~/.config/atproto
 | 
						|
		echo $j >> $f
 | 
						|
	fi
 | 
						|
	echo $f
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-token() {
 | 
						|
	at-repos-json
 | 
						|
	if [ -z "$host" ] && [ -f $f ];then
 | 
						|
		host=`cat $f|jq -r ".didDoc.service.[].serviceEndpoint"`
 | 
						|
		handle=`cat $f|jq -r ".handle"`
 | 
						|
		did=`cat $f|jq -r ".did"`
 | 
						|
		token=`cat $f|jq -r ".token"`
 | 
						|
		host=${host##*/}
 | 
						|
	fi
 | 
						|
	name=${host%%.*}
 | 
						|
	domain=${host##*.}
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-clone() {
 | 
						|
	if [ ! -d $d/repos ];then
 | 
						|
		mkdir -p $d/repos
 | 
						|
	fi
 | 
						|
	cd $d/repos
 | 
						|
	for ((i=1; i<=${#repos}; i++)); do
 | 
						|
		repo=${repos[$i]}
 | 
						|
		echo $repo
 | 
						|
		if [ ! -d $d/repos/${repo##*/} ];then
 | 
						|
			git clone $repo
 | 
						|
		fi
 | 
						|
	done
 | 
						|
	if [ ! -f $d/repos/feed-generator/Dockerfile ] && [ -f $d/docker/feed/Dockerfile ];then
 | 
						|
		cp -rf $d/docker/feed/Dockerfile $d/repos/feed-generator/
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-pull() {
 | 
						|
	cd $d/repos
 | 
						|
	for ((i=1; i<=${#repos}; i++)); do
 | 
						|
		repo=${repos[$i]}
 | 
						|
		echo $repo
 | 
						|
		if [ -d $d/repos/${repo##*/} ];then
 | 
						|
			cd $d/repos/${repo##*/}
 | 
						|
			if ! git pull;then
 | 
						|
				rm -rf $d/repos/${repo##*/}
 | 
						|
				at-repos-clone
 | 
						|
			fi
 | 
						|
		fi
 | 
						|
	done
 | 
						|
	cd $d
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-social-app-icon() {
 | 
						|
	curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/main/src/view/icons/Logotype.tsx -o $d/repos/social-app/src/view/icons/Logotype.tsx
 | 
						|
	if [ -d $d/icons ];then
 | 
						|
		mkdir -p $d/icons
 | 
						|
	fi
 | 
						|
	cp -rf $d/repos/social-app/src/view/icons/Logotype.tsx $d/icons/
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-social-app-icon-origin() {
 | 
						|
	curl -sL $icon -o $d/icons/Logotype.tsx
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-social-app-write() {
 | 
						|
	did_admin=did:plc:z72i7hdynmk6r22z27h6tvur
 | 
						|
 | 
						|
	dt=$d/repos/social-app/src
 | 
						|
	cd $dt
 | 
						|
	grep -R bsky.social .|cut -d : -f 1|sort -u|xargs sed -i "s/bsky.social/${host}/g"
 | 
						|
	grep -R bsky.app .|cut -d : -f 1|sort -u|xargs sed -i "s/bsky.app/web.${host}/g"
 | 
						|
	f=$dt/lib/constants.ts
 | 
						|
	sed -i "s/public.api.web/bsky/g" $f
 | 
						|
	f=$dt/view/icons/Logotype.tsx
 | 
						|
	o=$d/icons/Logotype.tsx
 | 
						|
	cp -rf $o $f
 | 
						|
 | 
						|
	f=$dt/view/com/util/UserAvatar.tsx
 | 
						|
	curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/refs/heads/main/src/view/com/util/UserAvatar.tsx -o $f
 | 
						|
	sed -i "s#/img/avatar/plain/#https://cdn.bsky.app/img/avatar/plain/#g" $f
 | 
						|
	sed -i "s#/img/avatar_thumbnail/plain/#https://bsky.${host}/img/avatar/plain/#g" $f
 | 
						|
	sed -i "s#source={{uri: avatar}}#source={{ uri: hackModifyThumbnailPath(avatar, 1 > 0), }}#g" $f
 | 
						|
	grep -R $did_admin .|cut -d : -f 1|sort -u|xargs sed -i "s/${did_admin}/${did}/g"
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-bsky-patch() {
 | 
						|
	f=$d/repos/atproto/services/bsky/api.js
 | 
						|
	curl -sL https://raw.githubusercontent.com/bluesky-social/atproto/refs/heads/main/services/bsky/api.js -o $f
 | 
						|
	d_=$d/repos/atproto
 | 
						|
	p_=$d/patching/105-atproto-services-for-docker.diff
 | 
						|
	cd ${d_}
 | 
						|
	if [ ! -f ${p_} ];then
 | 
						|
		# https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff
 | 
						|
		echo download patch: https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff
 | 
						|
		curl -sLO https://raw.githubusercontent.com/itaru2622/bluesky-selfhost-env/refs/heads/master/patching/105-atproto-services-for-docker.diff
 | 
						|
	else
 | 
						|
		echo local patch
 | 
						|
	fi
 | 
						|
	echo "applying patch: under ${f} for ${p_}"
 | 
						|
	pushd ${d_}
 | 
						|
	patch -p1 < ${p_}
 | 
						|
	popd
 | 
						|
	exit
 | 
						|
}
 | 
						|
 | 
						|
function at-repos-docker() {
 | 
						|
	cd $d
 | 
						|
	sudo docker compose build && sudo docker compose up -d
 | 
						|
}
 | 
						|
 | 
						|
at-repos-env
 | 
						|
at-repos-clone
 | 
						|
at-repos-pull
 | 
						|
at-repos-social-app-icon
 | 
						|
at-repos-social-app-icon-origin
 | 
						|
at-repos-social-app-write
 | 
						|
at-repos-bsky-patch
 | 
						|
 | 
						|
echo "[y]docker compose build && up"
 | 
						|
read key
 | 
						|
case $key in
 | 
						|
	[yY])
 | 
						|
		at-repos-docker
 | 
						|
		;;
 | 
						|
esac
 |