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
#!/usr/bin/env bash
###############################################################################
# dllm — LLM launcher via dmenu
#
# Maintainer: Kris Yotam <krisyotam@pm.me>
# License: MIT
# Created: 2026-02-18
###############################################################################
TERM_CMD="st"
# Top-level menu
tier1=$(printf '%s\n' \
" Cloud" \
" Local" \
| dmenu -i -l 2 -p " LLM")
[ -z "$tier1" ] && exit 0
case "$tier1" in
*Cloud*)
choice=$(printf '%s\n' \
" Claude Code" \
" Gemini" \
| dmenu -i -l 2 -p " Cloud")
[ -z "$choice" ] && exit 0
case "$choice" in
*Claude*) setsid -f $TERM_CMD -e claude &>/dev/null ;;
*Gemini*) setsid -f $TERM_CMD -e gemini &>/dev/null ;;
esac
;;
*Local*)
# Pull installed models from ollama
models=$(ollama list 2>/dev/null | tail -n +2 | awk '{print $1}')
if [ -z "$models" ]; then
notify-send "dllm" "No local models installed. Run: ollama pull <model>"
exit 1
fi
# Prefix each model with nerd font icon
menu=$(echo "$models" | while read -r m; do echo " $m"; done)
choice=$(echo "$menu" | dmenu -i -l 20 -p " Local")
[ -z "$choice" ] && exit 0
# Strip icon prefix to get model name
model=$(echo "$choice" | sed 's/^. //')
setsid -f $TERM_CMD -e ollama run "$model" &>/dev/null
;;
esac