Link latest screenshot Disable astronvim dashboard Remove unused qutebrowse keybinds Change waybar player info spacing
		
			
				
	
	
		
			141 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			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
 | |
| 		ln -sf "$screenshot_path" "/tmp/screenshot_latest.webp"
 | |
| 		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
 |