commit 539ca71e9432bee01e7d9c678677d4341e7de372
parent ccac90f043fa9799de2fe3f699ee8ea6dfc1efd0
Author: Matsuda Kenji <kenji@x220.my.domain>
Date: Thu, 12 Aug 2021 11:18:43 +0900
Merge branch 'bsd' of https://github.com/ftvda/dotfiles into bsd
Diffstat:
18 files changed, 657 insertions(+), 1 deletion(-)
diff --git a/.config/newsboat/urls b/.config/newsboat/urls
@@ -5,6 +5,7 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA
https://suckless.org/atom.xml
https://archlinux.org/feeds/news/
https://www.romanzolotarev.com/rss.xml
+https://vermaden.wordpress.com/feed
https://www.youtube.com/feeds/videos.xml?channel_id=UCntL6bw6PoFR0r67cMYXLkg
https://www.youtube.com/feeds/videos.xml?channel_id=UC5gLmcFuvdGbajs4VL-WU3g
https://www.youtube.com/feeds/videos.xml?channel_id=UCqpdhncf4nxTfy0QZh1YWLQ
@@ -21,3 +22,4 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UCue0AhOm8SARARIcT-0mE1w asm
https://www.youtube.com/feeds/videos.xml?channel_id=UCAZqVGCUyiEBNopy7EloMTw asmr
https://www.youtube.com/feeds/videos.xml?channel_id=UCnGxonfiiey6qbiuxPPPLDw
https://www.youtube.com/feeds/videos.xml?channel_id=UCkMxe-0NaJw0Yc0g2Q29gcw
+https://www.youtube.com/feeds/videos.xml?channel_id=UC_h4JsXCMhC1al0IkmoaW8g
diff --git a/.config/w3m/keymap b/.config/w3m/keymap
@@ -0,0 +1,238 @@
+########## invalidate defaults ##########
+keymap K NULL
+keymap J NULL
+keymap SPC NULL
+keymap - NULL
+keymap + NULL
+keymap C-v NULL
+keymap ESC-v NULL
+keymap C-f NULL
+keymap C-b NULL
+keymap C-n NULL
+keymap C-p NULL
+keymap < NULL
+keymap > NULL
+keymap . NULL
+keymap , NULL
+keymap ^ NULL
+keymap C-a NULL
+keymap W NULL
+keymap ^[[6~ NULL
+keymap ^[[5~ NULL
+keymap g NULL
+keymap ^[[1~ NULL
+keymap ^[[4~ NULL
+keymap ESC-< NULL
+keymap ESC-> NULL
+keymap [ NULL
+keymap ] NULL
+keymap ^[[Z NULL
+keymap ESC-m NULL
+keymap ( NULL
+keymap ) NULL
+keymap C-j NULL
+keymap C-m NULL
+keymap ESC-C-j NULL
+keymap ESC-C-m NULL
+keymap ESC-w NULL
+keymap ESC-W NULL
+keymap C-s NULL
+keymap = NULL
+keymap ESC-l NULL
+keymap U NULL
+keymap V NULL
+keymap v NULL
+keymap R NULL
+keymap ESC-s NULL
+keymap : NULL
+keymap C-q NULL
+keymap T NULL
+keymap } NULL
+keymap { NULL
+keymap ESC-a NULL
+keymap ESC-b NULL
+keymap c NULL
+keymap ESC-: NULL
+keymap C-h NULL
+keymap q NULL
+keymap Q NULL
+keymap C-w NULL
+keymap C-d NULL
+keymap C-u NULL
+keymap RIGHT NULL
+keymap l NULL
+keymap LEFT NULL
+keymap h NULL
+keymap j NULL
+keymap DOWN NULL
+keymap k NULL
+keymap UP NULL
+keymap C-e NULL
+keymap C-y NULL
+keymap 0 NULL
+keymap $ NULL
+keymap Z NULL
+keymap z NULL
+keymap ESC-g NULL
+keymap gg NULL
+keymap G NULL
+keymap w NULL
+keymap b NULL
+keymap C-n NULL
+keymap C-p NULL
+keymap ESC-TAB NULL
+keymap f NULL
+keymap C-o NULL
+keymap TAB NULL
+keymap C-j NULL
+keymap C-] NULL
+keymap I NULL
+keymap ESC-I NULL
+keymap ESC-C-j NULL
+keymap y NULL
+keymap u NULL
+keymap i NULL
+keymap gC-g NULL
+keymap C-g NULL
+keymap ";" NULL
+keymap M NULL
+keymap ESC-M NULL
+keymap F NULL
+keymap ESC-u NULL
+keymap t NULL
+keymap @ NULL
+keymap "#" NULL
+keymap | NULL
+keymap B NULL
+keymap L NULL
+keymap H NULL
+keymap s NULL
+keymap gf NULL
+keymap S NULL
+keymap E NULL
+keymap ESC-e NULL
+keymap C-r NULL
+keymap r NULL
+keymap C-l NULL
+keymap C-t NULL
+keymap d NULL
+keymap gt NULL
+keymap gT NULL
+keymap ESC-t NULL
+keymap C-wL NULL
+keymap C-wH NULL
+keymap a NULL
+keymap n NULL
+keymap N NULL
+keymap / NULL
+keymap ? NULL
+keymap C-@ NULL
+keymap ESC-n NULL
+keymap ESC-p NULL
+keymap \" NULL
+keymap ^[[2~ NULL
+keymap ^[[28~ NULL
+keymap ^[[E NULL
+keymap ^[[L NULL
+keymap o NULL
+keymap C-k NULL
+keymap D NULL
+keymap m NULL
+keymap ESC-c NULL
+keymap ESC-o NULL
+keymap ESC-k NULL
+keymap \\ NULL
+keymap ! NULL
+keymap C-z NULL
+keymap ZZ NULL
+keymap ZQ NULL
+
+
+########## command ##########
+keymap :: COMMAND
+keymap :H HELP
+keymap :O OPTIONS
+keymap :d DOWNLOAD_LIST
+
+########## history navigation ##########
+keymap L NEXT
+keymap H PREV
+keymap :p SELECT_MENU
+keymap :h HISTORY
+
+########## scrolling ##########
+keymap C-e UP
+keymap C-y DOWN
+keymap gg BEGIN
+keymap G END
+keymap C-d NEXT_PAGE
+keymap d NEXT_PAGE
+keymap C-u PREV_PAGE
+keymap u PREV_PAGE
+keymap zz CENTER_V
+########## cursor ##########
+keymap l MOVE_RIGHT
+keymap h MOVE_LEFT
+keymap j MOVE_DOWN
+keymap k MOVE_UP
+keymap 0 LINE_BEGIN
+keymap $ LINE_END
+keymap w NEXT_WORD
+keymap b PREV_WORD
+########## cursor history ##########
+keymap C-r REDO
+keymap u UNDO
+########## navigation ##########
+keymap f MOVE_LIST_MENU
+keymap F LIST_MENU
+keymap C-n NEXT_LINK
+keymap C-p PREV_LINK
+keymap :l PEEK_LINK
+
+# reload
+keymap r RELOAD
+keymap C-r RELOAD
+
+# save/load
+keymap :w SAVE
+keymap :W PRINT
+keymap :o GOTO
+keymap :e LOAD
+
+# jump
+keymap ESC-C-j SUBMIT
+keymap C-] TAB_LINK
+keymap C-j GOTO_LINK
+
+########## info ##########
+keymap y PEEK
+keymap gC-g INFO
+keymap C-g LINE_INFO
+keymap gf VIEW
+
+########## search ##########
+keymap / ISEARCH
+keymap ? ISEARCH_BACK
+keymap n SEARCH_NEXT
+keymap N SEARCH_PREV
+
+########## bookmarks ##########
+keymap a ADD_BOOKMARK
+keymap :b VIEW_BOOKMARK
+
+########## tab ##########
+keymap x CLOSE_TAB
+keymap C-w CLOSE_TAB
+keymap gh GOTO http://www.google.com/en
+keymap gH TAB_GOTO http://www.google.com/en
+keymap C-t NEW_TAB
+keymap gt NEXT_TAB
+keymap gT PREV_TAB
+keymap t TAB_GOTO
+keymap T TAB_MENU
+
+########## quit ##########
+keymap ZZ EXIT
+keymap C-Q EXIT
+keymap ZQ QUIT
+keymap :q QUIT
diff --git a/.profile b/.profile
@@ -11,7 +11,6 @@ export XDG_RUNTIME_DIR="/tmp/xdg_runtime_dir_$USER"
[ ! -d $XDG_CACHE_HOME ] && mkdir -p $XDG_CACHE_HOME
[ ! -d $XDG_DATA_HOME ] && mkdir -p $XDG_DATA_HOME
-export PATH="$PATH:$HOME/.local/bin"
export EDITOR=nvim
export HISTFILE="$XDG_CACHE_HOME/sh_history"
diff --git a/.shrc b/.shrc
@@ -1,4 +1,6 @@
# ~/.shrc
PS1='[\u@\h \W]\$ '
+
+alias w3m='w3m -o keymap_file=~/.config/w3m/keymap'
set -o vi
diff --git a/bin/dwm_blocks_battery.sh b/bin/dwm_blocks_battery.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+online=$(sysctl hw.acpi.acline | cut -d' ' -f2)
+capacity=$(sysctl hw.acpi.battery.life | cut -d' ' -f2)
+
+if [ "$online" = 1 ]; then
+ state=
+elif [ "$capacity" -gt 95 ]; then
+ state=
+elif [ "$capacity" -gt 63 ]; then
+ state=
+elif [ "$capacity" -gt 38 ]; then
+ state=
+elif [ "$capacity" -gt 10 ]; then
+ state=
+else
+ state=
+fi
+
+echo "$state ${capacity}"
diff --git a/bin/dwm_blocks_volume.sh b/bin/dwm_blocks_volume.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+mute=no
+[ "$mute" = "yes" ] && state= || state=
+volume=$(mixer -s vol | sed 's/.*://')
+echo "$state ${volume}"
diff --git a/bin/dwm_blocks_wifi.sh b/bin/dwm_blocks_wifi.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+ifconfig | awk '/^[^ \t]/{interface=$1;ssid=""}\
+ /ssid/{ssid=$2}\
+ /associated/{if(!ssid){print ""}else{print "", ssid};connected=1}\
+ END{if(!connected){print " down"}}'
diff --git a/bin/pass b/bin/pass
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+passwords=~/passwords
+
+item=$(awk '{print $1, $3}' $passwords | dmenu -i -l 5 )
+echo $item | awk '{print $2}'
+name=$(echo $item | awk '{print $1}')
+id=$(echo $item | awk '{print $2}')
+grep "$name" $passwords | grep "$id" | sed 's/.* //' | xclip
diff --git a/suckless/dwm/config.diff b/suckless/dwm/config.diff
@@ -0,0 +1,73 @@
+--- config.h 2021-08-05 10:46:13.691533000 +0900
++++ config.def.h 2021-06-18 14:17:53.613576000 +0900
+@@ -1,7 +1,7 @@
+ /* See LICENSE file for copyright and license details. */
+
+ /* appearance */
+-static const unsigned int borderpx = 0; /* border pixel of windows */
++static const unsigned int borderpx = 1; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
+ static const int showbar = 1; /* 0 means no bar */
+ static const int topbar = 1; /* 0 means bottom bar */
+@@ -11,15 +11,15 @@
+ static const char col_gray2[] = "#444444";
+ static const char col_gray3[] = "#bbbbbb";
+ static const char col_gray4[] = "#eeeeee";
+-static const char col_highlight[] = "#324d45";
++static const char col_cyan[] = "#005577";
+ static const char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+- [SchemeSel] = { col_gray4, col_highlight, col_highlight },
++ [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+ };
+
+ /* tagging */
+-static const char *tags[] = { "1", "2", "3"};
++static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
+
+ static const Rule rules[] = {
+ /* xprop(1):
+@@ -44,7 +44,7 @@
+ };
+
+ /* key definitions */
+-#define MODKEY Mod4Mask
++#define MODKEY Mod1Mask
+ #define TAGKEYS(KEY,TAG) \
+ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
+@@ -56,19 +56,13 @@
+
+ /* commands */
+ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_highlight, "-sf", col_gray4, NULL };
+-static const char *termcmd[] = { "$TERMINAL", NULL };
++static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
++static const char *termcmd[] = { "st", NULL };
+
+-#include <X11/XF86keysym.h>
+-
+ static Key keys[] = {
+ /* modifier key function argument */
+- { MODKEY|ShiftMask, XK_b, spawn, SHCMD("$BROWSER") },
+- { MODKEY|ShiftMask, XK_s, spawn, SHCMD("$SURF") },
+- { MODKEY, XK_n, spawn, SHCMD("jinput") },
+ { MODKEY, XK_p, spawn, {.v = dmenucmd } },
+- /*{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },*/
+- { MODKEY|ShiftMask, XK_Return, spawn, SHCMD("$TERMINAL") },
++ { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_b, togglebar, {0} },
+ { MODKEY, XK_j, focusstack, {.i = +1 } },
+ { MODKEY, XK_k, focusstack, {.i = -1 } },
+@@ -100,10 +94,6 @@
+ TAGKEYS( XK_8, 7)
+ TAGKEYS( XK_9, 8)
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
+-
+-
+- { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("mixer vol +3 >/dev/null; kill -75 $(pidof dwmblocks)") },
+- { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("mixer vol -3 >/dev/null; kill -75 $(pidof dwmblocks)") },
+ };
+
+ /* button definitions */
diff --git a/suckless/dwm/freebsd.diff b/suckless/dwm/freebsd.diff
@@ -0,0 +1,24 @@
+diff --git a/config.mk b/config.mk
+index 7084c33..a11c1ab 100644
+--- a/config.mk
++++ b/config.mk
+@@ -7,8 +7,8 @@ VERSION = 6.2
+ PREFIX = /usr/local
+ MANPREFIX = ${PREFIX}/share/man
+
+-X11INC = /usr/X11R6/include
+-X11LIB = /usr/X11R6/lib
++X11INC = /usr/local/include
++X11LIB = /usr/local/lib
+
+ # Xinerama, comment if you don't want it
+ XINERAMALIBS = -lXinerama
+@@ -16,7 +16,7 @@ XINERAMAFLAGS = -DXINERAMA
+
+ # freetype
+ FREETYPELIBS = -lfontconfig -lXft
+-FREETYPEINC = /usr/include/freetype2
++FREETYPEINC = /usr/local/include/freetype2
+ # OpenBSD (uncomment)
+ #FREETYPEINC = ${X11INC}/freetype2
+
diff --git a/suckless/dwmblocks/blocks.diff b/suckless/dwmblocks/blocks.diff
@@ -0,0 +1,20 @@
+--- blocks.def.h 2021-06-18 14:21:18.113296000 +0900
++++ blocks.h 2021-06-21 16:12:16.762548000 +0900
+@@ -1,11 +1,14 @@
+ //Modify this file to change what commands output to your statusbar, and recompile using the make command.
+ static const Block blocks[] = {
+ /*Icon*/ /*Command*/ /*Update Interval*/ /*Update Signal*/
+- {"Mem:", "free -h | awk '/^Mem/ { print $3\"/\"$2 }' | sed s/i//g", 30, 0},
++ {"", "date '+%m/%d %a %H:%M'", 5, 0},
++ {"", "dwm_blocks_volume.sh", 5, 10},
++ {"", "dwm_blocks_battery.sh", 5, 0},
++ {"", "uptime | sed 's/.*load averages: \\(.*\\)/\\1/' | cut -d, -f1", 5, 0},
++ {" ", "sysctl dev.cpu | grep temperature | tr -d C | awk '{a+=$2;n++}END{printf \"%d\\n\", a/n}'", 5, 0},
++ {"", "dwm_blocks_wifi.sh", 5, 0},
+
+- {"", "date '+%b %d (%a) %I:%M%p'", 5, 0},
+ };
+-
+ //sets delimeter between status commands. NULL character ('\0') means no delimeter.
+ static char delim[] = " | ";
+ static unsigned int delimLen = 5;
diff --git a/suckless/dwmblocks/freebsd.diff b/suckless/dwmblocks/freebsd.diff
@@ -0,0 +1,17 @@
+diff --git a/Makefile b/Makefile
+index ef43ef4..bb6c1f7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,9 +1,10 @@
+ PREFIX ?= /usr/local
+ CC ?= cc
+-LDFLAGS = -lX11
++LDFLAGS = -L/usr/local/lib -lX11
++CFLAGS = -I/usr/local/include
+
+ output: dwmblocks.c blocks.def.h blocks.h
+- ${CC} dwmblocks.c $(LDFLAGS) -o dwmblocks
++ ${CC} dwmblocks.c $(LDFLAGS) $(CFLAGS) -o dwmblocks
+ blocks.h:
+ cp blocks.def.h $@
+
diff --git a/suckless/st/config.diff b/suckless/st/config.diff
@@ -0,0 +1,14 @@
+--- config.def.h 2021-06-18 14:18:33.714179000 +0900
++++ config.h 2021-06-18 16:00:01.721759000 +0900
+@@ -5,7 +5,10 @@
+ *
+ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
+ */
+-static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
++/*
++ * static char *font = "monospace:pixelsize=20:antialias=true:autohint=true";
++ */
++static char *font = "monospace:pixelsize=15:antialias=true:autohint=true";
+ static int borderpx = 2;
+
+ /*
diff --git a/suckless/st/freebsd.diff b/suckless/st/freebsd.diff
@@ -0,0 +1,47 @@
+diff --git a/Makefile b/Makefile
+index 470ac86..25611af 100644
+--- a/Makefile
++++ b/Makefile
+@@ -47,7 +47,7 @@ install: st
+ mkdir -p $(DESTDIR)$(MANPREFIX)/man1
+ sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1
+ chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1
+- tic -sx st.info
++ #tic -sx st.info
+ @echo Please see the README file regarding the terminfo entry of st.
+
+ uninstall:
+diff --git a/config.mk b/config.mk
+index c070a4a..873cc07 100644
+--- a/config.mk
++++ b/config.mk
+@@ -7,18 +7,20 @@ VERSION = 0.8.4
+ PREFIX = /usr/local
+ MANPREFIX = $(PREFIX)/share/man
+
+-X11INC = /usr/X11R6/include
+-X11LIB = /usr/X11R6/lib
++X11INC = /usr/local/include
++X11LIB = /usr/local/lib
+
+-PKG_CONFIG = pkg-config
++# freetype
++FREETYPELIBS = -lfontconfig -lXft
++FREETYPEINC = /usr/local/include/freetype2
+
+ # includes and libs
+-INCS = -I$(X11INC) \
+- `$(PKG_CONFIG) --cflags fontconfig` \
+- `$(PKG_CONFIG) --cflags freetype2`
+-LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \
+- `$(PKG_CONFIG) --libs fontconfig` \
+- `$(PKG_CONFIG) --libs freetype2`
++INCS = -I$(X11INC) -I$(FREETYPEINC)
++ #`$(PKG_CONFIG) --cflags fontconfig` \
++ #`$(PKG_CONFIG) --cflags freetype2`
++LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil $(FREETYPELIBS)
++ #`$(PKG_CONFIG) --libs fontconfig` \
++ #`$(PKG_CONFIG) --libs freetype2`
+
+ # flags
+ STCPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600
diff --git a/suckless/st/st-w3m-0.8.3.diff b/suckless/st/st-w3m-0.8.3.diff
@@ -0,0 +1,42 @@
+From 69cffc587b54b0a9cd81adb87abad8e526d5b25b Mon Sep 17 00:00:00 2001
+From: "Avi Halachmi (:avih)" <avihpit@yahoo.com>
+Date: Thu, 4 Jun 2020 17:35:08 +0300
+Subject: [PATCH] support w3m images
+
+w3m images are a hack which renders on top of the terminal's drawable,
+which didn't work in st because when using double buffering, the front
+buffer (on which w3m draws its images) is ignored, and st draws only
+on the back buffer, which is then copied to the front buffer.
+
+There's a patch to make it work at the FAQ already, but that patch
+canceles double-buffering, which can have negative side effects on
+some cases such as flickering.
+
+This patch achieves the same goal but instead of canceling the double
+buffer it first copies the front buffer to the back buffer.
+
+This has the same issues as the FAQ patch in that the cursor line is
+deleted at the image (because st renders always full lines), but
+otherwise it's simpler and does keeps double buffering.
+---
+ x.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/x.c b/x.c
+index e5f1737..b6ae162 100644
+--- a/x.c
++++ b/x.c
+@@ -1594,6 +1594,8 @@ xsettitle(char *p)
+ int
+ xstartdraw(void)
+ {
++ if (IS_SET(MODE_VISIBLE))
++ XCopyArea(xw.dpy, xw.win, xw.buf, dc.gc, 0, 0, win.w, win.h, 0, 0);
+ return IS_SET(MODE_VISIBLE);
+ }
+
+
+base-commit: 43a395ae91f7d67ce694e65edeaa7bbc720dd027
+--
+2.17.1
+
diff --git a/suckless/surf/config.diff b/suckless/surf/config.diff
@@ -0,0 +1,61 @@
+--- config.def.h 2021-08-12 09:55:15.980353000 +0900
++++ config.h 2021-08-10 11:04:40.573740000 +0900
+@@ -119,7 +119,8 @@
+ { "://suckless\\.org/", "suckless.org.crt" },
+ };
+
+-#define MODKEY GDK_CONTROL_MASK
++/*#define MODKEY GDK_CONTROL_MASK*/
++#define MODKEY GDK_MOD1_MASK
+
+ /* hotkeys */
+ /*
+@@ -129,25 +130,27 @@
+ static Key keys[] = {
+ /* modifier keyval function arg */
+ { MODKEY, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
+- { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
+ { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
+
++ { MODKEY, GDK_KEY_w, playexternal, { 0 } },
++
+ { 0, GDK_KEY_Escape, stop, { 0 } },
+- { MODKEY, GDK_KEY_c, stop, { 0 } },
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_r, reload, { .i = 1 } },
+ { MODKEY, GDK_KEY_r, reload, { .i = 0 } },
+
+- { MODKEY, GDK_KEY_l, navigate, { .i = +1 } },
+- { MODKEY, GDK_KEY_h, navigate, { .i = -1 } },
++ { GDK_SHIFT_MASK, GDK_KEY_l, navigate, { .i = +1 } },
++ { GDK_SHIFT_MASK, GDK_KEY_h, navigate, { .i = -1 } },
+
+ /* vertical and horizontal scrolling, in viewport percentage */
+- { MODKEY, GDK_KEY_j, scrollv, { .i = +10 } },
+- { MODKEY, GDK_KEY_k, scrollv, { .i = -10 } },
+- { MODKEY, GDK_KEY_space, scrollv, { .i = +50 } },
+- { MODKEY, GDK_KEY_b, scrollv, { .i = -50 } },
+- { MODKEY, GDK_KEY_i, scrollh, { .i = +10 } },
+- { MODKEY, GDK_KEY_u, scrollh, { .i = -10 } },
++ { MODKEY, GDK_KEY_j, scrollv, { .i = +5 } },
++ { MODKEY, GDK_KEY_e, scrollv, { .i = +5 } },
++ { MODKEY, GDK_KEY_k, scrollv, { .i = -5 } },
++ { MODKEY, GDK_KEY_y, scrollv, { .i = -5 } },
++ { MODKEY, GDK_KEY_d, scrollv, { .i = +50 } },
++ { MODKEY, GDK_KEY_u, scrollv, { .i = -50 } },
++ { MODKEY, GDK_KEY_l, scrollh, { .i = +5 } },
++ { MODKEY, GDK_KEY_h, scrollh, { .i = -5 } },
+
+
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } },
+@@ -156,8 +159,8 @@
+ { MODKEY, GDK_KEY_minus, zoom, { .i = -1 } },
+ { MODKEY, GDK_KEY_plus, zoom, { .i = +1 } },
+
+- { MODKEY, GDK_KEY_p, clipboard, { .i = 1 } },
+- { MODKEY, GDK_KEY_y, clipboard, { .i = 0 } },
++ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_p, clipboard, { .i = 1 } },
++ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_y, clipboard, { .i = 0 } },
+
+ { MODKEY, GDK_KEY_n, find, { .i = +1 } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } },
diff --git a/suckless/surf/freebsd.diff b/suckless/surf/freebsd.diff
@@ -0,0 +1,22 @@
+diff --git a/config.mk b/config.mk
+index 2eb9fb0..2420352 100644
+--- a/config.mk
++++ b/config.mk
+@@ -11,6 +11,8 @@ LIBDIR = $(LIBPREFIX)/surf
+
+ X11INC = `pkg-config --cflags x11`
+ X11LIB = `pkg-config --libs x11`
++GLIBINC = `pkg-config --cflags --libs glib-2.0`
++GDKINC = /usr/local/include/gtk-3.0/gdk
+
+ GTKINC = `pkg-config --cflags gtk+-3.0 gcr-3 webkit2gtk-4.0`
+ GTKLIB = `pkg-config --libs gtk+-3.0 gcr-3 webkit2gtk-4.0`
+@@ -18,7 +20,7 @@ WEBEXTINC = `pkg-config --cflags webkit2gtk-4.0 webkit2gtk-web-extension-4.0 gio
+ WEBEXTLIBS = `pkg-config --libs webkit2gtk-4.0 webkit2gtk-web-extension-4.0 gio-2.0`
+
+ # includes and libs
+-INCS = $(X11INC) $(GTKINC)
++INCS = $(X11INC) $(GTKINC) $(GLIBINC) $(GDKINC)
+ LIBS = $(X11LIB) $(GTKLIB) -lgthread-2.0
+
+ # flags
diff --git a/suckless/surf/surf-playexternal-20190724-b814567.diff b/suckless/surf/surf-playexternal-20190724-b814567.diff
@@ -0,0 +1,54 @@
+From 95e17b5bd428173c83e60cec9cd5666cfe9066fa Mon Sep 17 00:00:00 2001
+From: DanMan <dnahimov@gmail.com>
+Date: Wed, 24 Jul 2019 18:47:46 -0400
+Subject: [PATCH] added playexternal hotkey function
+
+---
+ config.def.h | 2 ++
+ surf.c | 10 ++++++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/config.def.h b/config.def.h
+index 6d3135e..5fa0d9d 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -105,6 +105,8 @@ static Key keys[] = {
+ { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND") },
+ { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND") },
+
++ { MODKEY, GDK_KEY_w, playexternal, { 0 } },
++
+ { 0, GDK_KEY_Escape, stop, { 0 } },
+ { MODKEY, GDK_KEY_c, stop, { 0 } },
+
+diff --git a/surf.c b/surf.c
+index 93a1629..e74e9df 100644
+--- a/surf.c
++++ b/surf.c
+@@ -217,6 +217,7 @@ static void togglefullscreen(Client *c, const Arg *a);
+ static void togglecookiepolicy(Client *c, const Arg *a);
+ static void toggleinspector(Client *c, const Arg *a);
+ static void find(Client *c, const Arg *a);
++static void playexternal(Client *c, const Arg *a);
+
+ /* Buttons */
+ static void clicknavigate(Client *c, const Arg *a, WebKitHitTestResult *h);
+@@ -1648,6 +1649,15 @@ clickexternplayer(Client *c, const Arg *a, WebKitHitTestResult *h)
+ spawn(c, &arg);
+ }
+
++void
++playexternal(Client *c, const Arg *a)
++{
++ Arg arg;
++
++ arg = (Arg)VIDEOPLAY(geturi(c));
++ spawn(c, &arg);
++}
++
+ int
+ main(int argc, char *argv[])
+ {
+--
+2.22.0
+