Files
dotfiles/config/scripts/.local/scripts/rofi-cliphist
2026-02-06 11:05:58 +01:00

33 lines
987 B
Bash
Executable File

#!/usr/bin/env bash
# Description:
# ~~Quick~~ snippet for cliphist + rofi + wl-copy
#
# Credit: https://github.com/sentriz/cliphist/blob/master/contrib/cliphist-rofi-img
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
mkdir -p "$tmp_dir"
read -r -d '' prog <<EOF
/^[0-9]+\s<meta http-equiv=/ { next }
match(\$0, /^([0-9]+)\s(\[\[\s)?binary.*(jpg|jpeg|png|bmp)/, grp) {
system("echo " grp[1] "\\\\\t | cliphist decode >$tmp_dir/"grp[1]"."grp[3])
print \$0"\0icon\x1f$tmp_dir/"grp[1]"."grp[3]
next
}
1
EOF
# Pipeline logic:
# 1. cliphist list: gives "ID <tab> Content"
# 2. gawk: adds icon paths
# 3. rofi -dmenu: shows list, hides column 1 (ID), returns "ID <tab> Content" on select
# 4. cliphist decode: reads ID from line, gets original content
result=$(cliphist list | gawk "$prog" | rofi -dmenu -display-columns 2 -config "$HOME/.config/rofi/dmenu.rasi" -show-icons -p "Clipboard")
if [[ -n "$result" ]]; then
echo "$result" | cliphist decode | wl-copy
fi