mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-03 12:47:50 +02:00
84 lines
2.3 KiB
Bash
Executable File
84 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -o pipefail
|
|
|
|
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/omarchy"
|
|
IMAGE_DIR="$STATE_DIR/clipboard-images"
|
|
mkdir -p "$IMAGE_DIR"
|
|
|
|
types=$(wl-paste --list-types 2>/dev/null || true)
|
|
|
|
emit_image() {
|
|
local mime="$1"
|
|
local ext="$2"
|
|
local tmp=""
|
|
local hash=""
|
|
local file=""
|
|
|
|
tmp=$(mktemp --tmpdir="$IMAGE_DIR" clipboard.XXXXXX) || return 0
|
|
if ! timeout 2s wl-paste --type "$mime" > "$tmp" 2>/dev/null || [[ ! -s $tmp ]]; then
|
|
rm -f "$tmp"
|
|
return 0
|
|
fi
|
|
|
|
hash=$(sha256sum "$tmp" | awk '{print $1}')
|
|
file="$IMAGE_DIR/$hash.$ext"
|
|
if [[ -e $file ]]; then
|
|
rm -f "$tmp"
|
|
else
|
|
mv "$tmp" "$file"
|
|
fi
|
|
|
|
jq -cn --arg mime "$mime" --arg path "$file" '{type:"image", mime:$mime, path:$path}'
|
|
}
|
|
|
|
emit_image_stream() {
|
|
local mime="$1"
|
|
local ext="$2"
|
|
local tmp=""
|
|
local hash=""
|
|
local file=""
|
|
|
|
tmp=$(mktemp --tmpdir="$IMAGE_DIR" clipboard.XXXXXX) || return 0
|
|
cat >"$tmp"
|
|
if [[ ! -s $tmp ]]; then
|
|
rm -f "$tmp"
|
|
return 0
|
|
fi
|
|
|
|
hash=$(sha256sum "$tmp" | awk '{print $1}')
|
|
file="$IMAGE_DIR/$hash.$ext"
|
|
if [[ -e $file ]]; then
|
|
rm -f "$tmp"
|
|
else
|
|
mv "$tmp" "$file"
|
|
fi
|
|
|
|
jq -cn --arg mime "$mime" --arg path "$file" '{type:"image", mime:$mime, path:$path}'
|
|
}
|
|
|
|
case "${OMARCHY_CLIPBOARD_WATCH_MIME:-}" in
|
|
image/png) emit_image_stream 'image/png' 'png'; exit 0 ;;
|
|
image/jpeg) emit_image_stream 'image/jpeg' 'jpg'; exit 0 ;;
|
|
image/webp) emit_image_stream 'image/webp' 'webp'; exit 0 ;;
|
|
image/gif) emit_image_stream 'image/gif' 'gif'; exit 0 ;;
|
|
image/bmp) emit_image_stream 'image/bmp' 'bmp'; exit 0 ;;
|
|
image/tiff) emit_image_stream 'image/tiff' 'tiff'; exit 0 ;;
|
|
esac
|
|
|
|
if grep -qx 'image/png' <<<"$types"; then
|
|
emit_image 'image/png' 'png'
|
|
elif grep -qx 'image/jpeg' <<<"$types"; then
|
|
emit_image 'image/jpeg' 'jpg'
|
|
elif grep -qx 'image/webp' <<<"$types"; then
|
|
emit_image 'image/webp' 'webp'
|
|
elif grep -qx 'image/gif' <<<"$types"; then
|
|
emit_image 'image/gif' 'gif'
|
|
elif grep -qx 'image/bmp' <<<"$types"; then
|
|
emit_image 'image/bmp' 'bmp'
|
|
elif grep -qx 'image/tiff' <<<"$types"; then
|
|
emit_image 'image/tiff' 'tiff'
|
|
elif grep -q '^text/' <<<"$types" || grep -qx 'UTF8_STRING' <<<"$types" || grep -qx 'STRING' <<<"$types"; then
|
|
wl-paste --type text --no-newline 2>/dev/null | jq -cRs 'select(length > 0) | {type:"text", text:.}'
|
|
fi
|