86 lines
2.6 KiB
Bash
86 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
# Rofi web search - with DuckDuckGo result preview
|
|
# Supports both Hyprland (Wayland) and dwm (X11)
|
|
|
|
# ==============================================================================
|
|
# Environment Detection
|
|
# ==============================================================================
|
|
if [[ -n "${HYPRLAND_INSTANCE_SIGNATURE:-}" ]]; then
|
|
WM="hyprland"
|
|
else
|
|
WM="dwm"
|
|
fi
|
|
|
|
switch_to_browser() {
|
|
if [[ "$WM" == "hyprland" ]]; then
|
|
hyprctl dispatch workspace 70
|
|
else
|
|
# Focus primary monitor first if not on mobile (single monitor) profile
|
|
[[ $(autorandr --detected) != "mobile" ]] && echo "mon-prim" > /tmp/dwm.fifo
|
|
echo "browser" > /tmp/dwm.fifo
|
|
fi
|
|
}
|
|
|
|
# Step 1: Query input (no list)
|
|
QUERY=$(echo "" | rofi -dmenu -p "Search : " -l 0)
|
|
[ -z "$QUERY" ] && exit 0
|
|
|
|
# Check if input looks like a URL - open directly
|
|
if echo "$QUERY" | grep -qE '\.(com|org|net|io|dev|co|me|gov|edu|app|xyz|info)(/|$)'; then
|
|
# Add https:// if no protocol specified
|
|
[[ "$QUERY" =~ ^https?:// ]] || QUERY="https://$QUERY"
|
|
switch_to_browser
|
|
xdg-open "$QUERY"
|
|
exit 0
|
|
fi
|
|
|
|
# Step 2: Engine selection (DuckDuckGo first)
|
|
ENGINE=$(printf " DuckDuckGo\n Google\n MyNixOS\n Nixpkgs\n NerdFonts" | rofi -dmenu -p "Engine : " -no-custom -l 5)
|
|
[ -z "$ENGINE" ] && exit 0
|
|
|
|
# Remove icon prefix
|
|
ENGINE="${ENGINE#* }"
|
|
|
|
ENCODED=$(echo "$QUERY" | sed 's/ /%20/g; s/&/%26/g; s/?/%3F/g; s/=/%3D/g')
|
|
|
|
case "$ENGINE" in
|
|
"DuckDuckGo")
|
|
# Fetch top 5 results using ddgr
|
|
RESULTS=$(ddgr --json -n 5 "$QUERY" 2>/dev/null | jq -r '.[] | "\(.title)\t\(.url)"')
|
|
|
|
if [ -z "$RESULTS" ]; then
|
|
# Fallback to direct search if no results
|
|
switch_to_browser
|
|
xdg-open "https://duckduckgo.com/?q=$ENCODED"
|
|
exit 0
|
|
fi
|
|
|
|
# Show results in rofi (title only)
|
|
TITLES=$(echo "$RESULTS" | cut -f1)
|
|
SELECTED=$(echo "$TITLES" | rofi -dmenu -p "Results : " -l 5)
|
|
[ -z "$SELECTED" ] && exit 0
|
|
|
|
# Get URL for selected title
|
|
URL=$(echo "$RESULTS" | grep "^$SELECTED " | cut -f2)
|
|
if [ -n "$URL" ]; then
|
|
switch_to_browser
|
|
xdg-open "$URL"
|
|
fi
|
|
;;
|
|
"Google")
|
|
switch_to_browser
|
|
xdg-open "https://www.google.com/search?q=$ENCODED"
|
|
;;
|
|
"MyNixOS")
|
|
switch_to_browser
|
|
xdg-open "https://mynixos.com/search?q=$ENCODED"
|
|
;;
|
|
"Nixpkgs")
|
|
switch_to_browser
|
|
xdg-open "https://search.nixos.org/packages?query=$ENCODED"
|
|
;;
|
|
"NerdFonts")
|
|
switch_to_browser
|
|
xdg-open "https://www.nerdfonts.com/cheat-sheet?q=$ENCODED"
|
|
;;
|
|
esac
|