TERM=xterm-256color
fi
- if [[ $TERM == alacritty && ! -e /usr/share/terminfo/a/alacritty ]]; then
- # todo: we should try installing the alacritty terminfo if it is not found
- # https://github.com/alacritty/alacritty/issues/2838
- TERM=xterm-256color
- fi
-
- # copying from the alacritty example above,
- if [[ $TERM == xterm-kitty ]]; then
- if [[ ! -e /usr/share/terminfo/x/xterm-kitty ]]; then
- TERM=xterm-256color
- else
- if [[ -e /a/opt/kitty/shell-integration/bash/kitty.bash ]]; then
- KITTY_SHELL_INTEGRATION=t
- source /a/opt/kitty/shell-integration/bash/kitty.bash
- fi
- fi
- fi
-
# todo: not sure this works in sakura
#stty werase undef
#bind "\C-w": kill-region
# sakura == xterm-256color
# konsole == xterm
- if [[ $TERM != xterm-kitty && $TERM == xterm* ]]; then
+ if [[ $TERM == xterm* ]]; then
# control + arrow keys. for other terminals, see http://unix.stackexchange.com/questions/10806/how-to-change-previous-next-word-shortcut-in-bash
bind '"\e[1;5C": shell-forward-word' 2>/dev/null
bind '"\e[1;5D": shell-backward-word' 2>/dev/null
fi
-case $TERM in
- # fixup broken backspace in chroots
- xterm-kitty|alacritty)
- chroot() {
- TERM=xterm-256color command chroot "$@"
- }
- ;;
-esac
-
export BC_LINE_LENGTH=0
# ansible option
done
}
+screenrtp() {
+
+ local ip port xoffset
+ read -r ip port xoffset <<<"$@"
+
+ setxenv
+
+ if [[ ! $port ]]; then
+ port=9999
+ fi
+
+ while true; do
+ # By default, plugged in screen goes to the right side, so we need an
+ # offset that is the same as the laptop's x resolution. If we are in
+ # mirror mode, then we don't need an offset.
+ if [[ ! $xoffset ]]; then
+ xoffset=0
+ laptop_x=$(xrandr | awk '$1 == "LVDS-1" {print $4}' | sed 's/x.*//') || { sleep 1; continue; }
+ total_x=$(xdpyinfo| awk '$1 == "dimensions:" {print $2}' | sed 's/x.*//') || { sleep 1; continue; }
+ screen2_res=$(xrandr | awk '$2 == "connected" && $1 != "LVDS-1" { print $3 }' | sed 's/+.*//')
+ if (( laptop_x < total_x )); then
+ xoffset=$laptop_x
+ fi
+ fi
+
+ m ffmpeg -probesize 50M -thread_queue_size 50 \
+ -video_size $screen2_res -f x11grab -framerate 30 -i :0.0+$xoffset.0 \
+ -vcodec libx264 -g 1 -tune zerolatency -preset ultrafast -pix_fmt yuv420p -x264-params repeat-headers=1 \
+ -f rtp_mpegts rtp://$ip:$port ||:
+
+
+ sleep 1
+ done
+}
+
+setxenv() {
+ if [[ ! $DISPLAY ]]; then
+ export DISPLAY=:0.0
+ fi
+ if [[ ! $XAUTHORITY ]]; then
+ export XAUTHORITY=$HOME/.Xauthority
+ fi
+}
+
#### end fsf section
fi
ll ~/.ssh/known_hosts
}
-khfix-r() { # known hosts fix + root
+khfix-r() { # known hosts fix without syncing to root user
_khfix-common "$@" || return 1
ssh $1 :
- rootsshsync
}
khfix() {
_khfix-common "$@" || return 1
ssh $1 :
+ rootsshsync
}
# copy path into clipboard
done < <(find "$@" -print0);
}
+# shellcheck disable=SC2120
faf() { # find all files. use -L to follow symlinks
find "$@" -not \( -name .svn -prune -o -name .git -prune \
-o -name .hg -prune -o -name .editor-backups -prune \
/usr/bin/nagstamon &
}
-# profanity screen
+# profanity tmux
profsrc() {
- screen -RD -S profanity
+ screen -L profanity a
}
# i dont want to wait for konsole to exit...
c "$(mktemp -d)"
pkg=$1
# shellcheck disable=SC2012
- cached=$(ls -t /var/cache/apt/archives/${pkg}_* | tail -n1 2>/dev/null) ||:
+ cached=$(ls -t /var/cache/apt/archives/${pkg}_* 2>/dev/null | tail -n1 2>/dev/null) ||:
if [[ $cached ]]; then
m cp $cached .
else
systemctl list-unit-files | rg "$@"
}
+# check whether we generally want to do sk on the file
+sk-p() {
+ [[ ! -L $f ]] && istext "$1" && [[ $(head -n1 "$1" 2>/dev/null) == '#!/bin/bash'* ]]
+}
sk() {
# see https://savannah.gnu.org/maintenance/fsf/bash-style-guide/ for justifications
local quotes others ret
quotes=2048,2068,2086,2206,2254
- others=2029,2032,2033,2054,2164,
- shellcheck -W 999 -x -e $quotes,$others "$@" || ret=$?
+ others=2029,2032,2033,2054,2164
+ shellcheck -x -W 999 -e $quotes,$others "$@" || ret=$?
if (( ret >= 1 )); then
echo "A template comment to disable is now in clipboard. eg: # shellcheck disable=SC2206 # reason"
cbs "# shellcheck disable=SC"
return $ret
fi
}
+
# sk with quotes. For checking scripts that we expect to take untrusted
# input in order to verify we quoted vars.
skq() {
shellcheck -W 999 -x -e $others "$@" || return $?
}
-skgit() {
+# sk on all modified files in current git repo
+skmodified() {
local f
for f in $(i s | awk '$1 == "modified:" {print $2}'); do
- if istext "$f" && [[ $(head -n1 "$f" 2>/dev/null) == '#!/bin/bash'* ]]; then
+ if sk-p "$f"; then
sk $f ||:
fi
done
}
+
+# sk on all the files in current git repo
+skgit() {
+ local f toplevel orig_dir tmp
+ local -a ls_files sk_files
+ toplevel=$(git rev-parse --show-toplevel)
+ if [[ $PWD != "$toplevel" ]]; then
+ orig_dir=$PWD
+ cd $toplevel
+ fi
+ # tracked & untracked files
+ tmp=$(git ls-files && git ls-files --others --exclude-standard)
+ mapfile -t ls_files <<<"$tmp"
+ for f in "${ls_files[@]}"; do
+ if sk-p "$f"; then
+ sk_files+=("$f")
+ fi
+ done
+ sk "${sk_files[@]}"
+ if [[ $orig_dir ]]; then
+ cd $orig_dir
+ fi
+}
+
+
# sl: ssh, but firsh rsync our bashrc and related files to a special
# directory on the remote host if needed.
ccomp ssh sl slr sss ssk
# plain ssh
ssh() {
- if [[ $TERM == alacritty || $TERM == xterm-kitty ]]; then
- TERM=xterm-256color LC_USEBASHRC=t command ssh "$@"
- else
- LC_USEBASHRC=t command ssh "$@"
- fi
+ LC_USEBASHRC=t command ssh "$@"
}
}
m() { printf "%s\n" "$*"; "$@"; }
+m2() { printf "%s\n" "$*" >&2; "$@"; }
# update file. note: duplicated in mail-setup.
# updates $ur u result to true or false
}
catnew() {
- local dir file
+ local dir file _
dir="$1"
+ # shellcheck disable=SC2030
inotifywait -m "$dir" -e create -e moved_to | while read -r _ _ file; do
hr
cat "$dir/$file"
# so I've thrown a bunch of things at the wall to speed it up.
prompt-command() {
local return=$? # this MUST COME FIRST
+
+ # all usable colors:
+ # black
+ # green nonzero exit (pri 1)
+ # purple default
+ # purple bold
+ # red pwd different owner & group & not writable (pri 2)
+ # red bold pwd different owner & group & writable (pri 2)
+ # yellow
+
local ps_char ps_color
unset IFS
history -a # save history
fi
- case $return in
- 0) ps_color="$term_purple"
- ps_char='\$'
- ;;
- *) ps_color="$term_green"
- ps_char="$return \\$"
- ;;
- esac
+ ps_color="$term_purple"
+ ps_char='\$'
if [[ ! -O . ]]; then # not owner
if [[ -w . ]]; then # writable
ps_color="$term_bold$term_red"
else
- ps_color="$term_bold$term_green"
+ ps_color="$term_red"
fi
fi
+ if [[ $return != 0 ]]; then
+ ps_color="$term_green"
+ ps_char="$return \\$"
+ fi
+
# faster than sourceing the file im guessing
if [[ -e /dev/shm/iank-status && ! -e /tmp/quiet-status ]]; then
eval "$(< /dev/shm/iank-status)"
fi
+
+lp22viewers() {
+ v=0
+ roomv=(0 0)
+ rooms=(jupiter saturn)
+ for ip in 209.51.188.25 live.fsf.org; do
+ out=$(curl -sS --insecure https://$ip/)
+ for i in 0 1 2; do
+ room=${rooms[i]}
+ while read -r n; do
+ v=$((v+n))
+ roomv[$i]=$(( ${roomv[$i]} + n ))
+ done < <(printf "%s\n" "$out" | grep -Po "$room.*?current[^0-9]*[0-9]*" | grep -o '[0-9]*$' )
+ done
+ done
+ printf "total: %s " $v
+ for i in 0 1; do
+ room=${rooms[i]}
+ printf "$room: %s " "${roomv[$i]}"
+ done
+ echo
+}
+
+arpflush() {
+ local default_route_dev
+ default_route_dev=$(ip r show default | sed 's/.*dev \([^ ]*\).*/\1/' | head -n1)
+ m s ip n flush dev "$default_route_dev"
+}
+
# * stuff that makes sense to be at the end