X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=00a486219e79bfded2f5a0de6983d5aae09966e5;hb=802e885e3e7fa3857f8bc4f54c261d5ca76f2454;hp=1f3aeeaab6660836781125fad776d9a74e947f9a;hpb=7d9ec600a5ed9f88b85e02a27ee017b85721a6ac;p=distro-setup diff --git a/brc b/brc index 1f3aeea..00a4862 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 @@ -161,20 +167,31 @@ if [[ $- == *i* ]]; then 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 - if [[ $TERM == xterm* ]]; then + if [[ $TERM != xterm-kitty && $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 else # make ctrl-backspace work. for konsole, i fixed it through # /home/iank/.local/share/konsole/default.keytab - stty werase '^h' + stty werase ^h bind '"\eOc": shell-forward-word' bind '"\eOd": shell-backward-word' fi @@ -187,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 @@ -216,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 @@ -238,15 +265,23 @@ 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 ccomp() { # copy completion @@ -302,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 @@ -315,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 } @@ -355,6 +397,24 @@ b() { 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 @@ -574,8 +634,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 } @@ -693,6 +757,19 @@ faf() { # find all files. use -L to follow symlinks -o -name .undo-tree-history -prune \) -type f 2>/dev/null } +# todo: id like to do maybe a daily or hourly cronjob to +# check that my history file size is increasing. Ive had it +# inexplicably truncated in the past. +histrm() { + history -n + history | awk -v IGNORECASE=1 '{ a=$1; sub(/^( *[^ ]+){4} */, "") }; /'"$*"'/' + read -p "press anything but contrl-c to delete" + for entry in $(history | awk -v IGNORECASE=1 '{ a=$1; sub(/^( *[^ ]+){4} */, "") }; /'"$*"'/ { print a }' | tac); do + history -d $entry + done + history -w +} + # mail related frozen() { rm -rf /tmp/frozen @@ -1312,7 +1389,6 @@ safe_rename() { # warn and dont rename if file exists. } - sd() { sudo dd status=none of="$1" } @@ -1328,6 +1404,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() { @@ -1382,16 +1462,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 $? } @@ -1638,7 +1727,7 @@ ssk() { ccomp ssh sl slr sss ssk # plain ssh ssh() { - if [[ $TERM == alacritty ]]; then + if [[ $TERM == alacritty || $TERM == xterm-kitty ]]; then TERM=xterm-256color LC_USEBASHRC=t command ssh "$@" else LC_USEBASHRC=t command ssh "$@" @@ -1831,24 +1920,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)" @@ -1871,6 +1943,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 @@ -1912,10 +1994,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 @@ -1938,9 +2017,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