Add QR code capture (#6705)
Select a screen region and decode the QR code in it to the clipboard, so an otpauth:// setup code shown on screen no longer needs a phone. The decoded value is only ever placed on the clipboard, and marked sensitive so clipboard history skips it. Decoding is restricted to QR so a stray barcode elsewhere on screen can't take the clipboard instead. Co-authored-by: Hlib Kanunnikov <hlibwondertan@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Hlib Kanunnikov
Claude Opus 5
parent
3b08a85ad1
commit
4d0531f351
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# omarchy:summary=Decode a QR code from a screenshot region
|
||||||
|
# omarchy:group=capture
|
||||||
|
# omarchy:examples=omarchy capture qr
|
||||||
|
|
||||||
|
# Keep hyprpicker alive until after grim captures so the screenshot sees the
|
||||||
|
# frozen overlay rather than live content shifting during teardown.
|
||||||
|
cleanup_freeze() {
|
||||||
|
[[ -n $PID ]] && kill $PID 2>/dev/null
|
||||||
|
}
|
||||||
|
trap cleanup_freeze EXIT
|
||||||
|
|
||||||
|
hyprpicker -r -z >/dev/null 2>&1 &
|
||||||
|
PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(slurp 2>/dev/null)
|
||||||
|
|
||||||
|
[[ -z $SELECTION ]] && exit 0
|
||||||
|
|
||||||
|
# Decode QR codes only. Leaving the other symbologies enabled lets dense screen
|
||||||
|
# content false-positive as an EAN or Code 39 barcode and take over the clipboard.
|
||||||
|
RESULT=$(grim -g "$SELECTION" - | zbarimg -q --raw -Sdisable -Sqrcode.enable - 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -z $RESULT ]]; then
|
||||||
|
omarchy-notification-send -g -u critical "No QR code found" "Select a region containing a QR code"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# QR codes routinely carry secrets, like the otpauth:// URIs behind 2FA setup
|
||||||
|
# codes, so the decoded value goes to the clipboard and nowhere else. Printing it
|
||||||
|
# or putting it in the notification would leak it to the session journal and to
|
||||||
|
# the notification history, and an unmarked copy would be retained by clipboard
|
||||||
|
# history. Pasting still works; only the recorded copy is given up.
|
||||||
|
printf '%s' "$RESULT" | wl-copy --sensitive
|
||||||
|
omarchy-notification-send -g "QR code copied to clipboard"
|
||||||
@@ -53,6 +53,7 @@
|
|||||||
"trigger.capture.screenrecord.stop": {"icon":"","label":"Stop Screenrecording","when":"pgrep -f '^gpu-screen-recorder'","action":"omarchy-capture-screenrecording --stop-recording"},
|
"trigger.capture.screenrecord.stop": {"icon":"","label":"Stop Screenrecording","when":"pgrep -f '^gpu-screen-recorder'","action":"omarchy-capture-screenrecording --stop-recording"},
|
||||||
"trigger.capture.screenrecord": {"icon":"","label":"Screenrecord"},
|
"trigger.capture.screenrecord": {"icon":"","label":"Screenrecord"},
|
||||||
"trigger.capture.text": {"icon":"","label":"Text","action":"omarchy-capture-text"},
|
"trigger.capture.text": {"icon":"","label":"Text","action":"omarchy-capture-text"},
|
||||||
|
"trigger.capture.qr": {"icon":"","label":"QR Code","action":"omarchy-capture-qr"},
|
||||||
"trigger.capture.color": {"icon":"","label":"Color","action":"pkill hyprpicker || hyprpicker -a"},
|
"trigger.capture.color": {"icon":"","label":"Color","action":"pkill hyprpicker || hyprpicker -a"},
|
||||||
"trigger.capture.screenrecord.no-audio": {"icon":"","label":"With no audio","action":"omarchy-capture-screenrecording"},
|
"trigger.capture.screenrecord.no-audio": {"icon":"","label":"With no audio","action":"omarchy-capture-screenrecording"},
|
||||||
"trigger.capture.screenrecord.desktop-audio": {"icon":"","label":"With desktop audio","action":"omarchy-capture-screenrecording --with-desktop-audio"},
|
"trigger.capture.screenrecord.desktop-audio": {"icon":"","label":"With desktop audio","action":"omarchy-capture-screenrecording --with-desktop-audio"},
|
||||||
|
|||||||
@@ -146,4 +146,5 @@ xournalpp
|
|||||||
yaru-icon-theme
|
yaru-icon-theme
|
||||||
yay
|
yay
|
||||||
yt-dlp
|
yt-dlp
|
||||||
|
zbar
|
||||||
zoxide
|
zoxide
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
echo "Install QR code scanning support"
|
||||||
|
|
||||||
|
omarchy-pkg-add zbar
|
||||||
Reference in New Issue
Block a user