fi
+use_color=false
if [[ $- == *i* ]]; then
# for readline-complete.el
if [[ $LC_INSIDE_EMACS ]]; 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
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
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
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
ccomp() { # copy completion
}
_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
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
}
c -
}
+vp9() {
+ in=$PWD/$1
+
+ if [[ $2 ]]; then
+ out=$PWD/$2
+ else
+ out=$PWD/vp9/$1
+ fi
+ cd $(mktemp -d)
+ pwd
+ 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 && \
+ 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 -
+}
+
+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
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
}
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 $?
}
# * 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; then
term_bold="$(tput bold)"
term_red="$(tput setaf 1)"
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
# 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