11#! /usr/bin/env bash
2- # nbrowser v0.4
2+ # nbrowser v0.5
33# author : odnar-dev <https://github.com/odnar-dev>
44# source : https://github.com/MyOS-ArchLinux/nbrowser
55# license: GPLv3 <https://gnu.org/licenses/gpl-3.0.html>
@@ -13,9 +13,11 @@ declare -A ENGINES
1313
1414ENGINES=(
1515 [" google" ]=" https://www.google.com/search?q="
16+ [" g" ]=" https://www.google.com/search?q="
1617 [" duckduckgo" ]=" https://duckduckgo.com/?q="
1718 [" ddg" ]=" https://duckduckgo.com/?q="
1819 [" startpage" ]=" https://www.startpage.com/do/search?query="
20+ [" sp" ]=" https://www.startpage.com/do/search?query="
1921 [" archwiki" ]=" https://wiki.archlinux.org/index.php?title=Special:Search&search="
2022 [" aur" ]=" https://aur.archlinux.org/packages/?O=0&SeB=nd&outdated=&SB=n&SO=a&PP=50&do_Search=Go&K="
2123 [" github" ]=" https://github.com/search?q="
@@ -25,6 +27,7 @@ ENGINES=(
2527 [" tvdb" ]=" https://www.thetvdb.com/search?query="
2628 [" mal" ]=" https://myanimelist.net/search/all?q="
2729 [" youtube" ]=" https://www.youtube.com/results?search_query="
30+ [" ytb" ]=" https://www.youtube.com/results?search_query="
2831)
2932
3033has () {
@@ -46,9 +49,16 @@ _choose(){
4649 rofi -dmenu -i -p ' Select Item ' -theme-str ' window {width: 95%;}' -l 10 -no-click-to-exit -filter " ${@:- } "
4750}
4851
52+ listfiles (){
53+ for file in ${NBROWSER_CONFIG_DIR} /$1 /* ; do
54+ [ -e " $file " ] || [ -L " $file " ] || continue
55+ [ -s " $file " ] && printf ' %s\n' " ${file##*/ } "
56+ done
57+ }
58+
4959# check if necessary programs are installed
5060if ! has ' rofi' ; then
51- notify-send " nbrowser: you need to install rofi !"
61+ notify-send " nbrowser: rofi is not installed in your system !"
5262 exit 1
5363fi
5464
@@ -87,7 +97,7 @@ for prog in badwolf qutebrowser ephemeral ; do
8797done
8898
8999# custom config
90- [[ -f " ${NBROWSER_CONFIG_DIR} /config" ] ] && source " ${NBROWSER_CONFIG_DIR} /config"
100+ [ -f " ${NBROWSER_CONFIG_DIR} /config" ] && source " ${NBROWSER_CONFIG_DIR} /config"
91101
92102if ! has _clean_url ; then
93103 _clean_url (){
@@ -124,6 +134,12 @@ if ! has _copy_to_clipboard ;then
124134 }
125135fi
126136
137+ if ! has _gemini_handler ; then
138+ _gemini_handler (){
139+ open_in_browser " https://proxy.vulpes.one/gemini/${1: 9} "
140+ }
141+ fi
142+
127143open_a_browser (){
128144 selected_browser=$( printf " %s\n" " ${installed_browsers[@]} " | awk ' BEGIN { RS="\n"; FS=" : " } { print $1 "\t : " $2 }' | column -t -s $' \t ' | rofi -dmenu -p ' nbrowser' -i -format " i s" -l " $(( browser_count- 1 )) " )
129145
@@ -220,7 +236,11 @@ open_in_browser(){
220236 elif [[ " ${selected_browser/ ?} " == " p" ]] ; then
221237 open_video_with " $* "
222238 else
223- _pemx " ubang '${selected_browser/ ?} ' not found!"
239+ ubang=$( listfiles ubangs | rofi -dmenu -p ' ubangs' -i -mesg " ubangs '${selected_browser/ ?} ' not found!" )
240+ [ -z " ${ubang} " ] && exit
241+ source " ${NBROWSER_CONFIG_DIR} /ubangs/${ubang} "
242+ has nbrowser_ubang || _pemx " couldn't find nbrowser_ubang() function in ${NBROWSER_CONFIG_DIR} /ubangs/${ubang} "
243+ nbrowser_ubang " $* "
224244 fi
225245 ;;
226246 " Copy to clipboard" * " : " )
@@ -241,7 +261,6 @@ url_handler(){
241261 if [ -f " ${NBROWSER_CONFIG_DIR} /dbangs/${domain} " ] ; then
242262 source " ${NBROWSER_CONFIG_DIR} /dbangs/${domain} "
243263 has nbrowser_dbang || _pemx " couldn't find nbrowser_dbang() function in ${NBROWSER_CONFIG_DIR} /dbangs/${domain} "
244- shift
245264 nbrowser_dbang " $cleanurl "
246265 else
247266 case " $cleanurl " in
@@ -261,7 +280,7 @@ url_handler(){
261280main (){
262281 case " $1 " in
263282 gemini://* )
264- open_in_browser " https://proxy.vulpes.one/gemini/ ${1 : 9} "
283+ _gemini_handler " $@ "
265284 ;;
266285 http://* |https://* )
267286 url_handler " $@ "
@@ -296,39 +315,49 @@ main(){
296315 # bangs
297316 " !" * )
298317 local bang=" ${1/ ?} "
299- if [ -f " ${NBROWSER_CONFIG_DIR} /bangs/${bang} " ] ; then
300- shift
301- source " ${NBROWSER_CONFIG_DIR} /bangs/${bang} "
302- has nbrowser_bang || _pemx " couldn't find nbrowser_bang() function in ${NBROWSER_CONFIG_DIR} /bangs/${bang} "
303- nbrowser_bang " $* "
304- else
305- _pemx " bang '${bang} ' not found!"
318+ shift
319+ if [ ! -f " ${NBROWSER_CONFIG_DIR} /bangs/${bang} " ] ; then
320+ bang=$( listfiles bangs | rofi -dmenu -p ' bangs' -i -mesg " bang '${bang} ' not found!" )
306321 fi
322+ [ -z " ${bang} " ] && exit
323+ source " ${NBROWSER_CONFIG_DIR} /bangs/${bang} "
324+ has nbrowser_bang || _pemx " couldn't find nbrowser_bang() function in ${NBROWSER_CONFIG_DIR} /bangs/${bang} "
325+ nbrowser_bang " $* "
307326 ;;
308327
309328 # engines
310329 " ?" * )
311330 local engine=" ${1/ ?} "
331+ shift
312332 if [ -f " ${NBROWSER_CONFIG_DIR} /engines/${engine} " ] ; then
313- shift
314333 source " ${NBROWSER_CONFIG_DIR} /engines/${engine} "
315334 has nbrowser_search || _pemx " couldn't find nbrowser_search() function in ${NBROWSER_CONFIG_DIR} /engines/${engine} "
316335 [ -n " $1 " ] && url_handler " $( nbrowser_search $* ) "
317- elif [ -n " ${ENGINES[$engine]} " ]; then
318- shift
336+ elif [ -n " ${ENGINES[${engine:- }]} " ]; then
319337 url_handler " ${ENGINES[$engine]} $* "
320- elif [ -f " $NBROWSER_CONFIG_DIR /engines/engines.json" ]; then
321- shift
322- local url=$( jq -r " .[]|select( .t == \" $engine \" )|.u" " $NBROWSER_CONFIG_DIR /engines/engines.json" | sed " s/{{{s}}}/$* /g" )
323- [ -z " $url " ] && _pemx " engine '${engine} ' not found!"
324- url_handler " $url "
338+ elif [ -f " $NBROWSER_CONFIG_DIR /engines.json" ]; then
339+ local url=$( jq -r " .[]|select( .t == \" $engine \" )|.u" " $NBROWSER_CONFIG_DIR /engines.json" | sed " s/{{{s}}}/$* /g" )
340+ if [ ! -z " $url " ] ; then
341+ url_handler " $url "
342+ else
343+ ENGINESLIST=" $( listfiles engines) "
344+ ENGINESLIST+=" ${! ENGINES[@]} "
345+ ENGINESLIST+=" $( jq -r " .[]|.t" " $NBROWSER_CONFIG_DIR /engines.json" ) "
346+ engine=$( printf " %s\n" ${ENGINESLIST} | awk ' !a[$0]++' | rofi -dmenu -p ' engines' -i -mesg " engine '${engine} ' not found!" )
347+ [ -z " $engine " ] && exit
348+ [ -n " $1 " ] && main " ?" $engine $*
349+ fi
325350 else
326- _pemx " search engine '${engine} ' not found!"
351+ ENGINESLIST=" $( listfiles engines) "
352+ ENGINESLIST+=" ${! ENGINES[@]} "
353+ engine=$( printf " %s\n" ${ENGINESLIST} | awk ' !a[$0]++' | rofi -dmenu -p ' engines' -i -mesg " engine '${engine} ' not found!" )
354+ [ -z " $engine " ] && exit
355+ [ -n " $1 " ] && main " ?" $engine $*
327356 fi
328357 ;;
329358
330359 * )
331- if [ -e " $* " ] ; then
360+ if [ -f " $* " ] ; then
332361 case $@ in
333362 * .pdf)
334363 # handle local pdf
0 commit comments