X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=00f217210737514dc4f401738997cf6c1992d572;hb=7e673f2615101982a17ffa0e23cb10b5b3803f07;hp=cc38787465bce6876e795a878c7642046d4f9039;hpb=12cab163424e3a7b0815646d1d4407f9b5839bcb;p=distro-setup diff --git a/brc b/brc index cc38787..00f2172 100644 --- 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 @@ -227,6 +242,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 +265,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 +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 @@ -326,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 } @@ -585,8 +616,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 +1441,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 $? } @@ -1855,24 +1899,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}$(/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; then term_bold="$(tput bold)" term_red="$(tput setaf 1)" @@ -1936,10 +1963,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 @@ -1962,9 +1986,12 @@ if [[ $- == *i* ]]; then # 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