general fixes
[distro-setup] / brc
diff --git a/brc b/brc
index 2fbce5534d3f8b116fba0573d6c37742d7ca1e40..32a2c66212893c101c8e7c57670f5486a6f613c8 100644 (file)
--- a/brc
+++ b/brc
@@ -248,30 +248,12 @@ if [[ $- == *i* ]]; then
       TERM=xterm-256color
     fi
 
       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
     # 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
       # 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
@@ -291,15 +273,6 @@ if [[ $- == *i* ]]; then
 
 fi
 
 
 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
 export BC_LINE_LENGTH=0
 
 # ansible option
@@ -801,6 +774,50 @@ EOF
   done
 }
 
   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
 
 
 #### end fsf section
 
 
@@ -842,25 +859,40 @@ fpst() { # file paste
 }
 
 _khfix-common() {
 }
 
 _khfix-common() {
-  local host ip port file key tmp
-  read -r host ip port < <(timeout -s 9 2 ssh -oBatchMode=yes -oControlMaster=no -oControlPath=/ -v $1 |& sed -rn "s/debug1: Connecting to ([^ ]+) \[([^\]*)] port ([0-9]+).*/\1 \2 \3/p" ||: )
+  local host ip port file key tmp ssh_host alias
+  ssh_host=$1
+  {
+    read -r host ip port
+    read -r alias;
+    # note ":graph:" is needed or else we get a trailing \r out of ssh,
+    # dunno why.  web search says terminals add \r, so I tried adding -T
+    # to turn off psuedo terminal, but it didnt help.
+  } < <(timeout -s 9 2 ssh -TN -oBatchMode=yes -oControlMaster=no -oControlPath=/ -v $ssh_host |&
+        sed -rn "s/debug1: Connecting to ([^ ]+) \[([^\]*)] port ([0-9]+).*/\1 \2 \3/p;
+s/^debug1: using hostkeyalias: ([[:graph:]]*).*/\1/p" ||: )
   file=$(readlink -f ~/.ssh/known_hosts)
   if [[ ! $ip ]]; then
     echo "khfix: ssh failed"
     return 1
   fi
   file=$(readlink -f ~/.ssh/known_hosts)
   if [[ ! $ip ]]; then
     echo "khfix: ssh failed"
     return 1
   fi
+  ip_entry=$ip
+  host_entry=$host
+  if [[ $alias ]]; then
+    host_entry="$alias"
+  fi
   if [[ $port != 22 ]]; then
     ip_entry="[$ip]:$port"
   if [[ $port != 22 ]]; then
     ip_entry="[$ip]:$port"
-    host_entry="[$host]:$port"
-  else
-    ip_entry=$ip
-    host_entry=$host
+    if [[ ! $alias ]]; then
+      host_entry="[$host]:$port"
+    fi
   fi
   fi
-  if [[ $host != "$ip" ]]; then
+  if [[ $host_entry != "$ip_entry" ]]; then
     tmp=$(mktemp)
     ssh-keygen -F "$host_entry" -f $file >$tmp || [[ $? == 1 ]] # 1 when it doesnt exist in the file
     if [[ -s $tmp ]]; then
       key=$(sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/' $tmp)
     tmp=$(mktemp)
     ssh-keygen -F "$host_entry" -f $file >$tmp || [[ $? == 1 ]] # 1 when it doesnt exist in the file
     if [[ -s $tmp ]]; then
       key=$(sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/' $tmp)
+    else
+      echo "khfix WARNING: did not find host entry:$host_entry in known_hosts"
     fi
     rm $tmp
     if [[ $key ]]; then
     fi
     rm $tmp
     if [[ $key ]]; then
@@ -872,12 +904,13 @@ _khfix-common() {
   ssh-keygen -F "$ip_entry" -f $file >$tmp || [[ $? == 1 ]]
   if [[ -s $tmp ]]; then
     key=$(sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/' $tmp)
   ssh-keygen -F "$ip_entry" -f $file >$tmp || [[ $? == 1 ]]
   if [[ -s $tmp ]]; then
     key=$(sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/' $tmp)
+  else
+    echo "khfix WARNING: did not find ip entry:$ip_entry in known_hosts"
   fi
   rm $tmp
   if [[ $key ]]; then
     grep -Fv "$key" "$file" | sponge "$file"
   fi
   fi
   rm $tmp
   if [[ $key ]]; then
     grep -Fv "$key" "$file" | sponge "$file"
   fi
-  ll ~/.ssh/known_hosts
 }
 khfix-r() { # known hosts fix without syncing to root user
   _khfix-common "$@" || return 1
 }
 khfix-r() { # known hosts fix without syncing to root user
   _khfix-common "$@" || return 1
@@ -1402,7 +1435,12 @@ egrinid() {
   sed -rn '/testignore|jtuttle|eximbackup/!s/^[^ ]+ ([^ ]+) [^ ]+ [^ ]+ <= ([^ ]+).* id=([^ ]+) T="(.*)" from (<[^ ]+> .*$)/\1 \5\n \3\n \4/p' <${1:-/var/log/exim4/mainlog}
 }
 etailin() {
   sed -rn '/testignore|jtuttle|eximbackup/!s/^[^ ]+ ([^ ]+) [^ ]+ [^ ]+ <= ([^ ]+).* id=([^ ]+) T="(.*)" from (<[^ ]+> .*$)/\1 \5\n \3\n \4/p' <${1:-/var/log/exim4/mainlog}
 }
 etailin() {
-  tail -F /var/log/exim4/mainlog | sed -rn '/testignore|jtuttle|eximbackup/!s/^[^ ]+ ([^ ]+) [^ ]+ [^ ]+ <= ([^ ]+).*T="(.*)" from (<[^ ]+> .*$)/\1 \4\n \3/p'
+  local -a tail_arg
+  tail_arg=(-n500)
+  if [[ $1 ]]; then
+    tail_arg=($@)
+  fi
+  tail "${tail_arg[@]}" -F /var/log/exim4/mainlog | sed -rn '/testignore|jtuttle|eximbackup/!s/^[^ ]+ ([^ ]+) [^ ]+ [^ ]+ <= ([^ ]+).*T="(.*)" from (<[^ ]+> .*$)/\1 \4\n \3/p'
 }
 
 
 }
 
 
@@ -1417,6 +1455,7 @@ fa() {
   done < <(find "$@" -print0);
 }
 
   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 \
 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 \
@@ -2072,9 +2111,9 @@ nags() {
   /usr/bin/nagstamon &
 }
 
   /usr/bin/nagstamon &
 }
 
-# profanity screen
+# profanity tmux
 profsrc() {
 profsrc() {
-  screen -RD -S profanity
+  screen -L profanity a
 }
 
 # i dont want to wait for konsole to exit...
 }
 
 # i dont want to wait for konsole to exit...
@@ -2463,19 +2502,24 @@ sgu() {
   systemctl list-unit-files | rg "$@"
 }
 
   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
 
 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
 }
   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() {
 # sk with quotes. For checking scripts that we expect to take untrusted
 # input in order to verify we quoted vars.
 skq() {
@@ -2484,15 +2528,41 @@ skq() {
   shellcheck -W 999 -x -e $others "$@" || return $?
 }
 
   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
   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 $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.
 
 # sl: ssh, but firsh rsync our bashrc and related files to a special
 # directory on the remote host if needed.
 
@@ -2726,8 +2796,15 @@ sl() {
 slr() {
   sl --rsync "$@"
 }
 slr() {
   sl --rsync "$@"
 }
-sss() { # ssh solo
-  sl -oControlMaster=no -oControlPath=/ "$@"
+
+
+# ssh solo
+#
+# WARNING: If you are trying to use -i, remember that keys added to
+# agent previously will still be tried. Use ssh-add -D to remove all
+# keys from the agent.
+sss() {
+  ssh -oControlMaster=no -oControlPath=/ "$@"
 }
 # kill off old shared socket then ssh
 ssk() {
 }
 # kill off old shared socket then ssh
 ssk() {
@@ -2737,11 +2814,7 @@ ssk() {
 ccomp ssh sl slr sss ssk
 # plain ssh
 ssh() {
 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 "$@"
 }
 
 
 }
 
 
@@ -3118,8 +3191,9 @@ n() {
 }
 
 catnew() {
 }
 
 catnew() {
-  local dir file
+  local dir file _
   dir="$1"
   dir="$1"
+  # shellcheck disable=SC2030
   inotifywait -m "$dir" -e create -e moved_to | while read -r _ _ file; do
     hr
     cat "$dir/$file"
   inotifywait -m "$dir" -e create -e moved_to | while read -r _ _ file; do
     hr
     cat "$dir/$file"
@@ -3373,6 +3447,39 @@ if [[ $- == *i* ]]; then
 
 fi
 
 
 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"
+}
+
+dsh() {
+  command dsh -c "$@"
+}
+
 # * stuff that makes sense to be at the end
 
 
 # * stuff that makes sense to be at the end