bash: bunch of improvements
[distro-setup] / brc2
diff --git a/brc2 b/brc2
index 0211a643258562b3dbd5f52284826a0a5c676cb1..b6a4bd320e9b79b2be4c09dfb8e1877ae478070c 100644 (file)
--- a/brc2
+++ b/brc2
@@ -393,15 +393,15 @@ astudio() {
 # Convert brains file path to url and vice versa
 # usage: brains [URL_OR_PATH]
 brains() {
-  _iki-convert /f/brains brains.fsf.org "$@"
+  _iki-convert '(/a)?/f/brains' brains.fsf.org "$@"
 }
 glue() {
-  _iki-convert /f/gluestick gluestick.office.fsf.org "$@"
+  _iki-convert '(/a)?/f/gluestick' gluestick.office.fsf.org "$@"
 }
 
 # usage: $0 REPO_PATH [URL_OR_PATH]
 _iki-convert() {
-  local url path input err repo_dir domain filename dir path
+  local url path input err repo_dir domain filename dir path url_dir
   local initial_oldpwd initial_pwd
   repo_dir="$1"
   domain="$2"
@@ -425,7 +425,8 @@ _iki-convert() {
       ;;
     *)
       path=$(fp "$input")
-      url="http*://$domain/wiki/${path#$repo_dir/}"
+      url_dir=$(echo "$path" | sed -r "s,^$repo_dir/,,")
+      url="https://$domain/wiki/$url_dir"
       url="${url%.mdwn}/"
       j echo "$url"
       ;;
@@ -554,6 +555,15 @@ EOF
 # beet playlist. use beetag with a playlist name
 bpl() {
   local playlist playlist_regex
+  case $1 in
+    -h|--help)
+      for playlist in "${!bpla[@]}"; do
+        printf "%s\n" "$playlist"
+      done
+      return 0
+      ;;
+  esac
+
   playlist="${*: -1}"
   playlist_regex='[a-z0-9_]'
   if [[ ! $playlist =~ $playlist_regex ]]; then
@@ -772,6 +782,10 @@ beetag() {
   # shellcheck disable=SC2016 # obvious reason
   tmpstr=$(beet ls -f "$fmt" "$@" | { if $random; then sort -R --random-source=$pl_seed_path; else cat; fi; } )
   mapfile -t initial_ls <<<"$tmpstr"
+  if [[ ! ${initial_ls[0]} ]]; then
+    echo "beetag: error: no result from beet ls $*"
+    return 1
+  fi
   id_count=${#initial_ls[@]}
   for line in "${initial_ls[@]}"; do
     path="${line#*PijokVipiotOzeph }"
@@ -2067,7 +2081,7 @@ rename-test() {
 
 feh() {
   # F = fullscren, z = random, Z = auto zoom
-  command feh -FzZ "$@"
+  command feh --auto-rotate -FzZ "$@"
 }
 
 
@@ -2180,7 +2194,7 @@ arb5() {
   arbtt-dump -l 30 -t json | jq -r '.[] | [ ( .inactive  / 1000 | floor ) , ( .windows[] | select (.active == true) |.title) ] | @tsv' \
     | tac | while read -r sec l; do
     if (( i % 6 == 0 && i >= 2 )); then
-      echo == $(( i / 6 + 1 )) ==
+      echo "## $(( i / 6 + 1 )) ##"
     fi
     if (( sec > 10 )); then
       printf "%3d %s\n" $sec "$l"
@@ -2201,19 +2215,22 @@ idea() {
 }
 
 ilogs-local() {
-  cd /var/lib/znc/moddata/log/iank/freenode/
-  hr
-  for x in "#$1/"*; do
-    base=${x##*/}
-    files=()
-    for f in $@; do
-      tmp=\#$f/$base
-      if [[ -e $tmp ]]; then
-        files+=(\#$f/$base)
-      fi
-    done
-    sed \"s/^./${base%log}/\" ${files[@]}|sort -n
+  d=/var/lib/znc/moddata/log/iank/
+  for n in freenode libera; do
+    cd $d/$n
     hr
+    for x in "#$1/"*; do
+      base=${x##*/}
+      files=()
+      for f in $@; do
+        tmp=\#$f/$base
+        if [[ -e $tmp ]]; then
+          files+=(\#$f/$base)
+        fi
+      done
+      sed \"s/^./${base%log}/\" ${files[@]}|sort -n
+      hr
+    done
   done
 }
 ilogs() {
@@ -2226,7 +2243,11 @@ ilog-local() {
   chan="$1"
   d=/var/lib/znc/moddata/log/iank/
   for n in freenode libera; do
-    cd $d$n/"$chan" && hr
+    if [[ ! -d $d$n/"$chan" ]]; then
+      continue
+    fi
+    cd $d$n/"$chan"
+    hr
     for x in *; do
       echo $x; sed "s/^./${x%log}/" $x; hr;
     done
@@ -3475,6 +3496,60 @@ rgm() {
   rg "$@" /p/w.org /a/t.org /a/work.org /b
 }
 
+# re all my files more expansively
+rem() {
+  local paths
+  paths="/p/c /b"
+  find $paths -not \( -name .svn -prune -o -name .git -prune \
+       -o -name .hg -prune -o -name .editor-backups -prune \
+       -o -name .undo-tree-history -prune \) 2>/dev/null | grep -iP --color=auto "$*"
+  rgv -m 5 "$*" $paths ||:
+  }
+
+# setup:
+# pip3 install linode-cli
+# linode-cli
+livp9() {
+  local input ip id tmp
+  input=$1
+  if [[ $2 ]]; then
+    id=$2
+    ip=$3
+  else
+    tmp=$(mktemp)
+    echo $tmp
+    linode-cli --json --pretty linodes create --root_pass loxHuceygomGisun | tee $tmp
+    read -r ip id <<<"$(tail -n+2 $tmp | jq -r '.[0].ipv4[0] , .[0].id')"
+    for string in $ip $id; do
+      case $string in
+        [0-9]*) : ;;
+        *)
+          echo "livp9: bad value ip=$ip id=$id input=$input"
+          return 1
+          ;;
+      esac
+    done
+    rm $tmp
+
+    while true; do
+      if timeout 4 ssh $ip :; then
+        break
+      fi
+      sleep 3
+    done
+  fi
+  ssh $ip <<EOF
+apt-get -qq update
+apt-get -qq -y install ffmpeg rsync
+mkdir vp9
+EOF
+  m rsync $input $ip:
+  m ssh $ip ffmpeg -nostdin -hide_banner -loglevel error -i $input -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 ssh $ip ffmpeg -nostdin -hide_banner -loglevel error -y -i $input -g 192 -vcodec libvpx-vp9 -tile-rows 2 -vf scale=-1:720 -max_muxing_queue_size 9999 -b:v 750K -pass 2 -c:a libvorbis -qscale:a 5 vp9/$input
+  rsync $ip:vp9/$input vp9
+  linode-cli linodes delete $id
+}
+
 reset-konsole() {
   # we also have a file in /a/c/...konsole...
   local f=$HOME/.config/konsolerc
@@ -3583,7 +3658,7 @@ path-add --end $HOME/.cargo/bin
 if type -P rg &>/dev/null; then
   # --no-messages because of annoying errors on broken symlinks
   # -z = search .gz etc files
-  # -. = search dotfilesq
+  # -. = search dotfiles
   rg() { command rg -. -z --no-messages -L -i -M 900 --no-ignore-parent --no-ignore-vcs -g '!.git' -g '!auto-save-list' -g '!.savehist' "$@" || return $?; }
   #fails if not exist. ignore
   complete -r rg 2>/dev/null ||:
@@ -3591,6 +3666,12 @@ else
   alias rg=grr
 fi
 
+# rg with respecting vcs ignore files
+rgv() {
+  ret=0
+  command rg -. -z --no-messages -L -i -M 900 -g '!auto-save-list' -g '!.savehist' "$@" || ret=$?
+  return $ret
+}
 
 
 # taken from default changes to bashrc and bash_profile