~kris/dots

srice

ref: a4bfa48cdda924f7a77a81e8d8e93e326a01b8a0 srice/.local/bin/dmenu/dsnip -rwxr-xr-x 2.4 KiB
a4bfa48c — Kris Yotam mksh: reliable history hook via HISTFILE growth + binary record parse 2 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env bash
###############################################################################
# dsnip — Bookmark launcher: category browse + full-text search via dmenu
#
# DB: ~/.local/share/karbs/bookmarks.db
# Usage:
#   dsnip          — open launcher
#   dsnip-seed     — import legacy snippets file (run once)
#   bm add         — add a bookmark from the terminal
#
# Maintainer:   Kris Yotam <krisyotam@pm.me>
# License:      MIT
# Created:      2026-04-05
###############################################################################

DB="${XDG_DATA_HOME:-$HOME/.local/share}/karbs/bookmarks.db"
CAT_ICON="󰉋  "
DM="dmenu -i -l 25 -c -bw 2"

sqlite3 "$DB" "
  CREATE TABLE IF NOT EXISTS bookmarks (
    id          INTEGER PRIMARY KEY AUTOINCREMENT,
    name        TEXT NOT NULL,
    url         TEXT NOT NULL UNIQUE,
    category    TEXT NOT NULL DEFAULT 'Uncategorized',
    tags        TEXT NOT NULL DEFAULT '',
    description TEXT NOT NULL DEFAULT ''
  );
" 2>/dev/null

# Escape single quotes for inline SQL
sq() { printf '%s' "${1//\'/\'\'}"; }

build_list() {
    sqlite3 "$DB" "SELECT DISTINCT '${CAT_ICON}' || category FROM bookmarks ORDER BY category;"
    printf '%.0s─' {1..40}; echo
    sqlite3 "$DB" "
        SELECT '[' || category || '] ' || name ||
            CASE WHEN tags != '' THEN '  # ' || tags ELSE '' END
        FROM bookmarks ORDER BY category, name;"
}

chosen=$(build_list | $DM -p "  Bookmarks")
[ -z "$chosen" ] && exit 0
[[ "$chosen" == ─* ]] && exit 0

if [[ "$chosen" == "${CAT_ICON}"* ]]; then
    cat="${chosen#${CAT_ICON}}"
    safe_cat=$(sq "$cat")
    chosen2=$(sqlite3 "$DB" "
        SELECT name || CASE WHEN tags != '' THEN '  # ' || tags ELSE '' END
        FROM bookmarks WHERE category = '${safe_cat}' ORDER BY name;" \
        | $DM -p "  ${cat}")
    [ -z "$chosen2" ] && exit 0
    name=$(printf '%s' "$chosen2" | sed 's/  # .*//')
    safe_name=$(sq "$name")
    url=$(sqlite3 "$DB" "SELECT url FROM bookmarks WHERE category = '${safe_cat}' AND name = '${safe_name}' LIMIT 1;")
else
    name_part=$(printf '%s' "$chosen" | sed 's/  # .*//')
    cat=$(printf '%s' "$name_part" | sed 's/^\[\([^]]*\)\].*/\1/')
    name=$(printf '%s' "$name_part" | sed 's/^\[[^]]*\] //')
    safe_cat=$(sq "$cat")
    safe_name=$(sq "$name")
    url=$(sqlite3 "$DB" "SELECT url FROM bookmarks WHERE category = '${safe_cat}' AND name = '${safe_name}' LIMIT 1;")
fi

[ -z "$url" ] && exit 0
xdg-open "$url" &>/dev/null & disown