dotfiles/local/bin/screenie
2025-07-21 12:57:44 +03:30

72 lines
2.1 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
export DISPLAY="${DISPLAY:-:0}"
# Dependencies check
for cmd in xclip import notify-send; do command -v "$cmd" &>/dev/null || { echo "Missing: $cmd" >&2; exit 1; }; done
OUTDIR="${2:-$HOME/files/pics/screenies}"; mkdir -p "$OUTDIR"
FILE="$OUTDIR/$(date +%Y%m%d_%H%M%S).png"
TMP=$(mktemp --suffix=.png); trap 'rm -f "$TMP"' EXIT
show_help(){
cat <<EOF
Usage: $0 [color|full|window] [output_dir]
Environment options:
WATERMARK=1
WATERMARK_TEXT='text'
WATERMARK_POS=position
WATERMARK_SIZE=px
WATERMARK_BG='#rrggbbaa'
EOF
}
post(){
[[ "${WATERMARK:-}" == "1" ]] && {
command -v magick &>/dev/null || { echo "Missing: magick" >&2; exit 1; }
# Watermark subsystem (env overrides supported)
magick "$FILE" \
-gravity "${WATERMARK_POS:-southeast}" \
-pointsize "${WATERMARK_SIZE:-28}" \
-fill white -undercolor "${WATERMARK_BG:-#00000080}" \
-annotate +20+20 "${WATERMARK_TEXT:-$(date '+%Y-%m-%d %H:%M')}" \
"$FILE"
}
xclip -selection clipboard -t image/png -i "$FILE" && notify-send -i "$FILE" "Screenshot: $(basename "$FILE")"
}
colorpicker(){
command -v magick &>/dev/null || { notify-send "Missing: magick"; exit 1; }
if command -v slop &>/dev/null; then
import -window root -crop "$(slop --tolerance=0 || exit 1)" "$TMP"
else
import "$TMP"
fi
hex=$(magick "$TMP" -scale 1x1\! -format "#%[hex:p{0,0}]" info: 2>/dev/null || echo "#??????")
echo "$hex" | xclip -selection clipboard -i && notify-send -i "$TMP" "Color: $hex"
}
capture_full(){
import -window root "$FILE" && post
}
capture_window(){
command -v xdotool &>/dev/null || { echo "Missing: xdotool" >&2; exit 1; }
import -window "$(xdotool getwindowfocus -f)" "$FILE" && post
}
capture_selection(){
import "$FILE" && post
}
main(){
case "${1:-}" in
-h|--help) show_help ;;
color*) colorpicker ;;
full) capture_full ;;
window) capture_window ;;
*) capture_selection ;;
esac
}
main "$@"