48 lines
1.4 KiB
Bash
Executable File
48 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# rofi-bookmarks: pick a Chromium bookmark and open it (new tab or new window)
|
|
|
|
set -euo pipefail
|
|
awesome-client 'show_dim()' >/dev/null 2>&1
|
|
trap 'awesome-client "hide_dim()" >/dev/null 2>&1' EXIT
|
|
|
|
BOOKMARKS_FILE="$HOME/.config/chromium/Default/Bookmarks"
|
|
|
|
if [ ! -f "$BOOKMARKS_FILE" ]; then
|
|
notify-send "Bookmarks" "Chromium bookmarks file not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Recursively walk the bookmark tree (roots -> bookmark_bar / other / synced)
|
|
# and emit "title\turl" for every leaf ("type": "url"), skipping folders.
|
|
list=$(jq -r '
|
|
def walk_nodes:
|
|
if .type == "url" then
|
|
"\(.name)\t\(.url)"
|
|
elif .children then
|
|
.children[] | walk_nodes
|
|
else
|
|
empty
|
|
end;
|
|
.roots | to_entries[] | .value | walk_nodes
|
|
' "$BOOKMARKS_FILE")
|
|
|
|
if [ -z "$list" ]; then
|
|
notify-send "Bookmarks" "No bookmarks found"
|
|
exit 0
|
|
fi
|
|
|
|
chosen=$(echo "$list" | awk -F'\t' '{print $1}' | rofi -dmenu -i -p "Bookmarks" \
|
|
-theme-str 'listview { lines: 5; }' \
|
|
-theme-str 'window { width: 21%; }' \
|
|
-theme-str 'window { height: 400px; }')
|
|
|
|
[ -z "$chosen" ] && exit 0
|
|
|
|
url=$(echo "$list" | awk -F'\t' -v title="$chosen" '$1 == title { print $2; exit }')
|
|
|
|
[ -z "$url" ] && exit 0
|
|
|
|
# Open in a new tab of the existing Chromium window if one's running,
|
|
# otherwise this also launches Chromium fresh with that tab.
|
|
chromium --new-tab "$url"
|