]> Skullheadx's Git Forge - nixos.git/commitdiff
surf browser hist and bmarks
authorSkullheadx <admonty1@protonmail.com>
Wed, 29 Apr 2026 04:18:06 +0000 (00:18 -0400)
committerSkullheadx <admonty1@protonmail.com>
Wed, 29 Apr 2026 04:18:06 +0000 (00:18 -0400)
dotfiles/surf/surf.sh [new file with mode: 0644]
hjem.nix

diff --git a/dotfiles/surf/surf.sh b/dotfiles/surf/surf.sh
new file mode 100644 (file)
index 0000000..df3ad64
--- /dev/null
@@ -0,0 +1,130 @@
+#!/bin/sh
+# v. 2.0 - upgrade based on surf 4.0
+# Creative Commons License.  Peter John Hartman (http://individual.utoronto.ca/peterjh)
+# Much thanks to nibble and pancake who have a different surf.sh script available which
+# doesn't do the history bit.
+#
+# this script does:
+# * stores history of: (1) successful uri entries; (2) certain smart prefix entries, e.g., "g foobar"; (3) find entries
+# * direct bookmark (via ^b)
+# * information debug (via ^I)
+# * smart prefixes e.g. g for google search, t for tinyurl, etc.
+# * delete (with smart prefix x)
+#
+# $1 = $xid
+# $2 = $p = _SURF_FIND _SURF_BMARK _SURF_URI (what SETPROP sets in config.h)
+#
+# // replace default setprop with this one
+# #define SETPROP(p) { .v = (char *[]){ "/bin/sh", "-c", "surf.sh $0 $1 $2", p, q, winid, NULL } }
+#
+# { MODKEY, GDK_b, spawn, SETPROP("_SURF_BMARK") },
+# { MODKEY|GDK_SHIFT_MASK, GDK_i, spawn, SETPROP("_SURF_INFO") },
+# { MODKEY|GDK_SHIFT_MASK, GDK_g, spawn, SETPROP("_SURF_URI_RAW") },
+font='Terminus:size=12'
+normbgcolor='#181818'
+normfgcolor='#e9e9e9'
+selbgcolor=$normbgcolor
+selfgcolor='#dd6003'
+
+bmarks="$HOME/.local/share/surf/history.txt"
+ffile="$HOME/.local/share/find.txt"
+
+mkdir -p "$HOME/.local/share/surf"
+
+
+pid=$1
+fid=$2
+xid=$3
+
+echo "DEBUG: pid=$pid fid=$fid xid=$xid" >> /tmp/surf_debug.log
+
+dmenu="@dmenu@/bin/dmenu -nb $normbgcolor -nf $normfgcolor \
+          -sb $selbgcolor -sf $selfgcolor"
+xprop="@xprop@/bin/xprop"
+sed="@gnused@/bin/sed"
+tac="@coreutils@/bin/tac"
+
+s_get_prop() { # xprop
+       xprop -id $xid $1 | cut -d '"' -f 2
+}
+s_set_prop() { # xprop value
+       [ -n "$2" ] && xprop -id $xid -f $1 8u -set $1 "$2"
+}
+s_write_f() { # file value
+       [ -n "$2" ] && (sed -i "\|$2|d" $1; echo "$2" >> $1)
+       #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks
+}
+s_set_write_proper_uri() { # uri
+       # TODO: (xprop -spy _SURF_URI ... | while read name __ value; do echo $value; done works quite nice for eventloops)
+       # input is whatever the use inputed, so don't store that!
+       # first, clear the name field because surf doesn't sometimes
+       #s_set_prop WM_ICON_NAME ""
+       # set the uri
+       s_set_prop _SURF_GO "$1"
+       # get the new name
+        name=`s_get_prop WM_ICON_NAME`
+       # loop until the [10%] stuff is finished and we have a load (is this necessary?)
+       #while echo $name | grep "[*%\]" >/dev/null 2>&1; do 
+       #       name=`s_get_prop WM_ICON_NAME`
+       #done 
+       # bail on error and don't store
+       #if [[ $name != "Error" ]]; then
+       #       uri=`s_get_prop _SURF_URI`
+               # store to the bmarks file the OFFICIAL url (with http://whatever)
+                s_write_f $bmarks "$1"
+               #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks
+       #fi
+}
+
+case "$pid" in
+"_SURF_INFO")
+       xprop -id $xid | sed 's/\t/    /g' | $dmenu -fn "$font" -b -l 20
+       ;;
+"_SURF_FIND")
+       find="`tac $ffile 2>/dev/null | $dmenu -fn "$font" -b -p find:`"
+       s_set_prop _SURF_FIND "$find"
+       s_write_f $ffile "$find"
+       ;;
+"_SURF_BMARK")
+       uri=`s_get_prop _SURF_URI`
+       s_write_f $bmarks "$uri"
+       ;;
+"_SURF_URI_RAW")
+       uri=`echo $(s_get_prop _SURF_URI) | $dmenu -fn "$font" -b -p "uri:"`
+       s_set_prop _SURF_GO "$uri"
+       ;;
+"_SURF_URI")
+       sel=`tac $bmarks 2> /dev/null | $dmenu -fn "$font" -b -l 5 -p "uri [gxy*]:"`
+       [ -z "$sel" ] && exit
+       opt=$(echo $sel | cut -d ' ' -f 1)
+       arg=$(echo $sel | cut -d ' ' -f 2-)
+       save=0
+       case "$opt" in
+       "g") # google for it
+               uri="http://www.google.com/search?q=$arg"
+               save=1
+               ;;
+       "y") # youtube
+               uri="http://www.youtube.com/results?search_query=$arg&aq=f"
+               save=1
+               ;;
+       "x") # delete
+               sed -i "\|$arg|d" $bmarks
+               exit;
+               ;;
+       *)
+               uri="$sel"
+               save=2
+               ;;
+       esac
+       # only set the uri; don't write to file
+       [ $save -eq 0 ] && s_set_prop _SURF_GO "$uri"
+       # set the url and write exactly what the user inputed to the file
+       [ $save -eq 1 ] && (s_set_prop _SURF_GO "$uri"; s_write_f $bmarks "$sel")
+       # try to set the uri only if it is a success
+       [ $save -eq 2 ] && s_set_write_proper_uri "$uri"
+       ;;
+*)
+       echo Unknown xprop
+       ;;
+esac
index a0d90a9b6f4c37dedcf2387d3777b35be86acd3c..300ac0aa43da837fbad8a906a54686833b2f7067 100644 (file)
--- a/hjem.nix
+++ b/hjem.nix
       lazygit
       librewolf
       btop
+
+      (pkgs.writeShellScriptBin "surf.sh" (
+        builtins.readFile (
+          pkgs.replaceVars ./dotfiles/surf/surf.sh {
+            dmenu = pkgs.dmenu;
+            xprop = pkgs.xprop;
+            gnused = pkgs.gnused;
+            coreutils = pkgs.coreutils;
+          }
+        )
+      ))
     ];
   };