.dotfiles/.bin/screenshot

141 lines
3 KiB
Bash
Executable file

#!/usr/bin/env sh
tool="grim"
now=$(date '+%F_%H-%M-%S')
now_iso=$(date -Is)
expire_date=$(date -Is -d "+1hour")
rclone_remote="s3-serguzim-me:public/screenshots"
screenshot_host="https://s3.serguzim.me/public/screenshots"
screenshot_path="/tmp/screenshot_$now.webp"
file="$now.webp"
clip_image()
{
if [ -n "$WAYLAND_DISPLAY" ]
then
wl-copy -t image/png < "$screenshot_path"
else
xclip -t image/png "$screenshot_path" -selection clipboard
fi
}
upload_image()
{
share_url=$(upload_image_immich)
echo "$share_url"
if [ -n "$share_url" ]
then
notify-send "Screenshot" "Uploaded screenshot"
else
notify-send "Screenshot" "Failed to upload screenshot"
fi
xdg-open "$share_url"
# to have link available in clipboard manager
if [ -n "$WAYLAND_DISPLAY" ]
then
wl-copy "$share_url"
wl-copy -p "$share_url"
else
printf '%s' "$share_url" | xclip -selection clipboard
printf '%s' "$share_url" | xclip -selection primary
fi
}
upload_image_rclone()
{
set -e
rclone copyto "$screenshot_path" "$rclone_remote/$file" >/dev/null
echo "$screenshot_host/$file"
}
# Immich url to get api key for service account (skip oauth)
# https://my.immich.app/auth/login?autoLaunch=0
upload_image_immich()
{
set -e
result_upload=$(curl -sSfL "$IMMICH_INSTANCE_URL/api/assets" \
-H 'Content-Type: multipart/form-data' \
-H 'Accept: application/json' \
-H "x-api-key: $IMMICH_API_KEY_SCREENSHOTS" \
-F 'deviceId="screenshots"' \
-F "deviceAssetId=\"screenshots-$screenshot_path\"" \
-F "fileModifiedAt=\"$now_iso\"" \
-F "fileCreatedAt=\"$now_iso\"" \
-F "assetData=@\"$screenshot_path\"")
asset_id=$(echo "$result_upload" | jq -r '.id')
result_share=$(curl -sSfL "$IMMICH_INSTANCE_URL/api/shared-links" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "x-api-key: $IMMICH_API_KEY_SCREENSHOTS" \
-d "{
\"allowDownload\": true,
\"allowUpload\": false,
\"assetIds\": [
\"$asset_id\"
],
\"expiresAt\": \"$expire_date\",
\"showMetadata\": true,
\"type\": \"INDIVIDUAL\"
}")
share_key=$(echo "$result_share" | jq -r '.key')
#share_url="$IMMICH_INSTANCE_URL/share/$share_key/photos/$asset_id"
share_url="$IMMICH_INSTANCE_URL/api/assets/$asset_id/original?key=$share_key"
echo "$share_url"
}
call_screenshot_tool() {
case $tool in
flameshot)
result=$(flameshot gui -r | tee $screenshot_path | wc -c) ;;
grim)
result=$(grim -g "$(slurp -c bd93f9)" - | tee $screenshot_path | wc -c) ;;
*)
echo "Unknown screenshot tool: $tool"
return 1 ;;
esac
if [ "$result" -gt 0 ]
then
return 0
else
return 1
fi
}
main_no_upload()
{
if call_screenshot_tool
then
clip_image
fi
}
main()
{
if [ -n "$1" ] && [ -e "$1" ]
then
magick "$1" "$screenshot_path"
upload_image
clip_image
else
if call_screenshot_tool
then
upload_image
clip_image
fi
fi
}
case $1 in
"--no-upload") main_no_upload ;;
*) main "$1" ;;
esac