Something went wrong. Try again.
📦➔🦋 Store and retrieve files on the Atmosphere
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342#!/usr/bin/env bash
# Environment
## Early-start global variables
### Permutation
_start="$(atfile.util.get_date "" "%s")" # 2_name="Atfile" # 2_envvar_prefix="${_name^^}" # 3_debug="$(atfile.util.get_envvar "${_envvar_prefix}_DEBUG" "$([[ $ATFILE_DEVEL == 1 ]] && echo 1 || echo 0)")" # 4_force_os="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_OS")" # 5
### Combination
_ci="$(atfile.util.get_ci)"_command="$1"_command_args=("${@:2}")_os="$(atfile.util.get_os)"_os_supported=0_is_piped=0_is_sourced=0_meta_author="{:meta_author:}"_meta_did="{:meta_did:}"_meta_repo="{:meta_repo:}"_meta_year="{:meta_year:}"_now="$(atfile.util.get_date)"_path_hook_post_start="$(atfile.util.get_envvar "${_envvar_prefix}_PATH_HOOK_POST_START")"_path_hook_pre_exit="$(atfile.util.get_envvar "${_envvar_prefix}_PATH_HOOK_PRE_EXIT")"_path_hook_pre_start="$(atfile.util.get_envvar "${_envvar_prefix}_PATH_HOOK_PRE_START")"_version="{:version:}"
## "Hello, world!"
atfile.say.debug "Reticulating splines..."atfile.util.source_hook "$_path_hook_pre_start"
## Paths
_path_home="$HOME"
if [[ -n "$SUDO_USER" ]]; then _path_home="$(eval echo "~$SUDO_USER")"fi
_file_envvar="atfile.env"_path_blobs_tmp="/tmp"_path_cache="$_path_home/.cache"_path_envvar="$_path_home/.config"
case $_os in "haiku") _path_blobs_tmp="/boot/system/cache/tmp" _path_cache="$_path_home/config/cache" _path_envvar="$_path_home/config/settings" ;; "linux-termux") _path_blobs_tmp="$PREFIX/tmp" ;; "macos") _path_envvar="$_path_home/Library/Application Support" _path_blobs_tmp="/private/tmp" ;;esac
if [[ -n "$XDG_CONFIG_HOME" ]]; then _path_envvar="$XDG_CONFIG_HOME"fi
_path_blobs_tmp="$_path_blobs_tmp/at-blobs"_path_cache="$_path_cache/atfile"_path_envvar="$(atfile.util.get_envvar "${_envvar_prefix}_PATH_CONF" "$_path_envvar/$_file_envvar")"
## OS detection
atfile.say.debug "Detected OS: $_os"
if [[ $_os != "unknown-"* ]] &&\ [[ $_os == "bsd" ]] ||\ [[ $_os == "haiku" ]] ||\ [[ $_os == "linux" ]] ||\ [[ $_os == "linux-mingw" ]] ||\ [[ $_os == "linux-termux" ]] ||\ [[ $_os == "macos" ]] ; then _os_supported=1fi
## CI detection
[[ -n "$_ci" ]] && atfile.say.debug "Detected CI: $_ci"
## Pipe detection
if [ -p /dev/stdin ] ||\ [[ "$0" == "bash" || $0 == *"/bin/bash" ]]; then _is_piped=1 atfile.say.debug "Piping: $0"fi
## Source detection
if [[ -n ${BASH_SOURCE[0]} ]]; then if [[ "$0" != "${BASH_SOURCE[0]}" ]]; then if [[ "$ATFILE_DEVEL" == 1 ]]; then if [[ -n "$ATFILE_DEVEL_SOURCE" ]]; then _is_sourced=1 atfile.say.debug "Sourcing: $ATFILE_DEVEL_SOURCE" fi else _is_sourced=1 atfile.say.debug "Sourcing: ${BASH_SOURCE[0]}" fi fifi
# Installation
if [[ $_is_piped == 1 ]] ||\ [[ "$1" == "install" ]]; then atfile.util.source_hook "$_path_hook_post_start"
if [[ "$1" == "install" ]]; then atfile.install "$2" "$3" "$4" install_exit="$?" else atfile.install "$1" "$2" "$3" install_exit="$?" fi
atfile.util.source_hook "$_path_hook_pre_exit" atfile.util.print_seconds_since_start_debug
exit $install_exitfi
# Global variables
## Reflection
_prog="$(basename "$(atfile.util.get_realpath "$0")")"_prog_dir="$(dirname "$(atfile.util.get_realpath "$0")")"_prog_path="$(atfile.util.get_realpath "$0")"
## Envvars
### Fallbacks
_max_list_fallback=100
### Defaults
_devel_dist_username_default="$_meta_did"_devel_enable_publish_default=0_disable_auth_check_default=0_disable_ni_exiftool_default=0_disable_ni_md5sum_default=0_disable_ni_mediainfo_default=0_disable_setup_dir_creation_default=0_disable_unsupported_os_warn_default=0_disable_update_checking_default=0_disable_update_command_default=0_enable_fingerprint_default=0_enable_update_git_clobber_default=0#_endpoint_appview_default="https://bsky.zio.blue"_endpoint_appview_default="https://api.bsky.app"#_endpoint_jetstream_default="wss://stream.zio.blue"_endpoint_jetstream_default="$(atfile.util.get_random_pbc_jetstream)"_endpoint_pdsls_default="https://pdsls.dev"_endpoint_plc_directory_default="https://plc.zio.blue"_endpoint_social_app_default="https://bsky.app"_fmt_blob_url_default="[server]/xrpc/com.atproto.sync.getBlob?did=[did]&cid=[cid]"_fmt_out_file_default="[key]__[name]"_enable_fingerprint_default=0_max_list_buffer=6_max_list_default=$(( $(atfile.util.get_term_rows) - _max_list_buffer ))_output_json_default=0
### Set
_devel_dist_password="$(atfile.util.get_envvar "${_envvar_prefix}_DEVEL_DIST_PASSWORD")"_devel_dist_username="$(atfile.util.get_envvar "${_envvar_prefix}_DEVEL_DIST_USERNAME" $_devel_dist_username_default)"_devel_enable_publish="$(atfile.util.get_envvar "${_envvar_prefix}_DEVEL_ENABLE_PUBLISH" $_devel_enable_publish_default)"_disable_auth_check="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_AUTH_CHECK" "$_disable_auth_check_default")"_disable_ni_exiftool="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_NI_EXIFTOOL" "$_disable_ni_exiftool_default")"_disable_ni_md5sum="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_NI_MD5SUM" "$_disable_ni_md5sum_default")"_disable_ni_mediainfo="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_NI_MEDIAINFO" "$_disable_ni_mediainfo_default")"_disable_setup_dir_creation="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_SETUP_DIR_CREATION" "$_disable_setup_dir_creation_default")"_disable_unsupported_os_warn="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_UNSUPPORTED_OS_WARN" "$_disable_unsupported_os_warn_default")"_disable_update_checking="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_UPDATE_CHECKING" $_disable_update_checking_default)"_disable_update_command="$(atfile.util.get_envvar "${_envvar_prefix}_DISABLE_UPDATE_COMMAND" $_disable_update_command_default)"_enable_fingerprint="$(atfile.util.get_envvar "${_envvar_prefix}_ENABLE_FINGERPRINT" "$_enable_fingerprint_default")"_enable_update_git_clobber="$(atfile.util.get_envvar "${_envvar_prefix}_ENABLE_UPDATE_GIT_CLOBBER" "$_enable_update_git_clobber_default")"_endpoint_appview="$(atfile.util.get_envvar "${_envvar_prefix}_ENDPOINT_APPVIEW" "$_endpoint_appview_default")"_endpoint_jetstream="$(atfile.util.get_envvar "${_envvar_prefix}_ENDPOINT_JETSTREAM" "$_endpoint_jetstream_default")"_endpoint_pdsls="$(atfile.util.get_envvar "${_envvar_prefix}_ENDPOINT_PDSLS" "$_endpoint_pdsls_default")"_endpoint_plc_directory="$(atfile.util.get_envvar "${_envvar_prefix}_ENDPOINT_PLC_DIRECTORY" "$_endpoint_plc_directory_default")"_endpoint_social_app="$(atfile.util.get_envvar "${_envvar_prefix}_ENDPOINT_SOCIAL_APP" "$_endpoint_social_app_default")"_fmt_blob_url="$(atfile.util.get_envvar "${_envvar_prefix}_FMT_BLOB_URL" "$_fmt_blob_url_default")"_fmt_out_file="$(atfile.util.get_envvar "${_envvar_prefix}_FMT_OUT_FILE" "$_fmt_out_file_default")"_force_meta_author="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_META_AUTHOR")"_force_meta_did="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_META_DID")"_force_meta_repo="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_META_REPO")"_force_meta_year="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_META_YEAR")"_force_now="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_NOW")"_force_version="$(atfile.util.get_envvar "${_envvar_prefix}_FORCE_VERSION")"_max_list="$(atfile.util.get_envvar "${_envvar_prefix}_MAX_LIST" "$_max_list_default")"_output_json="$(atfile.util.get_envvar "${_envvar_prefix}_OUTPUT_JSON" "$_output_json_default")"_server="$(atfile.util.get_envvar "${_envvar_prefix}_ENDPOINT_PDS")"_password="$(atfile.util.get_envvar "${_envvar_prefix}_PASSWORD")"_test_desktop_uas="Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"_username="$(atfile.util.get_envvar "${_envvar_prefix}_USERNAME")"
## Read-only
_nsid_prefix="blue.zio"_nsid_lock="${_nsid_prefix}.atfile.lock"_nsid_meta="${_nsid_prefix}.atfile.meta"_nsid_upload="${_nsid_prefix}.atfile.upload"_endpoint_pdsls_name="PDSls"_endpoint_social_app_name="Bluesky"
# Setup
## Envvar correction
### Overrides
[[ -n $_force_meta_author ]] && \ _meta_author="$_force_meta_author" &&\ atfile.util.print_override_envvar_debug "Copyright Author" "_meta_author"[[ -n $_force_meta_did ]] && \ _meta_did="$_force_meta_did" &&\ _devel_dist_username="$(atfile.util.get_envvar "${_envvar_prefix}_DEVEL_DIST_USERNAME" "$_meta_did")" &&\ atfile.util.print_override_envvar_debug "DID" "_meta_did"[[ -n $_force_meta_repo ]] && \ _meta_repo="$_force_meta_repo" &&\ atfile.util.print_override_envvar_debug "Repo URL" "_meta_author"[[ -n $_force_meta_year ]] && \ _meta_year="$_force_meta_year" &&\ atfile.util.print_override_envvar_debug "Copyright Year" "_meta_year"[[ -n $_force_now ]] && \ _now="$_force_now" &&\ atfile.util.print_override_envvar_debug "Current Time" "_now"[[ -n $_force_os ]] &&\ _os="$_force_os" &&\ atfile.util.print_override_envvar_debug "OS" "_os"[[ -n $_force_version ]] && \ _version="$_force_version" &&\ atfile.util.print_override_envvar_debug "Version" "_version"
if [[ $_endpoint_social_app != "$_endpoint_social_app_default" ]]; then _endpoint_social_app_name="$(atfile.util.get_root_domain "$_endpoint_social_app")" _endpoint_social_app_name="${_endpoint_social_app_name^}"fi
### Validation
[[ $_output_json == 1 ]] && [[ $_max_list == "$_max_list_default" ]] &&\ atfile.say.debug "Setting ${_envvar_prefix}_MAX_LIST to $_max_list_fallback\n↳ ${_envvar_prefix}_OUTPUT_JSON set to 1" &&\ _max_list=$_max_list_fallback[[ $(( _max_list > _max_list_fallback )) == 1 ]] &&\ atfile.say.debug "Setting ${_envvar_prefix}_MAX_LIST to $_max_list_fallback\n↳ Maximum is $_max_list_fallback" &&\ _max_list=$_max_list_fallback
## OS detection
if [[ $_os_supported == 0 ]]; then if [[ $_disable_unsupported_os_warn == 0 ]]; then atfile.die "Unsupported OS (${_os//unknown-/})\n↳ Set ${_envvar_prefix}_DISABLE_UNSUPPORTED_OS_WARN=1 to ignore" else atfile.say.debug "Ignoring unsupported OS warning\n↳ ${_envvar_prefix}_DISABLE_UNSUPPORTED_OS_WARN set to '$_disable_unsupported_os_warn'" fifi
## Program detection
_prog_hint_jq="https://jqlang.github.io/jq"
[[ "$_os" == "haiku" ]] && _prog_hint_jq="pkgman install jq"
atfile.util.check_prog "curl" "https://curl.se"[[ $_os != "haiku" && $_os != "solaris" ]] && atfile.util.check_prog "file" "https://www.darwinsys.com/file"atfile.util.check_prog "jq" "$_prog_hint_jq"[[ $_disable_ni_md5sum == 0 ]] && atfile.util.check_prog "md5sum" "" "${_envvar_prefix}_DISABLE_NI_MD5SUM"#[[ $_os == "haiku" ]] && atfile.util.check_prog "perl"
# Main
## Command aliases
if [[ $_is_sourced == 0 ]]; then previous_command="$_command"
case "$_command" in "release") _command="build" ;; "open"|"print"|"c") _command="cat" ;; "rm") _command="delete" ;; "download"|"f"|"d") _command="fetch" ;; "download-crypt"|"fc"|"dc") _command="fetch-crypt" ;; "at") _command="handle" ;; "--help"|"-h") _command="help" ;; "get"|"i") _command="info" ;; "ls") _command="list" ;; "did") _command="resolve" ;; "sb") _command="something-broke" ;; "js") _command="stream" ;; "ul"|"u") _command="upload" ;; "--update"|"-U") _command="update" ;; "ub") _command="upload-blob" ;; "uc") _command="upload-crypt" ;; "get-url"|"b") _command="url" ;; "--version"|"-V") _command="version" ;; esac
if [[ $previous_command != "$_command" ]]; then atfile.say.debug "Using command '$_command' for '$previous_command'..." fifi
## Defaults
[[ $_is_sourced == 0 && -z $_command ]] && _command="help"
if [[ "$_command" == "atfile:"* || "$_command" == "at:"* || "$_command" == "https:"* ]]; then _command="handle" _command_args=("$1") atfile.say.debug "Handling '${_command_args[*]}'..."fi
## Invoke
atfile.util.source_hook "$_path_hook_post_start"
if [[ $_is_sourced == 0 ]]; then atfile.auth atfile.invoke "$_command" "${_command_args[@]}"fi
atfile.util.source_hook "$_path_hook_pre_exit"atfile.util.print_seconds_since_start_debug