#!/bin/bash set -e NOTIFY_APPNAME="$(basename "$0")" NOTIFY_ICONPATH="/usr/share/icons/Xenlism-Wildfire/Apps/screenshot.svg" FILENAME="$(date '+%s%N' | sha256sum | head -c7).png" DIRECTORY="$HOME/pictures/screenshots" SCP_HOST=frebib@Poseidon.nerdhouse.io SCP_PATH=/services/www/files/frebib.net/s URL_PATH=https://frebib.net/s # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ params=$(getopt -o ac -l active,clip -n screenshot -- "$@") eval set -- "$params" unset params while true; do case "$1" in '-a'|'--active') active=1 shift continue;; '-c'|'--clip') clip=1 shift continue;; '--') shift break;; *) echo 'getopt error' >&2 exit 1;; esac done send_notification() { title="$1" body="$2" replace_id="$3" notify-send \ -a "$NOTIFY_APPNAME" \ -i "$NOTIFY_ICONPATH" \ "$title" "$body" \ $(if [ -n "$replace_id" ]; then printf "%s" "-r $replace_id"; fi) \ -p } # Make the screenshot directory mkdir -p "$DIRECTORY" out_path="$DIRECTORY/$FILENAME" if [ "$active" = '1' ]; then args+=(-i "$(xdotool getactivewindow)") else # Take screenshot geometry read -r winid geom < <(slop -f "%i %g") || : if [ -z "$geom" -o -z "$winid" ]; then send_notification "Screenshot error" "Failed to capture screenshot area" > /dev/null exit 1 fi args=(-g "$geom") # If selection is the root window if xwininfo -id "$winid" | grep -qw root; then isroot=1 args+=(-i "$winid") fi fi # Take the screenshot and save it if ! error=$(maim -m 10 -u -f png ${args[@]} "$out_path" 2>&1); then send_notification "Screenshot error" "Failed to take a screenshot:

$error" >/dev/null exit 1 fi # If the screenshot is a complete window, add a shadow if [ "$isroot" != "1" ]; then # but don't worry if it fails convert "$out_path" \( +clone -background black -alpha set -channel Alpha -evaluate set 60% -shadow 100x16+0+0 \) +swap -background none -layers merge +repage "$out_path" || : fi if [ "$clip" = '1' ]; then # Add image to clipboard xclip -i "$out_path" -selection clipboard -t image/png send_notification "Screenshot captured" "$FILENAME

The image is available in the clipboard" >/dev/null exit 0 fi notif_id=$(send_notification "Screenshot uploading" "$FILENAME" || true) # 'Upload' the screenshot if ! error=$(scp -C $out_path $SCP_HOST:$SCP_PATH 2>&1); then send_notification "Screenshot upload error" "Failed to upload image:

$error" >/dev/null exit 2 fi # Add URL to clipboard out_url="$URL_PATH/$FILENAME" echo "$out_url" | xclip -i -selection clipboard send_notification "Screenshot uploaded!" "$out_url" $notif_id >/dev/null || true