#!/usr/bin/env bash
#
# Rofi powered menu to take a screenshot of the whole screen, a selected area or
# the active window. The image is then saved and copied to the clipboard.
# Uses: date maim notify-send rofi xclip xdotool
#
# This is lifted from https://gitlab.com/vahnrr/rofi-menus and modified by
# hyperreal <hyperreal64@pm.me> on 2023-09-06T15:09:58-05:00

save_location="${HOME}/screenshots"
if ! test -d "${HOME}/screenshots"; then
    mkdir "${HOME}/screenshots"
fi
screenshot_path="$save_location/$(date +'%Y-%m-%d-%H%M%S').png"

screen=' Screen'
area=' Select area'
window=' Window'

chosen=$(printf '%s;%s;%s' "$screen" "$area" "$window" \
    | rofi -theme-str 'window { width: 10em; height: 10em; }' \
           -P 'Screenshot' \
           -dmenu \
           -sep ';' \
           -selected-row 1)

case "$chosen" in
    "$screen") extra_args='--delay=1' ;;
    "$area")   extra_args='--delay=0.1 --select --highlight --color=0.85,0.87,0.91,0.2' ;;
    "$window") extra_args="--delay=1 --window=$(xdotool getactivewindow)" ;;
    *)         exit 1 ;;
esac

# The variable is used as a command's options, so it shouldn't be quoted.
# shellcheck disable=2086
maim --hidecursor --quiet --quality=3 --format='png' $extra_args "$screenshot_path" && {
    notify-send --icon=org.xfce.screenshooter "Screenshot saved as $screenshot_path"
}