~kris/dots

srice

ref: e9b48d06a8541f3eda5c4db90382ab3c77183afb srice/.local/bin/dmenu/dsnip -rwxr-xr-x 2.4 KiB
e9b48d06 — Kris Yotam xprofile: systemd-aware pipewire start + blueman-applet; sb-internet: tolerate missing /proc/net/wireless 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