#!/usr/bin/sh # @author nate zhou # @since 2025,2026 # address - universal wayland address book manager with query and fuzzy find. # @depends $MENU wtype wl-clipboard cliphist # Also see `../.local/share/address/address.example` # This script has completions: `.config/{z,ba}sh/completions/_scripts.{z,ba}sh` [ "$XDG_SESSION_TYPE" = "wayland" ] \ && MENU="${HOME}/.local/bin/wmenu-color" \ copy_cmd="wl-copy" \ || MENU="dmenu" \ copy_cmd="xsel -b" ADDRESS_BOOK_DIR="${HOME}/.local/share/address" ADDRESS_BOOK="${ADDRESS_BOOK_DIR}/address" menu_prompt="$(basename $0)" editAddress() { $EDITOR $ADDRESS_BOOK } getAddress() { cat $ADDRESS_BOOK | grep -vE "^#|^[[:space:]]*$" \ | $MENU -p "$menu_prompt" -l 6 \ | awk ' {sub(/[^|]*\|/, ""); print}' } # address for recording (with personal info censored) getAddressRecord() { ADDRESS_BOOK="${ADDRESS_BOOK_DIR}/address-record" menu_prompt="${menu_prompt}-record" getAddress } # address with multiple lines (newline character) getAddressMulti() { ADDRESS_BOOK="${ADDRESS_BOOK_DIR}/multi" menu_prompt="${menu_prompt}-multi" selected=$(ls "$ADDRESS_BOOK" | $MENU -p "$menu_prompt" -l 5 -i) cat "${ADDRESS_BOOK}/${selected}" exit 0 } openInQutebrowser() { url="$(getAddress)" [ -z "$url" ] || qutebrowser --target tab-bg-silent "$url" } openInQutebrowserRecord() { url="$(getAddressRecord)" [ -z "$url" ] || qutebrowser --target tab-bg-silent "$url" } case "$1" in -e|--edit) editAddress ;; -r|--record) getAddressRecord | $copy_cmd ;; -m|--multi) getAddressMulti | $copy_cmd ;; -q|--qutebrowser) openInQutebrowser ;; -Q|--qutebrowserRecord) openInQutebrowserRecord ;; *) getAddress | $copy_cmd ;; esac