dotfiles/scripts/.local/bin/sharefile
Marty Oehme a69cc0a517
scripts: Add file upload script
Uses 0x0.st as a file host for quick uploading and sharing from the
commandline.

Use `sharefile` and select a file with `fzf`.
2021-03-05 13:57:25 +01:00

62 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env sh
#
# Select a file and share it through 0x0.st
#
# Examples:
# `sharefile`
# calling without arguments allows you to first select a folder and then
# a file from the folder to share.
# `sharefile ~/my-file.zip`
# calling with a file as argument automatically uploads the file and copies
# share link to clipboard.
# When called with a folder as argument allows you to select file within, uploads it and copies share link.
OXO_URL="https://0x0.st"
folderpicker() {
selected=$(find "${1:-$HOME}" -type d | fzf)
[ "$?" -eq 130 ] && exit 130
echo "$selected"
}
filepicker() {
selected=$(find "${1:-$HOME}" -type f | fzf)
[ "$?" -eq 130 ] && exit 130
echo "$selected"
}
filetooxo() {
curl -F"file=@$1" "$OXO_URL"
}
# exit on escape pressed
exit_check() {
[ "$1" -eq 130 ] && exit 130
}
main() {
if [ $# -eq 0 ]; then
foldpick=$(folderpicker "")
exit_check $?
picked=$(filepicker "$foldpick")
elif [ -f "$1" ]; then
picked="$1"
elif [ -d "$1" ]; then
picked=$(filepicker "$1")
else
printf "Please only provide a folder or file as the optional argument to sharefile." >&2
exit 1
fi
exit_check $?
url=$(filetooxo "$picked")
echo "$url"
if command -v notify-send >/dev/null; then
notify-send "Upload finished" "URL: $url"
fi
# printf "%s" "$url" | nohup xclip -i -selection clipboard -r -verbose -loops 2 >/dev/null 2>&1
printf "%s" "$url" | xsel --clipboard
exit
}
main "$@"