Skip to content

Instantly share code, notes, and snippets.

@IPRIT
Last active April 27, 2026 15:22
Show Gist options
  • Select an option

  • Save IPRIT/31d4babe28ac29aa1663f7134dff1d09 to your computer and use it in GitHub Desktop.

Select an option

Save IPRIT/31d4babe28ac29aa1663f7134dff1d09 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
SKILL_NAME="yandex-delta"
ARCHIVE_SHA256="46069f39caa0a12a3d04140bf46e1fa4196107410e758b8e545af1c679517357"
say() {
printf '%s\n' "$*" >&2
}
fail() {
say "Error: $*"
exit 1
}
has_tty() {
[[ -r /dev/tty && -w /dev/tty ]]
}
ask() {
local prompt="$1"
local answer
has_tty || fail "interactive input is not available; set YANDEX_DELTA_INSTALL_TARGET and retry"
printf '%s' "$prompt" > /dev/tty
IFS= read -r answer < /dev/tty
printf '%s' "$answer"
}
expand_path() {
local value="$1"
case "$value" in
"~") printf '%s\n' "$HOME" ;;
"~/"*) printf '%s/%s\n' "$HOME" "${value#~/}" ;;
*) printf '%s\n' "$value" ;;
esac
}
decode_base64() {
if base64 --decode </dev/null >/dev/null 2>&1; then
base64 --decode
else
base64 -D
fi
}
sha256_file() {
local path="$1"
if command -v shasum >/dev/null 2>&1; then
LC_ALL=C shasum -a 256 "$path" | awk '{print $1}'
elif command -v sha256sum >/dev/null 2>&1; then
LC_ALL=C sha256sum "$path" | awk '{print $1}'
else
return 1
fi
}
choose_target_dir() {
local target="${YANDEX_DELTA_INSTALL_TARGET:-}"
local custom_dir="${YANDEX_DELTA_INSTALL_DIR:-}"
local choice
if [[ -z "$target" ]]; then
say "Where should yandex-delta be installed?"
say " 1) Codex (~/.codex/skills)"
say " 2) Claude Code (~/.claude/skills)"
say " 3) Custom directory"
choice="$(ask "Choose 1/2/3 [2]: ")"
case "${choice:-2}" in
1) target="codex" ;;
2) target="claude-code" ;;
3) target="custom" ;;
*) fail "unknown choice: $choice" ;;
esac
fi
case "$target" in
codex)
expand_path "${CODEX_HOME:-$HOME/.codex}/skills"
;;
claude-code|claude)
expand_path "$HOME/.claude/skills"
;;
custom)
if [[ -z "$custom_dir" ]]; then
custom_dir="$(ask "Directory to install into: ")"
fi
[[ -n "$custom_dir" ]] || fail "custom directory is empty"
expand_path "$custom_dir"
;;
*)
fail "unknown install target: $target"
;;
esac
}
confirm_replace() {
local install_dir="$1"
local answer
[[ -e "$install_dir" ]] || return 0
if [[ "${YANDEX_DELTA_ASSUME_YES:-}" == "1" ]]; then
return 0
fi
answer="$(ask "$install_dir already exists. Replace it? [y/N]: ")"
case "$answer" in
y|Y|yes|YES) return 0 ;;
*) fail "installation cancelled" ;;
esac
}
archive_payload() {
cat <<'YDX_ARCHIVE_BASE64'
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
YDX_ARCHIVE_BASE64
}
main() {
command -v tar >/dev/null 2>&1 || fail "tar is required"
command -v base64 >/dev/null 2>&1 || fail "base64 is required"
command -v mktemp >/dev/null 2>&1 || fail "mktemp is required"
local target_parent install_dir tmp_dir archive_path actual_sha extracted_dir final_tmp
target_parent="$(choose_target_dir)"
target_parent="${target_parent%/}"
if [[ "$(basename "$target_parent")" == "$SKILL_NAME" ]]; then
install_dir="$target_parent"
target_parent="$(dirname "$target_parent")"
else
install_dir="$target_parent/$SKILL_NAME"
fi
confirm_replace "$install_dir"
tmp_dir="$(mktemp -d)"
YDX_INSTALL_TMP_DIR="$tmp_dir"
trap 'rm -rf "${YDX_INSTALL_TMP_DIR:-}"' EXIT
archive_path="$tmp_dir/$SKILL_NAME.tar.gz"
archive_payload | decode_base64 > "$archive_path"
if actual_sha="$(sha256_file "$archive_path")"; then
[[ "$actual_sha" == "$ARCHIVE_SHA256" ]] || fail "archive checksum mismatch"
else
say "Warning: shasum/sha256sum not found; skipping checksum verification"
fi
mkdir -p "$target_parent"
LC_ALL=C tar -xzf "$archive_path" -C "$tmp_dir"
extracted_dir="$tmp_dir/$SKILL_NAME"
[[ -f "$extracted_dir/SKILL.md" ]] || fail "embedded archive is invalid"
final_tmp="$target_parent/.$SKILL_NAME.installing.$$"
rm -rf "$final_tmp"
cp -R "$extracted_dir" "$final_tmp"
rm -rf "$install_dir"
mv "$final_tmp" "$install_dir"
say "Installed $SKILL_NAME to $install_dir"
say "First run may take longer: the skill can download portable Node.js, Playwright, and a browser."
}
main "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment