diff --git a/.bin/apps/amused b/.bin/apps/amused new file mode 100755 index 0000000..be26ad7 --- /dev/null +++ b/.bin/apps/amused @@ -0,0 +1,60 @@ +#!/bin/sh +. $HOME/.bin/_config + +showlist() { +printf '%s\n' \ +"next +prev +play +stop +shuffle +sort +load tank +load local +--------- +> $(amused status | head -1 | sed 's,/tank/pub/Audio_/,,g') +---------" + +amused show | cut -d'/' -f5- +} + +SEL="$( showlist | $DMENU_CMD -p Playlist -l 30)" + +amused_shuffle() {( + twmnc -d 2000 -t "amused" -c "shuffle started in background"; + amused show | sort -R | amused load; + twmnc -d 2000 -t "amused" -c "shuffle finished"; +)&} +amused_sort() {( + twmnc -d 2000 -t "amused" -c "sorting started in background" + amused show | sort -u | amused load + twmnc -d 2000 -t "amused" -c "sorting finished" +)&} +amused_load_tank() {( + twmnc -d 2000 -t "amused" -c "loading started in background" + amused load < /home/sdk/.music.all.txt + twmnc -d 2000 -t "amused" -c "loading finished" +)&} +amused_load_local() {( + twmnc -d 2000 -t "amused" -c "loading started in background" + find ~/MusicSelection -type f | amused load + twmnc -d 2000 -t "amused" -c "loading finished" +)&} +amused_cmd() { + amused "${@}" + twmnc -d 5000 \ + -t "amused $1" \ + -c "$(amused status | head -1 | cut -d'/' -f5-)" +} + +case "${SEL}" in + play) amused_cmd play; ;; + prev) amused_cmd pref; ;; + stop) amused_cmd stop; ;; + next) amused_cmd next; ;; + shuffle) amused_shuffle; ;; + sort) amused_sort; ;; + load*tank) amused_load_tank; ;; + load*local) amused_load_local; ;; + *) amused_cmd jump "${SEL}"; ;; +esac diff --git a/.bin/apps/ccc-streams b/.bin/apps/ccc-streams new file mode 100755 index 0000000..c602933 --- /dev/null +++ b/.bin/apps/ccc-streams @@ -0,0 +1,20 @@ +#!/bin/sh + +# needs: jq, curl, ffplay, notify-send + +# https://codevoid.de/1/git/dotfiles/file/.bin/_config.gph +. ~/.bin/_config +PLAYER="ffplay -loglevel error" +JSON="https://streaming.media.ccc.de/streams/v2.json" + +QUALITY="hd-native" +FORMAT="webm" + +SLUG=$(curl -s "$JSON" | jq -crM '.[].groups[].rooms[].slug' | $DMENU_CMD -p Stream ) +if [ ! -z "$SLUG" ]; +then + URL=$(curl -s "$JSON" | jq -Mcr ".[].groups[].rooms[] | select(.slug==\"$SLUG\") | .streams[] | select(.slug==\"$QUALITY\").urls.$FORMAT.url") + + ERR="$($PLAYER "$URL" 2>&1 > /dev/null)" + [ ! -z "$ERR" ] && notify-send "$ERR" +fi diff --git a/.bin/apps/fefe b/.bin/apps/fefe new file mode 100755 index 0000000..1e24118 --- /dev/null +++ b/.bin/apps/fefe @@ -0,0 +1,3 @@ +#!/bin/sh +. $HOME/.bin/_config +texec "sacc codevoid.de/1/fefe" diff --git a/.bin/apps/hackernews b/.bin/apps/hackernews new file mode 100755 index 0000000..a27bfb5 --- /dev/null +++ b/.bin/apps/hackernews @@ -0,0 +1,3 @@ +#!/bin/sh +. $HOME/.bin/_config +texec "sacc codevoid.de/1/hn" diff --git a/.bin/apps/irssi b/.bin/apps/irssi new file mode 100755 index 0000000..ac43b51 --- /dev/null +++ b/.bin/apps/irssi @@ -0,0 +1,3 @@ +#!/bin/sh +. $HOME/.bin/_config +texec "tmux new-session -A -s irrsi irssi" diff --git a/.bin/apps/settings b/.bin/apps/settings new file mode 100755 index 0000000..b593a5c --- /dev/null +++ b/.bin/apps/settings @@ -0,0 +1,34 @@ +#!/bin/sh +. $HOME/.bin/_config + +SEL=$(printf "BACKLIGHT\nAUDIODEVICE\nLIDACTION\nSCREEN\nCONFIGFILES" \ + | $DMENU_CMD -p Mailbox) + +case $SEL in + "BACKLIGHT") + S=$(printf "10\n20\n30\n40\n50\n60\n70\n80\n90\n100" | $DMENU_CMD -p Backlight) + doas wsconsctl display.brightness=$S + ;; + "AUDIODEVICE") + D=$(printf "0\n1\n2\n3\n4\n5" | $DMENU_CMD -p AudioDevice) + sndioctl server.device=$D + ;; + "LIDACTION") + A=$(printf "enable\ndisable" | $DMENU_CMD -p Lidaction) + case $A in + "enable") doas sysctl machdep.lidaction=1; ;; + "disable") doas sysctl machdep.lidaction=0; ;; + esac + ;; + "CONFIGFILES") + C=$(printf "cwmrc\nvimrc\nkshrc\nvimb\nmuttrc\nspectrwm" | sort | $DMENU_CMD -p File) + case $C in + "cwmrc") texec "vim $HOME/.cwmrc"; ;; + "mailcap") texec "vim $HOME/.mutt/mailcap"; ;; + "muttrc") texec "vim $HOME/.mutt/rc-common $HOME/.mutt/rc-account-*"; ;; + "spectrwm") texec "vim $HOME/.config/spectrwm/spectrwm.conf"; ;; + "vimb") texec "vim $HOME/.config/vimb/config"; ;; + "vimrc") texec "vim $HOME/.vim/vimrc"; ;; + esac + ;; +esac diff --git a/.bin/bterm b/.bin/bterm new file mode 100755 index 0000000..e83344b --- /dev/null +++ b/.bin/bterm @@ -0,0 +1,3 @@ +#!/bin/sh +. $HOME/.bin/_config +$BTERM $@ diff --git a/.bin/dexec b/.bin/dexec new file mode 100755 index 0000000..a9f0bf6 --- /dev/null +++ b/.bin/dexec @@ -0,0 +1,3 @@ +#!/bin/sh +. $HOME/.bin/_config +$DMENURUN_CMD -p Exec diff --git a/.bin/dexec_apps b/.bin/dexec_apps new file mode 100755 index 0000000..dbcd961 --- /dev/null +++ b/.bin/dexec_apps @@ -0,0 +1,4 @@ +#!/bin/sh +. $HOME/.bin/_config +APP=$(ls -1 $HOME/.bin/apps/ | $DMENU_CMD -p App) +[ ! -z "$APP" ] && $HOME/.bin/apps/$APP diff --git a/.bin/dexec_browser b/.bin/dexec_browser new file mode 100755 index 0000000..a406c00 --- /dev/null +++ b/.bin/dexec_browser @@ -0,0 +1,187 @@ +#!/bin/sh + +# dexec_browser +# A multi browser launcher +# +# 1. choose input source +# (filtered-, full history, clipboad, manual entry) +# 2. choose how to handle the input +# (can suggest a matching default) +# 3. choose which browser to use +# (can suggest a matching default) + +HISTFILE="${HOME}/.browser_history" + +test -f ${HOME}/.bin/_config \ + && . ${HOME}/.bin/_config \ + || DMENU_CMD=dmenu + +test -f "${HISTFILE}" \ + || touch "${HISTFILE}" + +PICKLIST="paste_from_clipboard +pick_from_history +----------------- +$(cat "${HISTFILE}" \ + | cut -b 23- \ + | sort -u \ + | egrep -v ' |^[^a-zA-Z0-9]' \ + | fgrep '.') +http://localhost" + +# show filtered history file +# EXPECTS: $PICKLIST $HISTFILE $DMENU_CMD +# PROVIDES: $INPUT +read_input() { + local S=$(printf '%s\n' "${PICKLIST}" \ + | ${DMENU_CMD} -p "Bookmarks") + + case "${S}" in + paste_from_clipboard) + S=$(xclip -o \ + | head -n 1) ;; + pick_from_history) + S=$(sort -r "${HISTFILE}" \ + | ${DMENU_CMD} -p "History:" \ + |cut -b23-) ;; + esac + + [ -z "${S}" ] && exit 0 + INPUT="${S}" +} + +# Decide how to open the thing +# EXPECTS: $INPUT $DMENU_CMD +# PROVIDES: $URI +choose_wrapper() { + +local SE="OPEN URL +Amazon +CPAN +Crates.io +DuckDuckGo Web Search +DuckDuckGo Image Search +Github +Marc Info MessageID +Marc Info OpenBSD Misc List +Marc Info OpenBSD Ports CVS +Marc Info OpenBSD Ports List +Marc Info OpenBSD Tech List +PDF Viewer +SearX Web Search +SearX Image Search +Wikipedia DE +Wikipedia EN +InternetMovieDataBase (IMDB) +OpenStreetMap (OSM) +Grep.app +Google Maps +Youtube" + + local C="$(printf '%s' "${INPUT}" \ + | head -n 1)" + case "${C}" in + *::*) DEFAULT="CPAN (default)"; ;; + http*) DEFAULT="OPEN (default)"; ;; + 192.168.*) DEFAULT="OPEN (default)"; ;; + gopher*) DEFAULT="OPEN (default)"; ;; + www.*) DEFAULT="OPEN (default)"; ;; + \<*@*\>) DEFAULT="Marc Info Message ID (default)"; ;; + *.com|*.de|*.net|*.org) DEFAULT="OPEN (default)"; ;; + *.at|*.ch|*.social) DEFAULT="OPEN (default)"; ;; + *.io|*.sh|*.pw|*.party) DEFAULT="OPEN (default)"; ;; + *.coffee|*.me|*.cloud) DEFAULT="OPEN (default)"; ;; + *.[a-zA-Z]*/*) DEFAULT="OPEN (default)"; ;; + *) DEFAULT="DuckDuckGo Web Search (default)"; ;; + esac + + local S="$(printf "%s\n%s" "${DEFAULT}" "${SE}" \ + | ${DMENU_CMD} -p "Search Where?")" + case "${S}" in + OPEN*) URI="${C}"; ;; + Amazon*) URI="https://www.amazon.de/s?k=${C}"; ;; + CPAN*) URI="https://metacpan.org/search?q=${C}"; ;; + Crate*) URI="https://crates.io/search?q=${C}"; ;; + Grep*) URI="https://grep.app/search?q=${C}"; ;; + Github) URI="https://github.com/search?q=${C}"; ;; + D*Web*) URI="https://html.duckduckgo.com/html?q=${C}"; ;; + D*Ima*) URI="https://duckduckgo.com/?q=${C}&iax=images&ia=images"; ;; + S*Web*) URI="https://searx.bar/search?q=${C}&category_general=on"; ;; + S*Ima*) URI="https://searx.bar/search?q=${C}&category_images=on"; ;; + W*DE*) URI="https://de.m.wikipedia.org/wiki/Spezial:Suche/${C}"; ;; + W*EN*) URI="https://en.m.wikipedia.org/wiki/Spezial:Search/${C}"; ;; + *IMDB*) URI="https://www.imdb.com/find?q=${C}"; ;; + O*S*M*) URI="https://www.openstreetmap.org/search?query=${C}"; ;; + G*Maps) URI="https://www.google.com/maps/place/${C}"; ;; + You*be) URI="https://m.youtube.com/results?sp=mAEA&search_query=${C}" ;; + M*I*ID*) URI="https://marc.info/?i=$(printf '%s' "${C}" | tr -d '<>')"; ;; + M*I*P*List) URI="https://marc.info/?l=openbsd-ports&s=${C}&q=b"; ;; + M*I*T*List) URI="https://marc.info/?l=openbsd-tech&s=${C}&q=b"; ;; + M*I*M*List) URI="https://marc.info/?l=openbsd-misc&s=${C}&q=b"; ;; + M*I*P*CVS) URI="https://marc.info/?l=openbsd-ports-cvs&s=${C}&q=b"; ;; + *) exit 0 ;; + esac +} + +# Which browser shall we use? +# EXPECTS: $URI $DMENU_CMD +# PROVIDES: $BROWSER +choose_browser() { + + case "${URI}" in + gopher://*) DEFAULT="Lagrange (default)"; ;; + gemini://*) DEFAULT="Lagrange (default)"; ;; + *.pdf|*.cb|*.ps) DEFAULT="Zathura (default)"; ;; + 192.168.*) DEFAULT="Firefox (default)"; ;; + *github.com*) DEFAULT="Firefox (default)"; ;; + *amazon.de*) DEFAULT="Firefox (default)"; ;; + *twitter.com*) DEFAULT="Firefox (default)"; ;; + *chaos.social*) DEFAULT="Firefox (default)"; ;; + *hetzner.cloud*) DEFAULT="Firefox (default)"; ;; + *hetzner.de*) DEFAULT="Firefox (default)"; ;; + *duckduckgo.com/*images*) DEFAULT="Firefox (default)"; ;; + *codevoid.de*) DEFAULT="Luakit (default)"; ;; + *google.*) DEFAULT="Chrome (default)"; ;; + *youtube.com*) DEFAULT="Chrome (default)"; ;; + *youtu.be*) DEFAULT="Chrome (default)"; ;; + *bsd.network*) DEFAULT="Chrome (default)"; ;; + *itch.io*) DEFAULT="Chrome (default)"; ;; + *chat.uugrn.org*) DEFAULT="Chrome (default)"; ;; + *[./]amazon.*) DEFAULT="Firefox (default)"; ;; + *comdirect.de*) DEFAULT="Firefox (default)"; ;; + *motorradfreunde-rheinneckar.de*) DEFAULT="Firefox (default)"; ;; + *polo-motorrad.com*) DEFAULT="Firefox (default)"; ;; + *peek-cloppenburg.de*) DEFAULT="Firefox (default)"; ;; + *asos.com*) DEFAULT="Firefox (default)"; ;; + *zalando.de*) DEFAULT="Firefox (default)"; ;; + *) DEFAULT="Luakit (default)"; ;; + esac + + local S="${DEFAULT}\nLuakit\nFirefox\nChrome\nQutebrowser\nNetsurf\nTor-Browser" + case $(echo "${S}" | ${DMENU_CMD} -p "Browser") in + Netsurf*) BROWSER=netsurf-gtk3 ;; + Vimb*) BROWSER=vimb ;; + Quteb*r*) BROWSER=qutebrowser ;; + Surf*) BROWSER=surf ;; + Otter*r*) BROWSER=otter-browser ;; + Luakit*) BROWSER="luakit -Un" ;; + Chrome*) BROWSER=chrome ;; + Firefox*) BROWSER=firefox ;; + Tor-B*r*) BROWSER=tor-browser ;; + Zathura*) BROWSER=zathura ;; + Lagrange*) BROWSER=lagrange ;; + *) exit 0;; + esac +} + +save_history() { + printf '%s %s\n' "$(date +"%Y-%m-%d %H:%M:%S |")" "${INPUT}" \ + >> "${HISTFILE}" +} + +# main program starts here. +read_input +choose_wrapper +choose_browser +save_history +exec $BROWSER "$(printf '%s' "${URI}" | sed 's/ /%20/g')" diff --git a/.bin/dexec_ding b/.bin/dexec_ding new file mode 100755 index 0000000..bd65f4f --- /dev/null +++ b/.bin/dexec_ding @@ -0,0 +1,4 @@ +#!/bin/sh +. $HOME/.bin/_config +D="$(echo "$(xclip -o)" | $DMENU_CMD -p Translate)" +[ ! -z "$D" ] && ding "$D" diff --git a/.bin/dexec_findwin b/.bin/dexec_findwin new file mode 100755 index 0000000..fe8854d --- /dev/null +++ b/.bin/dexec_findwin @@ -0,0 +1,10 @@ +#!/bin/sh +. $HOME/.bin/_config + +WID=$(wmctrl -l | col -b \ + | grep -v "^$" \ + | awk '{printf("%s",$1);$1="";$2="";$3=""; print $0}' \ + | $DMENU_CMD -p "Windows" \ + | awk '{ print $1 }' \ + ) +[ -z "$WID" ] || wmctrl -i -a $WID diff --git a/.bin/dexec_mail b/.bin/dexec_mail new file mode 100755 index 0000000..aba3581 --- /dev/null +++ b/.bin/dexec_mail @@ -0,0 +1,10 @@ +#!/bin/sh + +ALIASES=$(ksh -ic alias | grep ^mutt- | cut -d= -f1) + +. $HOME/.bin/_config +MAILBOX="imaps://mail.codevoid.de" + +SEL=$(printf "$ALIASES" | $DMENU_CMD -p Mutt) + +[ -z "$SEL" ] || texec $SEL diff --git a/.bin/dexec_man b/.bin/dexec_man new file mode 100755 index 0000000..ab87792 --- /dev/null +++ b/.bin/dexec_man @@ -0,0 +1,12 @@ +#!/bin/sh +. $HOME/.bin/_config + +MAN="$( for i in $(jot 9 1); do + man -s $i -k . | awk -v i=$i -F"(" '{ gsub(", ","\n"i"-",$1); print i"-"$1}' +done | $DMENU_CMD -p "Manpage" )" + +if [ ! -z "$MAN" ]; then + M="$(printf '%s' "$MAN" | cut -d"-" -f2)" + S="$(printf '%s' "$MAN" | cut -d"-" -f1)" + bterm -e man -s "$S" "$M" +fi diff --git a/.bin/dexec_pass b/.bin/dexec_pass new file mode 100755 index 0000000..d019d64 --- /dev/null +++ b/.bin/dexec_pass @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +. $HOME/.bin/_config + +shopt -s nullglob globstar + +prefix=${PASSWORD_STORE_DIR-~/.password-store} +password_files=( "$prefix"/**/*.gpg ) +password_files=( "${password_files[@]#"$prefix"/}" ) +password_files=( "${password_files[@]%.gpg}" ) +password=$(printf '%s\n' "${password_files[@]}" | $DMENU_CMD -p Password) + +[[ -n $password ]] || exit + +# read password file +password_out=$(pass "$password" 2> /dev/null) + +# copy password line +printf "%s" "$password_out" | head -1 | xclip -r + +# extract additional information +password_info=$(printf "%s" "$password_out" | grep -Ei 'login|user') +url_info=$(printf "%s" "$password_out" | grep -Ei '^url' | awk -F"[ :]*" '{ $1=""; print $0 }' ) + +# show desktop notification +if [[ -n $password_info ]]; then + notify pass "$(printf '%s' "$password_info")" +else + notify pass "No username provided." +fi diff --git a/.bin/dexec_pim b/.bin/dexec_pim new file mode 100755 index 0000000..2b73939 --- /dev/null +++ b/.bin/dexec_pim @@ -0,0 +1,49 @@ +#!/bin/sh +. $HOME/.bin/_config + +SEL=$(printf "Notes\nDocuments\nContacts\nSlides" | $DMENU_CMD -p "Information System") + +case $SEL in + Notes) + N=$(printf "Todo\nNotes\nEvents" | $DMENU_CMD -p Notes) + case $N in + Todo) hterm -e "vim scp://sdk@shell.codevoid.de/work/notes/todos.txt"; ;; + Notes) hterm -e "vim scp://sdk@shell.codevoid.de/work/notes/notes.txt" ;; + Events) hterm -e "vim scp://sdk@shell.codevoid.de/work/notes/events.txt" ;; + esac + ;; + Documents) + DOC=$(ls -1pr $PIMDIR/documents/ | grep -v '/$' | sort -hr | $DMENU_CMD -p Documents -l 25) + if [ ! -z "$DOC" ]; then + ACT=$(printf "View\nEdit\nEmail" | $DMENU_CMD -p Action) + case $ACT in + View) mupdf "$PIMDIR/documents/$DOC" ;; + Edit) pdfarranger "$PIMDIR/documents/$DOC" ;; + Email) texec "mutt -a \"$PIMDIR/documents/$DOC\"" ;; + esac + fi + ;; + Contacts) + C=$(contactsearch | $DMENU_CMD -p Contacts -l 25) + if [ ! -z "$C" ]; then + _file=$(printf "$C" | cut -d" " -f1) + if [ -f "$PIMDIR/contacts/$_file" ]; then + texec "vim \"$PIMDIR/contacts/$_file\"" + else + printf "Name:\nAddress:\nHome:\nWork:\nMail:\nWeb:\nBirthday:\n" >> "$PIMDIR/contacts/$_file" + texec "vim \"$PIMDIR/contacts/$_file\"" + fi + fi + ;; + Slides) + P=$(ls -1 "$PIMDIR/slides/" | sort -hr | $DMENU_CMD -p Slides -l 25) + if [ ! -z "$P" ]; then + ACT=$(printf "Open\nEdit" | $DMENU_CMD -p Action) + case $ACT in + Open) sent "$PIMDIR/slides/$P" ;; + Edit) texec "vim \"$PIMDIR/slides/$P\"" ;; + esac + fi + ;; +esac + diff --git a/.bin/dexec_port b/.bin/dexec_port new file mode 100755 index 0000000..1b03cbb --- /dev/null +++ b/.bin/dexec_port @@ -0,0 +1,25 @@ +#!/bin/sh + +# provides DMENU_CMD (dmenu + color parameter) +. $HOME/.bin/_config + +cd /usr/ports +DIR=$( ls -1d */* mystuff/*/* | egrep -v '^pobj|^distfiles|^log|^plist|^packages|CVS|Makefile|\.tgz$' | dmenu -p "DIR:" $DMENUOPTS -l 20); +if [ ! -z "$DIR" ]; then + cd /usr/ports/$DIR + DIR2=$(printf "%s\n\n%s\n%s\n%s\n\nCVS %s\n" \ + "/usr/ports/$DIR" \ + "Package: $(make show=FULLPKGNAME)" \ + "Maintainer: $(make show=MAINTAINER)" \ + "Homepage: $(make show=HOMEPAGE)" \ + "$(cvs log -Nl -rHEAD 2>&1 | awk '{ if ($0 ~ /^===/) p++; if (p == 1) print $0; if ($0 ~ /^---/) p++; }')" \ + | dmenu -p "INFO:" $DMENUOPTS -l 20) + if [ ! -z "$DIR2" ]; then + case "$DIR2" in + Homepage*) firefox "$(make show=HOMEPAGE)" & ;; + Package*) make show=FULLPKGNAME | xclip -r ;; + Maintainer*) make show=MAINTAINER | xclip -r ;; + *) cd "$DIR2"; port mark; dterm & ;; + esac + fi +fi diff --git a/.bin/dexec_ssh b/.bin/dexec_ssh new file mode 100755 index 0000000..c9e2e0b --- /dev/null +++ b/.bin/dexec_ssh @@ -0,0 +1,13 @@ +#!/bin/sh +. $HOME/.bin/_config + +CONF=$(cat $HOME/.ssh/config| grep -Ei "^host" | grep -v '*' | cut -d" " -f2) +HOSTS=$(cat $HOME/.ssh/known_hosts | cut -d" " -f1 | tr ',' '\n') + +HOST=$(printf '%s\n%s' "$CONF" "$HOSTS" | grep -v '=' | sort -ru | $DMENU_CMD -p SSH) +if [ ! -z "$HOST" ]; then + case "$HOST" in + *-sftp) texec "sftp $HOST"; ;; + *) texec "ssh $HOST"; ;; + esac +fi diff --git a/.bin/dexec_term b/.bin/dexec_term new file mode 100755 index 0000000..3c950dc --- /dev/null +++ b/.bin/dexec_term @@ -0,0 +1,4 @@ +#!/bin/sh +. $HOME/.bin/_config +S=$(dmenu_path | $DMENU_CMD -p Exec) +[ ! -z $S ] && sterm -e "$S" diff --git a/.bin/dopaste b/.bin/dopaste new file mode 100755 index 0000000..029bbd1 --- /dev/null +++ b/.bin/dopaste @@ -0,0 +1,55 @@ +#!/bin/sh +. $HOME/.bin/_config + +PSSH="${USER}@${DOMAIN}" +LOC="p" + +f="$1" +if [ "$1" = "-h" ]; then + printf "Usage:\n" + printf " paste < text.txt - read from stdin, generate filename\n" + printf " paste new.txt < file.txt - read from stdin with filename\n" + printf " paste file.txt - upload file as is\n" + return 0 +fi +if [ -z "$1" ]; then + f="$(date +"%Y-%m-%d_%M-%S")-$(pwgen -1 4 -A -0).txt" + ssh ${PSSH} "printf \"%s\" \"$(cat)\" > ${RPATH}/${LOC}/$f" + +elif [ -f "$f" ]; then + scp "$f" ${PSSH}:"${RPATH}/${LOC}/${f##*/}" +else + ssh ${PSSH} "printf \"%s\n\" \"$(cat)\" > ${RPATH}/${LOC}/${f##*/}" + +fi + +SELECTOR="9" +# if data comes from stdin +if [ ! -t 0 ]; then + # it's always 0 + SELECTOR="0" +else + # if a parmeter is given and it's a file + if [ -f "$f" ]; then + # determine type and set selector + case "$(file --mime-type -b "$f")" in + image/*) SELECTOR="I";; + text/*) SELECTOR="0";; + message/*) SELECTOR="0";; + */x-shellscript) SELECTOR="0";; + */pgp-keys) SELECTOR="0";; + esac + else + # parameter given, but not a file, must be cat then... + SELECTOR=0 + fi +fi + +printf "https://${DOMAIN}/${SELECTOR}/${LOC}/${f##*/}\n" +printf "https://${DOMAIN}/${SELECTOR}/${LOC}/${f##*/}" | xclip + +# write paste history (for convenience and rmpaste) +printf "$(date +"%Y-%m-%d %M:%S")|$f\n" \ + | ssh -q $PSSH "cat - >> $RPATH/${LOC}/.pastehistory" + +[ -z $DISPLAY ] || notify-send "$(xclip -o)" diff --git a/.bin/hterm b/.bin/hterm new file mode 100755 index 0000000..7cbd312 --- /dev/null +++ b/.bin/hterm @@ -0,0 +1,3 @@ +#!/bin/sh +x +. $HOME/.bin/_config +$HTERM -T "term" $@ diff --git a/.bin/lspaste b/.bin/lspaste new file mode 100755 index 0000000..1cf20d3 --- /dev/null +++ b/.bin/lspaste @@ -0,0 +1,6 @@ +#!/bin/sh +. $HOME/.bin/_config + +ssh $USER@$DOMAIN "cd $RPATH/p && ls -tr1 | xargs file --mime-type" \ + | awk -F'[ :]*' -v url="https://$DOMAIN" \ + '{if ($2 ~ /^image/) { print url"/I/p/"$1 } else { print url"/0/p/"$1 }}' diff --git a/.bin/nnn.sh b/.bin/nnn.sh new file mode 100755 index 0000000..bb1dfed --- /dev/null +++ b/.bin/nnn.sh @@ -0,0 +1,97 @@ +#!/bin/ksh + +if [ -z "$1" ]; +then + print "Parameter missing." + exit 2 +fi + +################################################### +# URLS +################################################### + +if print "$1" | egrep -qi '^shell:|^ushell:|^cvs:'; +then + _server=${1%%:*} + _dir=${1#*:} + ssh -tt $_server "vim $_dir" + exit 0 +fi + +if print "$1" | egrep -qi '^http[s]{0,1}://'; +then + case "$1" in + *.mkv) mpv "$1"; ;; + *.mp4) mpv "$1"; ;; + *.webm) mpv "$1"; ;; + *) sacc "$1"; ;; + esac + ${BROWSER:=luakit} "$1" + exit 0 +fi + +if print "$1" | egrep -qi '^gopher://'; +then + case "$1" in + *.mkv) mpv "$1"; ;; + *.mp4) mpv "$1"; ;; + *.webm) mpv "$1"; ;; + *) sacc "$1"; ;; + esac + exit 0 +fi + +################################################### +# REAL FILES +################################################### + +if [ ! -f "$1" ]; +then + print "Parameter is not a file." + exit 1 +fi + +################################################### +# EXTENSIONS +################################################### + +EXT="$(print "${1##*.}" | tr '[:upper:]' '[:lower:]')" + +case "$EXT" in + docx) libreoffice "$1"; ;; + xlsx) libreoffice "$1"; ;; + txt) vim "$1"; ;; + m2ts) mpv "$1"; ;; + sid) sidplay "$1"; ;; + out) kdump -RTf "$1" | less; ;; + *) unset EXT; ;; +esac + +if [ ! -z "$EXT" ]; +then + exit 0; +fi + +################################################### +# MIME TYPES +################################################### + +case "$(file -ib "$1")" in + # full qualified + application/ogg) ogg123 "$1"; ;; + application/pdf) mupdf-gl -XJA0 "$1"; ;; + application/postscript) mupdf-gl -XJA0 "$1"; ;; + application/vnd.oasis.opendocument.*) libreoffice "$1"; ;; + audio/mpeg) mpg123 "$1"; ;; + audio/midi) timidity "$1"; ;; + # with wildcards + audio/*) mpv "$1"; ;; + video/*) mpv "$1"; ;; + image/webp) mpv "$1"; ;; + image/*) sxiv -N floating -g 1280x720+300+180 -ab "$1"; ;; + # can't handle + application/octet-stream) print "Sorry, can't handle: $1"; ;; + # vim can handle a lot! + *) vim "$1"; ;; +esac + diff --git a/.bin/rmpaste b/.bin/rmpaste new file mode 100755 index 0000000..d8c67bd --- /dev/null +++ b/.bin/rmpaste @@ -0,0 +1,27 @@ +#!/bin/sh +. $HOME/.bin/_config + +PSSH="$USER@$DOMAIN" +LOC="p" + +if [ "$1" = "-h" ]; then + printf "Usage:\n" + printf " rmpaste - deletes last paste based on ~/.pastehistory\n" + printf " rmpaste - deletes paste with \n" + return 0 +fi +if [ -z $1 ]; then + if ssh -q $PSSH "! [ -s $RPATH/$LOC/.pastehistory ];"; then + printf "The history file is empty.\n" + return 0 + fi + f=$(ssh -q $PSSH "tail -1 $RPATH/$LOC/.pastehistory | cut -d'|' -f2") + + read d?"Delete last paste? ($f) [y/N] : " + if [ "$d" = "y" ]; then + ssh $PSSH "rm $RPATH/$LOC/$f" + ssh -q $PSSH "sed -i '$ d' $RPATH/$LOC/.pastehistory" + fi +else + ssh $PSSH "rm $RPATH/$LOC/$1" +fi diff --git a/.bin/sterm b/.bin/sterm new file mode 100755 index 0000000..c9c9199 --- /dev/null +++ b/.bin/sterm @@ -0,0 +1,3 @@ +#!/bin/sh +. $HOME/.bin/_config +$STERM $@ diff --git a/.bin/v b/.bin/v new file mode 100755 index 0000000..ba1fc12 --- /dev/null +++ b/.bin/v @@ -0,0 +1,31 @@ +#!/bin/sh + +set -xe + +[ -f /usr/bin/doas ] || alias doas=sudo + +_input="$(echo "$1" | sed 's/:$//g')" +_file="$(echo "$_input" | sed 's/:[0-9:]*$//g')" +_fnr="$(echo "$_input" | awk -F: '{ print NF }')" + +[ ! -w $_file ] \ + && _cmd="doas vim" \ + || _cmd="vim" + +if [ $_fnr -eq 3 ] +then + _row="$(echo "$_input" | awk -F: '{ print $2 }')" + _col="$(echo "$_input" | awk -F: '{ print $3 }')" + $_cmd -c ":call cursor($_row,$_col)" "$_file" + +elif [ $_fnr -eq 2 ] +then + _row="$(echo "$_input" | awk -F: '{ print $2 }')" + $_cmd +$_row "$_file" + +else + echo "No cursor position found..." + $_cmd "$_file" +fi + +exit 0 diff --git a/.kshrc b/.kshrc index 05d8eb3..3de2990 100644 --- a/.kshrc +++ b/.kshrc @@ -506,9 +506,8 @@ dotfiles_autoupdate() { dotfiles_init() { git --no-replace-objects clone --bare --depth 1 \ - sdk@home.codevoid.de:.dotfiles.git $HOME/.cfg; + git@github.com:c0dev0id/dotfiles.git $HOME/.cfg; config config --local status.showUntrackedFiles no; - mkdir -p $HOME/.vim/undo $HOME/.vim/swapfiles $HOME/.vim/backup; config checkout -f } diff --git a/.vim/.netrwhist b/.vim/.netrwhist index 1804996..6bb82bf 100644 --- a/.vim/.netrwhist +++ b/.vim/.netrwhist @@ -1,5 +1,6 @@ let g:netrw_dirhistmax =10 -let g:netrw_dirhistcnt =3 +let g:netrw_dirhistcnt =4 +let g:netrw_dirhist_4='/home/sdk/.bin' let g:netrw_dirhist_3='/home/sdk' let g:netrw_dirhist_2='/home/sdk/.vim' let g:netrw_dirhist_1='sftp://sdk@gopher.codevoid.de/../www/htdocs/gopher/' @@ -9,4 +10,3 @@ let g:netrw_dirhist_8='/home/sdk/code/bar' let g:netrw_dirhist_7='/home/sdk/code/drist' let g:netrw_dirhist_6='/home/sdk/code' let g:netrw_dirhist_5='/home/sdk/.FontForge' -let g:netrw_dirhist_4='/home/sdk/.audacity-data'