mostly fixes and improvements
[distro-setup] / brc
diff --git a/brc b/brc
index c47fca957f6c178a767369f9ca3e8caa9595155d..733a7c4482529204c9d067806c993d5e80954af1 100644 (file)
--- a/brc
+++ b/brc
@@ -141,6 +141,7 @@ if ! type -p stty >/dev/null; then
 fi
 
 
+use_color=false
 if [[ $- == *i* ]]; then
   # for readline-complete.el
   if [[ $LC_INSIDE_EMACS ]]; then
@@ -151,6 +152,11 @@ if [[ $- == *i* ]]; then
     bind '"\C-i": self-insert'
   else
 
+
+    if [[ $TERM != dumb ]] && test -t 1; then
+      use_color=true
+    fi
+
     if [[ $KONSOLE_PROFILE_NAME ]]; then
       TERM=xterm-256color
     fi
@@ -198,6 +204,15 @@ if [[ $- == *i* ]]; then
 
 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
@@ -322,8 +337,9 @@ fpst() { # file paste
 }
 
 _khfix_common() {
-  local host ip port
+  local host ip port file key
   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" ||: )
+  file=$(readlink -f ~/.ssh/known_hosts)
   if [[ ! $ip ]]; then
     echo "khfix: ssh failed"
     return 1
@@ -335,11 +351,17 @@ _khfix_common() {
     ip_entry=$ip
     host_entry=$host
   fi
+  tmpfile=$(mktemp)
   if [[ $host != $ip ]]; then
-    m ssh-keygen -R "$host_entry" -f $(readlink -f ~/.ssh/known_hosts)
-    ll ~/.ssh/known_hosts
+    key=$(ssh-keygen -F "$host_entry" -f $file | sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/')
+    if [[ $key ]]; then
+      grep -Fv "$key" "$file" | sponge "$file"
+    fi
+  fi
+  key=$(ssh-keygen -F "$ip_entry" -f $file | sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/')
+  if [[ $key ]]; then
+    grep -Fv "$key" "$file" | sponge "$file"
   fi
-  m ssh-keygen -R "$ip_entry" -f $(readlink -f ~/.ssh/known_hosts)
   ll ~/.ssh/known_hosts
   rootsshsync
 }
@@ -375,6 +397,34 @@ b() {
   c -
 }
 
+hexipv4() {
+  printf '%d.%d.%d.%d\n' $(echo $1 | sed 's/../0x& /g')
+}
+
+vp9() {
+  local f out outdir in
+  outdir=vp9
+  case $1 in
+    --out)
+      outdir=$2
+      shift 2
+      ;;
+  esac
+  m mkdir -p $outdir
+  for f; do
+    out=$PWD/$outdir/$f
+    in=$PWD/$f
+    m cd $(mktemp -d)
+    pwd
+    m ffmpeg -threads 0 -i $in -g 192 -vcodec libvpx-vp9 -vf scale=-1:720 -max_muxing_queue_size 9999  -b:v 750K -pass 1 -an -f null /dev/null
+    m ffmpeg -y -threads 0 -i $in -g 192 -vcodec libvpx-vp9 -vf scale=-1:720 -max_muxing_queue_size 9999 -b:v 750K -pass 2 -c:a libvorbis -qscale:a 5 $out
+    cd -
+  done
+}
+
+utcl() { # utc 24 hour time to local hour 24 hour time
+  echo "print( ($1  $(date +%z | sed -r 's/..$//;s/^(-?)0*/\1/')) % 24)"|python3
+}
 
 # c. better cd
 if type -p wcd &>/dev/null; then
@@ -434,7 +484,17 @@ chrbind() {
   for d in dev proc sys dev/pts; do
     [[ -d $d ]]
     if ! mountpoint $d &>/dev/null; then
-      s mount -o bind /$d $d
+      m s mount -o bind /$d $d
+    fi
+  done
+}
+chumount() {
+  local d
+  # dev/pts needed for pacman signature check
+  for d in dev proc sys dev/pts; do
+    [[ -d $d ]]
+    if mountpoint $d &>/dev/null; then
+      m s umount $d
     fi
   done
 }
@@ -1349,7 +1409,6 @@ safe_rename() { # warn and dont rename if file exists.
 }
 
 
-
 sd() {
   sudo dd status=none of="$1"
 }
@@ -1365,6 +1424,10 @@ ser() {
     s service $2 $1
   fi
 }
+serstat() {
+  systemctl -n 40 status "$@"
+}
+
 seru() { systemctl --user "$@"; }
 # like restart, but do nothing if its not already started
 srestart() {
@@ -1583,7 +1646,6 @@ sl() {
     return 1
   fi
 
-  now=$(date +%s)
   dorsync=false
   haveinfo=false
   tmpa=($SL_INFO_DIR/???????????"$remote")
@@ -1641,7 +1703,7 @@ sl() {
     RSYNC_RSH="ssh ${args[*]}" m rsync -rptL --delete $sl_rsync_args $SL_FILES_DIR "$remote":
   fi
   if $dorsync || ! $haveinfo; then
-    sshinfo=$SL_INFO_DIR/$now$type"$remote"
+    sshinfo=$SL_INFO_DIR/$EPOCHSECONDS$type"$remote"
     [[ -e $SL_INFO_DIR ]] || mkdir -p $SL_INFO_DIR
     printf "%s\n" "$extra_info" >$sshinfo
     chmod 666 $sshinfo
@@ -1877,25 +1939,7 @@ s/^\Wcapability: (.*)/\1/;Ta;h;b
 # * misc stuff
 
 
-# temporary variables to test colorization
-# some copied from gentoo /etc/bash/bashrc,
-use_color=false
-# dircolors --print-database uses its own built-in database
-# instead of using /etc/DIR_COLORS.  Try to use the external file
-# first to take advantage of user additions.
-safe_term=${TERM//[^[:alnum:]]/?}   # sanitize TERM
-match_lhs=""
-[[ -f ~/.dir_colors   ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
-[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
-[[ -z ${match_lhs}    ]] \
-  && type -P dircolors >/dev/null \
-  && match_lhs=$(dircolors --print-database)
-# test if our $TERM is in the TERM values in dircolor
-[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
-
-
-if ${use_color} && [[ $- == *i* ]]; then
-
+if $use_color && type -p tput &>/dev/null; then
   term_bold="$(tput bold)"
   term_red="$(tput setaf 1)"
   term_green="$(tput setaf 2)"
@@ -1907,7 +1951,6 @@ if ${use_color} && [[ $- == *i* ]]; then
   # term_underl="$(tput smul)"
   # term_blue="$(tput setaf 4)"
   # term_cyan="$(tput setaf 6)"
-
 fi
 # Try to keep environment pollution down, EPA loves us.
 unset safe_term match_lhs use_color
@@ -1917,6 +1960,16 @@ unset safe_term match_lhs use_color
 
 if [[ $- == *i* ]]; then
 
+
+  case $HOSTNAME in
+    bk|je|li)
+      if [[ $EUID == 1000 ]]; then
+        system-status _ ||:
+      fi
+      ;;
+  esac
+
+
   # this needs to come before next ps1 stuff
   # this stuff needs bash 4, feb 2009,
   # old enough to no longer condition on $BASH_VERSION anymore
@@ -1958,10 +2011,7 @@ if [[ $- == *i* ]]; then
       0) ps_color="$term_purple"
          ps_char='\$'
          ;;
-      1) ps_color="$term_green"
-         ps_char="$return \\$"
-         ;;
-      *) ps_color="$term_yellow"
+      *) ps_color="$term_green"
          ps_char="$return \\$"
          ;;
     esac
@@ -1977,19 +2027,19 @@ if [[ $- == *i* ]]; then
     if [[ -e /dev/shm/iank-status && ! -e /tmp/quiet-status ]]; then
       eval $(< /dev/shm/iank-status)
     fi
-    if [[ ! $SSH_CLIENT && $MAIL_HOST != "$HOSTNAME" ]]; then
+    if [[ $MAIL_HOST && $MAIL_HOST != "$HOSTNAME" ]]; then
       ps_char="@ $ps_char"
     fi
     # We could test if sudo is active with sudo -nv
     # but then we get an email and log of lots of failed sudo commands.
     # We could turn those off, but seems better not to.
     if [[ $EUID != 0 ]] && [[ $DID_SUDO ]]; then
-      ps_char="SUDO $ps_char"
+      psudo="\[$term_bold$term_red\]s\[$term_nocolor\] "
     fi
     if [[ ! $HISTFILE ]]; then
       ps_char="NOHIST $ps_char"
     fi
-    PS1="${PS1%"${PS1#*[wW]}"} \[$ps_color\]$ps_char\[$term_nocolor\] "
+    PS1="${PS1%"${PS1#*[wW]}"} $psudo\[$ps_color\]$ps_char\[$term_nocolor\] "
 
     # set titlebar. instead, using more advanced
     # titelbar below