Skip to content

Instantly share code, notes, and snippets.

@nicolemon
Created October 22, 2025 03:27
Show Gist options
  • Select an option

  • Save nicolemon/811b3def5107ed018e7a778eaa93ee3d to your computer and use it in GitHub Desktop.

Select an option

Save nicolemon/811b3def5107ed018e7a778eaa93ee3d to your computer and use it in GitHub Desktop.
for my git worktree workflow
#!/bin/zsh
# Set up a new workspace with links to shared resources
project_dir=$(pwd)
shared=${project_dir}/.SHARED
worktree=${project_dir}/$1
# files under .SHARED you want hardlinked
hardlink_assets=(
"gitignore.Makefile"
"CLAUDE.local.md"
".claude/settings.local.json"
)
# directories under .SHARED you want softlinked
softlink_assets=(
".claude/commands"
".claude/agents"
)
createHardlink() {
filename="$1"
ln -h ${shared}/${filename} ${worktree}/${filename}
}
createSoftlink() {
filename="$1"
ln -s ${shared}/${filename} ${worktree}/${filename}
}
_verifyExists() {
filename="$1"
test -e "${worktree}/${filename}"
}
verifyExists() {
filename="$1"
_verifyExists ${filename} && (echo "✅ FOUND: ${worktree}/${filename}") || (echo "❌ MISSING: ${worktree}/${filename}")
}
verifySoftlink() {
filename="$1"
test -L "${worktree}/${filename}" && (echo " ✓ softlinked: ${worktree}/${filename}") || (echo " ✘ not softlinked: ${worktree}/${filename}")
}
verifyHardlink() {
filename="$1"
# link_count=$(stat -c %h "${worktree}/${filename}" 2>/dev/null)
link_count=$(stat -f %l "${worktree}/${filename}" 2>/dev/null)
[ "${link_count}" -gt 1 ] && (echo " ✓ hardlinked: ${worktree}/${filename}") || (echo " ✘ not hardlinked: ${worktree}/${filename}")
}
check() {
echo "\nChecking for shared local resources in 📁 ${worktree}...\n"
_check
}
_check() {
for asset in ${hardlink_assets}; do
verifyExists ${asset} && verifyHardlink ${asset}
echo
done
for asset in ${softlink_assets}; do
verifyExists ${asset} && verifySoftlink ${asset}
echo
done
}
link() {
mkdir -p ${worktree}/.claude
for asset in ${hardlink_assets}; do
_verifyExists ${asset} || createHardlink ${asset}
done
for asset in ${softlink_assets}; do
_verifyExists ${asset} || createSoftlink ${asset}
done
echo "\nShared local resources linked in 📁 ${worktree}\n"
_check
}
cleanup() {
for asset in ${hardlink_assets}; do
_verifyExists ${asset} && unlink ${worktree}/${asset}
done
for asset in ${softlink_assets}; do
_verifyExists ${asset} && unlink ${worktree}/${asset}
done
echo "\nShared local resources unlinked in 📁 ${worktree}\n"
_check
}
_exit() {
unset project_dir
unset shared
unset worktree
unset hardlink_assets
unset softlink_assets
exit "$1"
}
if test -d ${worktree}; then
command -v "$2" &>/dev/null && "$2" || check
else
echo "❗ worktree at ${worktree} does not exist" && _exit 1
fi
# vim: set et sts=4 ts=4 sw=4:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment