about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorensa <psii@riseup.net>2020-06-29 19:45:18 -0700
committerensa <psii@riseup.net>2020-06-29 19:45:18 -0700
commite1d03e2fe607c5e1643be186c4ce4031ae1004e0 (patch)
treeee249107b5fb051f8d11e6c87e2e5e19775c5daa
parenta11f7c357236afea1b00df5f85dc8674f5f1d661 (diff)
downloadcfg-e1d03e2fe607c5e1643be186c4ce4031ae1004e0.tar.gz
bin/fl added, lh reworked, opener renamed, data/applications removed
bin/
	fl: finds links, sends list to dmenu so user can choose one to copy to the
	clipboard
	lh:
		replaced sed invocations with lstrip() invocations
		redir handling changed to function findredir(), which loops over curl's
		output, only outputting location urls
		changed case statement to look for .extensions instead of the end of the url
		local files are now sent to bin/op for processing
		mpv given --no-terminal flag for no output instead of redirection shit
		similarly, sxiv is given -q (and -p to not cache)
	op:
		formerly opener
		changed error message to be more portable
	prompt:
		removed help text
	pw:
		doesn't need to be in a variable
	rsschk:
		redesigned after an eternity
		uses a modified re_urls, looking for .rss and .xml urls
		generally smaller
	shenv:
		uses ${var:=val}
		specifies /bin/sh
	xbg:
		removed .fehbg handling
config/
	aliasrc:
		e and v set TERM to xterm-256color, otherwise vis freaks out
	cwmrc:
		urgencyborder color added (with color1)
		ungroupborder changed to color5
		program list removed
		4-Return set to $TERMINAL
		4S-r rebound to restart
		4-X set to $LOCK
		prompt binds fixed
	dunst/dunstrc:
		icons disabled
	ksh/functions/l.:
		changed to ksh function
		for non-current directories, changes there in a subshell and uses that
		current directory, sending an error message if the directory doesn't exist
	lf/lfrc:
		cmd open removed
		cmd ttmsh fixed
	shrc:
		removed ALTSCR
		added OPENER=op
		IRC_SERVERS_FILE removed
		TODO changed to correct path
		GOCACHE and GOBIN added, self-explanatory
data/
	applications/:
		removed
	mailcap:
		changed to relegate most of its functionality to bin/op
-rw-r--r--DEPENDENCIES.md40
-rwxr-xr-xbin/fl32
-rwxr-xr-xbin/lh56
-rwxr-xr-xbin/op (renamed from bin/opener)4
-rwxr-xr-xbin/prompt6
-rwxr-xr-xbin/pw3
-rwxr-xr-xbin/rsschk21
-rwxr-xr-xbin/shenv4
-rwxr-xr-xbin/xbg3
-rw-r--r--config/aliasrc4
-rw-r--r--config/cwmrc18
-rw-r--r--config/dunst/dunstrc4
-rw-r--r--config/ksh/functions/l.8
-rw-r--r--config/lf/lfrc10
-rw-r--r--config/shrc8
-rw-r--r--data/applications/doc.desktop4
-rw-r--r--data/applications/img.desktop4
-rw-r--r--data/applications/rss.desktop4
-rw-r--r--data/applications/text.desktop4
-rw-r--r--data/applications/weblight.desktop4
-rw-r--r--data/mailcap4
21 files changed, 127 insertions, 118 deletions
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 478b4eb..4eff548 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -28,12 +28,14 @@ each and every file in this repository can be altered by anyone with any goal, i
   * `$HOME`/today (bother reads this file and sends it as a notification)
   * pgrep (checks to see if your window manager is up yet)
 * comm-sel: a handy menu for spawning communication clients
-  * [epic5](https://epicsol.org)
+  * [catgirl](https://git.causal.agency/catgirl)
   * [cordless](https://github.com/bios-marcel/cordless)
   * [scli](https://github.com/isamert/scli)
   * [dmenu](https://dmenu.suckless.org) (provides a menu for selecting which client to start)
-  * opt: st-altscreen (build of st that doesn't have scrollback or extra bindings, doesnt interfere with programs and is generally smaller)
   * `$TERMINAL`
+* fl: finds links either in its arguments or piped to it, and has the user choose one to copy
+  * [dmenu](https://dmenu.suckless.org) (for the link chooser)
+  * xclip
 * lh: a script that takes a URL as input and does different things depending on what the URL links to
   * [mpv](https://mpv.io) (video file streaming, streaming from sites like youtube, viewing livestreams from twitch)
   * [youtube-dl](https://yt-dl.org) (hooked by mpv when streaming from the appropriate sites)
@@ -44,9 +46,9 @@ each and every file in this repository can be altered by anyone with any goal, i
   * [bombadillo](https://tildegit.org/sloum/bombadillo) (gemini, gopher)
   * `$TERMINAL`
   * `$READER`
-  * `$EDITOR`
+  * bin/op
   * `$BROWSER`
-* opener: a script that uses file(1) to determine what a file is, then opens it with an appropriate program
+* op: a script that uses file(1) to determine what a file is, then opens it with an appropriate program
   * [mpv](https://mpv.io) (opens video and audio files)
   * [sxiv](https://github.com/muennich/sxiv) (used to view images)
   * `$READER`
@@ -70,22 +72,20 @@ each and every file in this repository can be altered by anyone with any goal, i
 # config/
 * cwmrc: config for [cwm](https://man.openbsd.org/cwm)
   * [Cozette](https://github.com/slavfox/cozette) font
-  * xterm
-  * slock
+  * `$LOCK`
   * `$TERMINAL`
   * `$ALTSCR`
   * `$EDITOR`
   * `$BROWSER`
   * `$HOMEPAGE`
   * `$COMM`
-  * `kpcli`
+  * kpcli
   * bin/lh
   * xclip
   * `$MUSIC`
   * `$MAILER`
   * `$RSS`
   * `$FILE`
-  * `$READER`
   * `$SCR`
   * xdg-user-dir
   * mpc
@@ -96,13 +96,13 @@ each and every file in this repository can be altered by anyone with any goal, i
   * bin/bar.sh
   * xdotool
 * lf/lfrc: configuration file for [lf](https://github.com/gokcehan/lf)
-  * opt: bin/opener (for opening files)
+  * opt: `$OPENER` (for opening files)
   * opt: curl (for uploading temporary content to the [ttm.sh](https://ttm.sh) site)
 * shrc: shell environment, particularly for bin/shenv
   * vis (`$EDITOR`)
   * lf (`$FILE`)
   * xterm (`$TERMINAL`)
-  * st-altscreen (`$ALTSCR`)
+  * bin/op (`$OPENER`)
   * firefox (`$BROWSER`)
   * bin/comm-sel (`$COMM`)
   * zathura (`$READER`)
@@ -115,6 +115,8 @@ each and every file in this repository can be altered by anyone with any goal, i
   * slock (`$LOCK`)
   * opt: [todo](https://git.tilde.institute/ensa/todo)
   * opt: go (`$GOPATH`)
+  * opt: go (`$GOCACHE`)
+  * opt: go (`$GOBIN`)
   * opt: cargo (`$CARGO_HOME`)
   * opt: python (`$PYTHONUSERBASE`)
   * opt: mednafen (`$MEDNAFEN_HOME`)
@@ -129,24 +131,12 @@ configuration files for ksh
   * opt: pfetch (`$PF_INFO`)
 * functions.ksh
   * mpv (for mpvpin() to work)
+  * [pass](https://rgz.ee/pass.html) (for pcl and pct)
+  * xclip (for pcl and pct)
 * completions.ksh
   * `$XDG_CACHE_HOME`
   * [pass](https://rgz.ee/pass.html)
 # data/
 * mailcap: helps neomutt figure out what to do with particular MIME types
-  * `$EDITOR`
   * lynx
-  * [mpv](https://mpv.io)
-  * `$READER`
-## applications/
-* doc.desktop
-  * [zathura](https://pwmt.org/projects/zathura)
-* img.desktop
-  * [sxiv](https://github.com/muennich/sxiv)
-* rss.desktop
-  * bin/rsschk
-* text.desktop
-  * [xterm](https://invisible-island.net/xterm)
-  * [vis](https://github.com/martanne/vis)
-* weblight.desktop
-  * [surf](https://surf.suckless.org)
+  * bin/op
diff --git a/bin/fl b/bin/fl
new file mode 100755
index 0000000..8c058d7
--- /dev/null
+++ b/bin/fl
@@ -0,0 +1,32 @@
+#!/bin/sh
+# fl: Find Links
+# uses regular expressions to find links in the stream it's given,
+# or its args if it is given args
+
+# from pure-sh-bible, strips from the start of a string
+lstrip() {
+	printf '%s\n' "${1##$2}"
+}
+
+# put url-finding regex in a variable so no lines go over 80 chars
+re_urls='((https?://|www\.)[[:alnum:].]*:?[[:alnum:]./@$&%?$#=_-]*)'
+
+# finds links, puts them in a list
+# sort -u prevents duplicates, but also sorts the links
+urlparse() {
+	lstrip "$(cat)" "*\│" |\
+	grep -Eo "$re_urls" |\
+	sort -u | sed 's|^www.|http://www\.|g'
+}
+if [ -n "$1" ]; then
+	urls=$(echo "$@"|urlparse)
+else
+	urls=$(urlparse)
+fi
+
+# wipe IFS so dmenu handles being sent the links properly
+IFS=
+
+# send any found links to dmenu so one can be chosen to be sent to the clipboard
+[ -n "$urls" ] &&\
+	echo $urls | dmenu -i -p 'copy which url?' -l 10 | xclip -r -sel c
\ No newline at end of file
diff --git a/bin/lh b/bin/lh
index e662589..4332487 100755
--- a/bin/lh
+++ b/bin/lh
@@ -1,10 +1,12 @@
 #!/bin/sh
 # lh: the Link Handler
-# takes one path or URL as its argument, launches the appropriate program for this.
+# takes one path or URL as its argument, launches the appropriate program for it
 
 # if $1 isn't provided, spawn $BROWSER and exit. this allows lh to be used as a pseudo-browser.
 [ -z "$1" ] && exec "$BROWSER"
 #from pure-sh-bible
+
+#splits a string by $2
 split() {
 	set -f
 	old_ifs=$IFS
@@ -14,32 +16,58 @@ split() {
 	IFS=$old_ifs
 	set +f
 }
+#strips from the right end of a string
+lstrip() {
+	printf '%s\n' "${1##$2}"
+}
+
+# redir unwinding
+# prints all redirect locations
+findredir() {
+	#note: for loop turns all whitespace into newlines
+	for line in $(curl -sIL "$1")
+	do
+		# catch is used to find the line after location:
+		if [ -n "$catch" ]
+		then
+			# return caught line
+			echo "$line"
+			# reset catch variable
+			unset -- catch
+		fi
+		# set catch if the current line is location
+		if echo "$line"|grep -Fq 'ocation:'
+		then
+			catch=1
+		fi
+	done
+}
 
 # handle redirects. tr removes control characters, so the case statement below works as expected.
-URL=$(curl -IL "$1"|grep '^location: '|tail -1|sed 's/location: //'|tr -d '[:cntrl:]')
+URL=$(findredir|tail -1|tr -d '[:cntrl:]')
+
 # if there were no redirects, just set URL to the first argument
 [ -z "$URL" ] && URL="$1"
 
-echo $URL
 case "$URL" in
 	gemini://*|gopher://*)
 		$TERMINAL -e bombadillo "$URL" ;;
-	*mkv|*webm|*mp4)
-		mpv "$URL" >/dev/null 2>&1 & ;;
+	*.mkv*|*.webm*|*.mp4*)
+		mpv --no-terminal "$URL" & ;;
 	*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*|*twitch.tv/videos/*|*twitch.tv/*/v/*)
-		mpv --ytdl "$URL" >/dev/null 2>&1 & ;;
+		mpv --no-terminal --ytdl "$URL" & ;;
 	*twitch.tv/*)
 		STREAMQUAL="$(split "$(streamlink "$URL"|grep 'Available streams')" ", "|\
 			grep -E "[0-9]"|\
 			dmenu -p "choose stream quality for $URL")"
 		streamlink -p mpv $URL $STREAMQUAL >/dev/null 2>&1 & ;;
-	*png|*jpg|*jpe|*jpeg|*gif)
-		IMGPATH="/tmp/$(echo "$URL"|sed "s/.*\\///")"
-		curl -sL "$URL" >"$IMGPATH"&&sxiv -a "$IMGPATH">/dev/null 2>&1 & ;;
-	*mp3|*m4a|*flac|*aiff|*opus|*ogg|*mp3?source*)
-		mpv "$URL" >/dev/null 2>&1 & ;;
-	*epub|*pdf|*djvu)
-		BOOKPATH="/tmp/$(echo "$URL"|sed 's/.*\///')"
+	*.png*|*.jpg*|*.jpe*|*.jpeg*|*.gif*)
+		IMGPATH="/tmp/$(lstrip "$URL" "*/")"
+		curl -sL "$URL" >"$IMGPATH"&&sxiv -pqa "$IMGPATH" & ;;
+	*.mp3*|*.m4a*|*.flac*|*.aiff*|*.opus*|*.ogg*|*.mp3?source*)
+		mpv --no-terminal "$URL"& ;;
+	*.epub*|*.pdf*|*.djvu*)
+		BOOKPATH="/tmp/$(lstrip "$URL" "*/")"
 		if [ -n "$READER" ]; then
 			curl -sL "$URL" >"$BOOKPATH"&&$READER "$BOOKPATH">/dev/null 2>&1 &
 		else
@@ -47,7 +75,7 @@ case "$URL" in
 		fi ;;
 	*)
 		if [ -f "$URL" ]; then
-			$TERMINAL -e "${EDITOR:-vi} $URL"
+			op "$URL"
 		else
 			$BROWSER "$URL" >/dev/null 2>&1 &
 		fi ;;
diff --git a/bin/opener b/bin/op
index 4ae3446..688912b 100755
--- a/bin/opener
+++ b/bin/op
@@ -1,5 +1,5 @@
 #!/bin/sh
-# opener: opens files according to its contents
+# op: file OPener
 # takes one path as its argument, launches the appropriate program for it
 if ! [ -f "$1" ]; then
 	printf 'file %s does not exist!\n' "$1" >/dev/stderr
@@ -28,6 +28,6 @@ case "$FILEMIME" in
 		${EDITOR:-vi} "$FILEPATH">/dev/null 2>&1 & ;;
 	#catchall
 	*)
-		echo "file $(basename "$FILEPATH") could not be opened. its type is $FILEMIME, go tell ensa that opener didn't work" >/dev/stderr
+		echo "file $(basename "$FILEPATH") could not be opened. its type is $FILEMIME, go tell ensa that $(basename $0) didn't work" >/dev/stderr
 		return 1 ;;
 esac
diff --git a/bin/prompt b/bin/prompt
index ac1a319..fc0a07b 100755
--- a/bin/prompt
+++ b/bin/prompt
@@ -1,10 +1,4 @@
 #!/bin/sh
 # calls dmenu with $1 as the prompt and "no" and "yes" as the options.
 # if "yes" is chosen, call $2.
-if [ $# -eq 1 ]; then
-	case "$1" in
-		[!-]*|-*[!h]*) return 1 ;;
-		*h*) printf 'usage: %s [-h]|prompt cmd\n' "$(basename $0)">/dev/stderr&&return 1 ;;
-	esac
-fi
 [ "$(printf "no\\nyes"|dmenu -p "$1")" = "yes" ] && $2
diff --git a/bin/pw b/bin/pw
index fa33761..f7fd00a 100755
--- a/bin/pw
+++ b/bin/pw
@@ -1,4 +1,3 @@
 #!/bin/sh
 # generates a password of length $1.
-PW=$(tr -cd "[:alnum:][:punct:]"</dev/urandom|fold -w "$1"|head -1)
-printf '%s\n' "$PW"
+tr -cd "[:alnum:][:punct:]"</dev/urandom|fold -w "$1"|head -1
diff --git a/bin/rsschk b/bin/rsschk
index 5a8de6e..ab74169 100755
--- a/bin/rsschk
+++ b/bin/rsschk
@@ -1,16 +1,15 @@
 #!/bin/sh
-# checks if $1 is a valid URL, and if so, checks to see if it's in newsboat's urls file, and if not, adds it to the file.
+# checks if $1 is a valid URL
+# if so, checks to see if it's in newsboat's urls file
+# if not, adds it to the file.
 if [ "$1" = "-h" ]; then
 	printf 'usage: rsschk [-h]|URL [\"category\"]\n'>/dev/stderr&&return 1
 fi
-XDG_CONFIG_HOME=${XDG_CONFIG_HOME:=~/.config}
-! echo "$1" | grep "http*://\S\+\.[A-Za-z]\+\S*" >/dev/null &&
+# regex for finding urls
+re_urls='https?://[[:alnum:].]*:?[[:alnum:]./@$&%?$#=_-]*\.(rss|xml)'
+
+! echo "$1" | grep -Eq "$re_urls" &&
 	notify-send "Invalid input. rsschk takes http(s) URLs as input." && exit
-RSSFILE="$XDG_CONFIG_HOME/newsboat/urls"
-if grep -E "^$1" "$RSSFILE"; then
-	if [ -z "$2" ]; then
-		echo "$1">>"$RSSFILE"&&notify-send "RSS feed added." "You may want to edit $RSSFILE now."
-	else
-		echo "$1 $2">>"$RSSFILE"&&notify-send "RSS feed added with one category."
-	fi
-fi
+RSSFILE="${XDG_CONFIG_HOME:=~/.config}/newsboat/urls"
+grep -q "^$1" "$RSSFILE" &&
+	{ echo "$1">>"$RSSFILE"&&notify-send "RSS feed added.";}
diff --git a/bin/shenv b/bin/shenv
index d37733f..b242955 100755
--- a/bin/shenv
+++ b/bin/shenv
@@ -1,5 +1,5 @@
 #!/bin/sh
 # simply sources the shrc and runs a shell with that as its environment.
 # passes through all arguments that sh takes. to be used instead of sh.
-. ~/etc/shrc
-exec sh "$@"
+. ${XDG_CONFIG_HOME:=$HOME/.config}/shrc
+exec /bin/sh "$@"
diff --git a/bin/xbg b/bin/xbg
index bde015d..339ed69 100755
--- a/bin/xbg
+++ b/bin/xbg
@@ -1,10 +1,7 @@
 #!/bin/sh
-# checks to see if .fehbg exists. if so, sources it and exits.
 # if there is an argument, forcibly symlink it to $PICPATH and set $PICPATH to the background using xwallpaper.
 # if there is not an argument, set the wallpaper through the aforementioned method without setting the symlink.
 # $PICPATH is by default $XDG_PICTURES_DIR/bg.png, determined by xdg-user-dir if available or assumed to be ~/Pictures/bg.png if unavailable. $PICPATH can be set by the user in shrc if they wish to use a different background location.
-[ -e "$HOME/.fehbg" ]&&. "$HOME/.fehbg"&&exit
-
 if command -v xdg-user-dir >/dev/null; then
 	PICPATH=${PICPATH:="$(xdg-user-dir PICTURES)/bg.png"}
 else
diff --git a/config/aliasrc b/config/aliasrc
index 88d0ba7..5106070 100644
--- a/config/aliasrc
+++ b/config/aliasrc
@@ -38,8 +38,8 @@ alias \
 	pi='pkg_info -D snap'\
 	pl='pkglocate'\
 	f="\$FILE"\
-	e="\$EDITOR"\
-	v="\$EDITOR"\
+	e="TERM=xterm-256color \$EDITOR"\
+	v="TERM=xterm-256color \$EDITOR"\
 	yt='youtube-dl'\
 	ya="youtube-dl --config-location \$XDG_CONFIG_HOME/youtube-dl/config-music" \
 	unwww='bombadillo'\
diff --git a/config/cwmrc b/config/cwmrc
index 0a34d84..cc3b5e4 100644
--- a/config/cwmrc
+++ b/config/cwmrc
@@ -13,10 +13,11 @@ autogroup 9 pass
 #aesthetics
 fontname "Cozette:style=Medium:pixelsize=11"
 borderwidth 1
+color urgencyborder	"#cc3214"
 color activeborder	"#6b996b"
 color inactiveborder	"#4c4635"
 color groupborder	"#3c7b7f"
-color ungroupborder	"#cc3214"
+color ungroupborder	"#7a4955"
 color menubg		"#14130e"
 color menufg		"#b7a980"
 color font		"#3d6266"
@@ -25,15 +26,11 @@ color selfont		"#72694f"
 #don't want any default keys
 unbind-key all
 unbind-mouse all
-#program list
-command term xterm
-command lock slock
 #program spawning
 #bind-key 4-d dmenu_run
 bind-key 4-d menu-exec
-bind-key 4S-d menu-cmd
 bind-key 4C-d menu-window-hidden
-bind-key 4-Return terminal
+bind-key 4-Return "sh -c \"$TERMINAL\""
 #bind-key 4S-Return "sh -c \"$TERMINAL -class popup"
 bind-key 4-e "sh -c \"$TERMINAL -e env TERM=xterm-256color $EDITOR\""
 #bind-key 4S-e "sh -c \"$TERMINAL -class popup -e env TERM=xterm-256color $EDITOR\""
@@ -46,7 +43,6 @@ bind-key 4-m "sh -c \"$TERMINAL -class musictui -e $MUSIC\""
 bind-key 4-c "sh -c \"$TERMINAL -class mail -e $MAILER\""
 bind-key 4-n "sh -c \"$TERMINAL -e $RSS\""
 bind-key 4-r "sh -c \"$TERMINAL -e $FILE\""
-bind-key 4S-r "sh -c \"$READER\""
 bind-key 4-p "sh -c \"$SCR -u $(xdg-user-dir PICTURES)/screenshot-$(date +%Y-%m-%d_%T).png\""
 bind-key 4S-p "sh -c \"$SCR -us $(xdg-user-dir PICTURES)/screenshot-$(date +%Y-%m-%d_%T).png\""
 bind-key 4S-comma "mpc -q prev"
@@ -67,9 +63,9 @@ bind-key 4C-equal "xbacklight -inc 5"
 bind-key 4C-minus "xbacklight -dec 5"
 bind-key 4CS-equal "xbacklight -inc 15"
 bind-key 4CS-minus "xbacklight -dec 15"
-bind-key 4-x lock
-bind-key 4S-x "sh -c \"prompt 'shutdown computer?' 'doas shutdown -p now'\""
-bind-key 4S-BackSpace "sh -c \"prompt 'reboot computer?' 'doas shutdown -r now'\""
+bind-key 4-x "sh -c \"$LOCK\""
+bind-key 4S-x "prompt 'shutdown computer?' 'doas halt -p'"
+bind-key 4S-BackSpace "prompt 'reboot computer?' 'doas reboot'"
 bind-key 4-b "sh -c \"pkill dzen2||bar.sh\""
 #window nav
 bind-key 4-j window-cycle
@@ -115,7 +111,7 @@ bind-key 4-0 group-toggle-all
 bind-key 4S-0 window-stick
 bind-key 4C-0 window-hide
 #exits
-bind-key 4-F2 restart
+bind-key 4S-r restart
 bind-key 4S-Escape quit
 #group designation/nav
 bind-key 4-g window-group
diff --git a/config/dunst/dunstrc b/config/dunst/dunstrc
index 6687369..247809b 100644
--- a/config/dunst/dunstrc
+++ b/config/dunst/dunstrc
@@ -50,9 +50,7 @@
     show_indicators = yes
 
     ### Icons ###
-    icon_position = left
-    max_icon_size = 64
-    icon_path = /usr/local/share/icons/Adwaita/16x16/status/:/usr/local/share/icons/Adwaita/16x16/devices/
+    icon_position = off
 
     ### History ###
     sticky_history = yes
diff --git a/config/ksh/functions/l. b/config/ksh/functions/l.
index 8beac4e..e4a759e 100644
--- a/config/ksh/functions/l.
+++ b/config/ksh/functions/l.
@@ -1,8 +1,10 @@
 #!/bin/ksh
-l.() {
+function l. {
 	if [[ -n "$1" ]]; then
-		exa -Fbd "$1"/.*
+		( cd "$1" 2>/dev/null ||\
+			{ echo "$0: $1 - No such directory" >&2 ; exit; }
+		ls -d .* )
 	else
-		exa -Fbd .*
+		ls -d .*
 	fi
 }
diff --git a/config/lf/lfrc b/config/lf/lfrc
index 138c470..880ea97 100644
--- a/config/lf/lfrc
+++ b/config/lf/lfrc
@@ -5,16 +5,12 @@ set ifs "\n"
 
 set promptfmt "\033[1;31m%u\033[0;32m@\033[1;34m%h\033[0m:\033[1;36m%w/\033[0m\033[1m%f\033[0m"
 # cmds
-cmd open ${{
-	opener $f
-}}
-
 cmd ttmsh ${{
-	TTMURL="curl -F 'file=@-' https://ttm.sh < $f"
+	TTMURL="$(curl -F 'file=@'$f https://ttm.sh)"
 	if [ -n "$TTMURL" ]; then
 		echo "$TTMURL"|tee "$HOME/ttmsh"|xclip -r
-	done
-	notify-send  'successfully uploaded to ttm!' 'link copied to selection, backup is in $HOME/ttmsh'
+		notify-send  'successfully uploaded to ttm!' 'link copied to selection, backup is in $HOME/ttmsh'
+	fi
 }}
 
 cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1
diff --git a/config/shrc b/config/shrc
index 533386f..10f5287 100644
--- a/config/shrc
+++ b/config/shrc
@@ -19,7 +19,7 @@ export EDITOR="vise"
 export FILE="lf"
 export PAGER="less"
 export TERMINAL="xterm"
-export ALTSCR="st-altscreen"
+export OPENER="op"
 export BROWSER="firefox"
 export COMM="comm-sel"
 export READER="zathura"
@@ -30,8 +30,6 @@ export SCR="maim"
 export LOCK="slock"
 #less args
 export LESS='-iFMRX~ -x2'
-#ircii (and derivatives) ircservers location
-export IRC_SERVERS_FILE="$HOME_DATA/ircservers"
 #locale info
 export LANGUAGE="en"
 export LANG="POSIX.UTF-8"
@@ -39,7 +37,7 @@ export LC_ALL="POSIX.UTF-8"
 #lscolor
 export CLICOLOR=1
 #todo(1)
-export TODO="$HOME/doc/todo"
+export TODO="$HOME_DATA/xdg/doc/todo"
 #ksh
 export ENV="$HOME_ETC/ksh/kshrc"
 
@@ -47,6 +45,8 @@ export ENV="$HOME_ETC/ksh/kshrc"
 export GTK2_RC_FILES="$HOME_ETC/gtk-2.0/gtkrc-2.0"
 export LESSHISTFILE="-"
 export GOPATH="$HOME_EXT/go"
+export GOCACHE="$HOME_CACHE/go"
+export GOBIN="$HOME_EXT_BIN"
 export CARGO_HOME="$HOME_EXT/rust"
 export PYTHONUSERBASE="$HOME_EXT/python"
 export MEDNAFEN_HOME="$HOME_ETC/mednafen"
diff --git a/data/applications/doc.desktop b/data/applications/doc.desktop
deleted file mode 100644
index 49a399b..0000000
--- a/data/applications/doc.desktop
+++ /dev/null
@@ -1,4 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Non-raw document reader
-Exec=/usr/bin/env zathura %u
diff --git a/data/applications/img.desktop b/data/applications/img.desktop
deleted file mode 100644
index d754e1a..0000000
--- a/data/applications/img.desktop
+++ /dev/null
@@ -1,4 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Image viewer
-Exec=/usr/bin/env sxiv -a %u
diff --git a/data/applications/rss.desktop b/data/applications/rss.desktop
deleted file mode 100644
index 20ed292..0000000
--- a/data/applications/rss.desktop
+++ /dev/null
@@ -1,4 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=RSS feed addition
-Exec=/usr/bin/env rsschk %U
diff --git a/data/applications/text.desktop b/data/applications/text.desktop
deleted file mode 100644
index 39b1e3e..0000000
--- a/data/applications/text.desktop
+++ /dev/null
@@ -1,4 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Text editor
-Exec=/usr/bin/env xterm -e vis %u
diff --git a/data/applications/weblight.desktop b/data/applications/weblight.desktop
deleted file mode 100644
index 651d75a..0000000
--- a/data/applications/weblight.desktop
+++ /dev/null
@@ -1,4 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=Light Web Browser
-Exec=/usr/bin/env surf %u
diff --git a/data/mailcap b/data/mailcap
index d57b783..c8e0061 100644
--- a/data/mailcap
+++ b/data/mailcap
@@ -1,4 +1,2 @@
-text/plain; $EDITOR %s ;
 text/html; lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput;
-video/*; mpv --quiet %s &; copiousoutput
-application/pdf; $READER %s ;
+*/*; op %s