diff --git a/.config/rofi-surfraw/searchengines b/.config/rofi-surfraw/searchengines
new file mode 100644
index 0000000..1b7f79f
--- /dev/null
+++ b/.config/rofi-surfraw/searchengines
@@ -0,0 +1,5 @@
+!aur - surfraw - duckduckgo !aur
+!wp - surfraw - wikipedia
+!rb - custom - https://www.rebuy.de/kaufen/suchen?q=
+!sp - custom - http://www.sputnikmusic.com/search_results.php?genreid=0&search_in=Bands&search_text=
+!hn - surfraw - duckduckgo !hackernews
diff --git a/.config/rofi-surfraw/surfraw.conf b/.config/rofi-surfraw/surfraw.conf
new file mode 100644
index 0000000..d6c1170
--- /dev/null
+++ b/.config/rofi-surfraw/surfraw.conf
@@ -0,0 +1,2 @@
+default=duckduckgo
+help_color="#0C73C2"
diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc
index 0303661..a1c55e5 100644
--- a/.config/sxhkd/sxhkdrc
+++ b/.config/sxhkd/sxhkdrc
@@ -12,10 +12,14 @@ super + space
super + r
exec rofi -modi combi,ssh -show combi -combi-modi "window,clipboard:greenclip print,run"
-# open more extensive run menu
+# open gopass frontend menu
super + p
exec rofi-gopass
+# open surfraw rofi frontend
+super + q
+ exec rofi-surfraw
+
# System functionality
# Enable lock screen (TODO does not stop music, etc yet
diff --git a/.local/bin/rofi-surfraw b/.local/bin/rofi-surfraw
new file mode 100755
index 0000000..eb17666
--- /dev/null
+++ b/.local/bin/rofi-surfraw
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+# source surfraw config
+source $HOME/.surfraw.conf
+
+# load global files
+source /etc/rofi-surfraw.conf
+
+# create local copy of custom searchengines
+if [[ ! -d $HOME/.config/rofi-surfraw ]]; then
+ mkdir $HOME/.config/rofi-surfraw/searchengines
+fi
+if [[ ! -f $HOME/.config/rofi-surfraw/searchengines ]]; then
+ cp /usr/share/doc/rofi-surfraw/searchengines $HOME/.config/rofi-surfraw/searchengines
+fi
+
+# get local config
+if [[ -f $HOME/.config/rofi-surfraw/config ]]; then
+ source $HOME/.config/rofi-surfraw/config
+fi
+
+# get list of search engines from surfraw
+if [[ $@ == *"--no-list"* ]]; then
+ :
+else
+# list=$(sr -elvi | awk '{ print "?"$1 }' | tail -n +2)
+ list=$(sr -elvi | awk '{if (NR!=1) print "?"$1 }')
+fi
+
+# get custom engines from text file
+if [[ $@ == *"--no-custom"* ]]; then
+ :
+else
+# custom=$(cat $HOME/.config/rofi-surfraw/searchengines | awk -F ' - ' '{ print $1 }')
+ custom=$(awk -F ' - ' '{ print $1 }' $HOME/.config/rofi-surfraw/searchengines)
+fi
+
+main () {
+# Draw Menu
+HELP_MSG="Hit Ctrl+Space to complete Engine Name
+Searches without prepended engine use "${default}""
+elvi=$(echo -e "${list}\n${custom}" | rofi -dmenu -mesg "${HELP_MSG}" -p "Search > ")
+
+# Some logic
+if [[ $elvi == "" ]]; then exit
+elif [[ $elvi == "!"* ]]; then
+ entry=$(grep "$(echo "${elvi}" | awk '{ print $1 }')" "$HOME/.config/rofi-surfraw/searchengines")
+ method=$(echo "${entry}" | awk -F ' - ' '{ print $2 }')
+ bang=$(echo "${entry}" | awk -F ' - ' '{ print $3 }')
+ search=$(echo "${elvi}" | awk '{$1=""; print $0}' | cut -c 2-)
+ if [[ $method == "surfraw" ]]; then
+ sr ${bang} ${search}
+ elif [[ $method == "custom" ]]; then
+ "$SURFRAW_graphical_browser" $SURFRAW_graphical_browser_args ${bang}"${search}"
+ fi
+elif [[ $elvi == "?"* ]]; then
+ name=$(echo "${elvi}" | awk '{ print $1 }' | cut -c 2-)
+ search=$(echo "${elvi}" | awk '{$1=""; print $0}' | cut -c 2-)
+ sr ${name} ${search}
+else
+ if [[ $default == "!"* ]]; then
+ entry=$(grep "$(echo "${default}" | awk '{ print $1 }')" "$HOME/.config/rofi-surfraw/searchengines")
+ method=$(echo "${entry}" | awk -F ' - ' '{ print $2 }')
+ bang=$(echo "${entry}" | awk -F ' - ' '{ print $3 }')
+ else
+ method="surfraw"
+ bang="$default"
+ fi
+ search="${elvi}"
+ if [[ $method == "surfraw" ]]; then
+ sr ${bang} ${search}
+ elif [[ $method == "custom" ]]; then
+ "$SURFRAW_graphical_browser" $SURFRAW_graphical_browser_args ${bang}"${search}"
+ fi
+fi
+}
+
+if [[ $1 == "--help" ]]; then
+ echo "rofi-surfraw - (C) 2015 Rasmus Steinke "
+ echo "---"
+ echo "--help this help"
+ echo "--no-list do not show inbuild search engines"
+ echo "--no-custom do not show custom search engines"
+else
+ main
+fi