various improvements
[distro-setup] / brc
diff --git a/brc b/brc
index cc38787465bce6876e795a878c7642046d4f9039..a51d7db6c7b6dcf8788106758c1dc8890caf64b1 100644 (file)
--- a/brc
+++ b/brc
@@ -227,6 +227,7 @@ if [[ -s $bashrc_dir/path-add-function ]]; then
     if grep -qF /home/iank/.iank/e/e /etc/auto.iank /etc/exports &>/dev/null; then
       export EMACSDIR=/home/iank/.iank/e/e
     fi
+    path-add $bashrc_dir
   fi
 fi
 
@@ -249,14 +250,22 @@ if [[ -s /usr/share/wcd/wcd-include.sh ]]; then
   source /usr/share/wcd/wcd-include.sh
 fi
 
-if [[ -s /a/bin/small-misc-bash/ll-function ]]; then
-  source /a/bin/small-misc-bash/ll-function
-elif [[ -s $bashrc_dir/ll-function ]]; then
-  # shellcheck source=/a/bin/small-misc-bash/ll-function
-  source $bashrc_dir/ll-function
-fi
+
+mysrc() {
+  local path dir file
+  path=$1
+  dir=${path%/*}
+  file=${path##*/}
+  if [[ -s $path ]]; then
+    source $path
+  elif [[ -s $bashrc_dir/$file ]]; then
+    source $bashrc_dir/$file
+  fi
+}
 
 
+mysrc /a/bin/small-misc-bash/ll-function
+mysrc /a/bin/distro-functions/src/package-manager-abstractions
 
 
 # * functions
@@ -313,8 +322,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
@@ -326,11 +336,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
 }
@@ -585,8 +601,12 @@ ev() {
     echo no args
   fi
   for arg; do
-    printf "%qEOL\n" "${!arg}"
-    printf "%s" "${!arg}" |& hexdump -C
+    if [[ -v $arg ]]; then
+      printf "%qEOL\n" "${!arg}"
+      printf "%s" "${!arg}" |& hexdump -C
+    else
+      echo arg $arg is unset
+    fi
   done
 }
 
@@ -1406,16 +1426,25 @@ sgu() {
 
 
 sk() {
-  # 2029: "unescaped, this expands on the client side." yes, I know how ssh works
-  # 2164: "Use 'cd ... || exit' or 'cd ... || return' in case cd fails." i have automatic error handling
-  # 2086: unquoted $var
+
+
+  # note, if you do something like this
+  # x=( prefix* )
+  # then disable the warning with:
+  # shellcheck disable=SC2206 # globbing is intended
+
+  # 2029: "unescaped, this expands on the client side.": yes, I know how ssh works
+  # 2164: "Use 'cd ... || exit' or 'cd ... || return' in case cd fails.": i have automatic error handling
+  # 2086: unquoted $var: Quoting every var I set is way too much quotes.
+  # 2068: Double quote array expansions to avoid re-splitting elements: same as above.
+  # 2033: command arg is a function name: too many false positives.
+
+
+  # these ones I had disabled, but without a good written explanation, so enabling them temporarily
   # 2046: unquoted $(cmd)
-  # 2068: Double quote array expansions to avoid re-splitting elements.
   # 2119: Functions with optional args get bad warnings when none are passed.
-  # 2033: too many false positives for thing that will never work, passing shell function to find.
-  # i had -x as an arg, but debian testing(stretch) doesn\'t support it
-  shellcheck -x -e 2029,2164,2086,2046,2068,2119,2033 "$@" || return $?
-  # had this before. not sure what it is 2119
+
+  shellcheck -W 999 -x -e 2029,2164,2086,2068,2033 "$@" || return $?
 }
 
 
@@ -1964,6 +1993,9 @@ if [[ $- == *i* ]]; then
     if [[ $EUID != 0 ]] && [[ $DID_SUDO ]]; then
       ps_char="SUDO $ps_char"
     fi
+    if [[ ! $HISTFILE ]]; then
+      ps_char="NOHIST $ps_char"
+    fi
     PS1="${PS1%"${PS1#*[wW]}"} \[$ps_color\]$ps_char\[$term_nocolor\] "
 
     # set titlebar. instead, using more advanced