rbash_sources_json_url() { printf '%s/%s/tree/%s/tree.json\n' \ "$RBASH_REMOTE" "$RBASH_REPO" "$RBASH_REF" } declare -gA _RBASH_DICT rbash-list() { _require_jq || return 1 local item key enabled_marker echo "Available sources:" while IFS= read -r item; do key="$(printf '%s' "$item" | grep -o '^[0-9]\+' || true)" [ -n "$key" ] && _RBASH_DICT["s$key"]="$item" enabled_marker=" " if grep -q -F "rbash_load \"sources/$item\"" "$RBASH_CONFIG"; then enabled_marker="*" fi printf ' %s %s\n' "$enabled_marker" "$item" done < <( rbash_download "$(rbash_sources_json_url)" | jq -r ' .[] | select(.path == "bash/sources" or (.path | startswith("bash/sources/"))) | .path | sub("^bash/sources/?"; "") | select(length > 0) ' ) } r2ensource() { rbash-list || return 1 local ids id selected tmp local -a enable=() read -r -p "Enter the script id XX, delimited by space: " ids for id in $ids; do selected="${_RBASH_DICT["s$id"]}" if [ -z "$selected" ]; then echo "No such id: $id" >&2 return 1 fi if grep -q -F "rbash_load \"sources/$selected\"" "$RBASH_CONFIG"; then echo "$selected is already enabled." continue fi enable+=("$selected") done tmp="$(mktemp)" cp "$RBASH_CONFIG" "$tmp" for selected in "${enable[@]}"; do echo "rbash_load \"sources/$selected\"" >> "$tmp" echo "Enabling $selected" done sort -u "$tmp" > "$RBASH_CONFIG" rm -f "$tmp" rm -rf "$RBASH_CACHE_DIR" } r2dissource() { local ids id tmp pattern echo "Currently enabled sources:" grep -E '^rbash_load "sources/' "$RBASH_CONFIG" | sed 's/^rbash_load "sources\///; s/"$//' | sed 's/^/ /' read -r -p "Enter the script id XX, delimited by space: " ids tmp="$(mktemp)" cp "$RBASH_CONFIG" "$tmp" for id in $ids; do pattern="rbash_load \"sources/${id}_" if ! grep -q -F "$pattern" "$tmp"; then echo "No such id: $id" >&2 rm -f "$tmp" return 1 fi echo "Disabling $id" grep -v -F "$pattern" "$tmp" > "$tmp.next" mv "$tmp.next" "$tmp" done sort -u "$tmp" > "$RBASH_CONFIG" rm -f "$tmp" rm -rf "$RBASH_CACHE_DIR" }