lots of fixes, improvements, t12 stuff
[distro-setup] / brc2
diff --git a/brc2 b/brc2
index 8406dab33a401d26c380d39051b2a2c492b8e4a8..c857670bc64f937d381c42e6123a79ba8f480bcf 100644 (file)
--- a/brc2
+++ b/brc2
@@ -29,9 +29,29 @@ if [[ $LESSHISTFILE == - ]]; then
   HISTFILE=
   c() { cd "$@"; }
 elif [[ $HISTFILE ]]; then
-  HISTFILE=$HOME/.bh
+  # use an alternate history file when we are streaming.
+  if [[ -e $HOME/.iank-stream-on ]]; then
+    HISTFILE=/a/bin/data/stream_hist
+  else
+    HISTFILE=$HOME/.bh
+  fi
 fi
 
+# history personal
+hip() {
+  history -c
+  HISTFILE=$HOME/.bh
+  history -r
+}
+
+# history for streaming
+his() {
+  history -c
+  HISTFILE=/a/bin/data/stream_hist
+  history -r
+}
+
+
 source /a/bin/distro-setup/path-add-function
 path-add /a/exe
 # add this with absolute paths as needed for better security
@@ -329,10 +349,16 @@ tback() {
 # s sshfs bu@$host:/bu/home/md /bu/mnt -o reconnect,ServerAliveInterval=20,ServerAliveCountMax=30 -o allow_other
 
 edelayoff() {
-  echo all >/etc/exim4/no-delay-eximids
+  echo all >/var/spool/exim4/gw/.no-delay-eximids
+  if [[ $EUID == 0 ]]; then
+    chown iank:iank /var/spool/exim4/gw/.no-delay-eximids
+  fi
 }
 edelayon() {
-  echo >/etc/exim4/no-delay-eximids
+  echo >/var/spool/exim4/gw/.no-delay-eximids
+  if [[ $EUID == 0 ]]; then
+    chown iank:iank /var/spool/exim4/gw/.no-delay-eximids
+  fi
 }
 
 eqgo() {
@@ -1749,7 +1775,13 @@ lipush() {
   local p a
   # excluding emacs for now
   #p=(/a/opt/{emacs-debian11{,-nox},mu,emacs} /a/bin /a/exe /a/h /a/c /p/c/machine_specific/vps{,.hosts})
-  p=(/a/bin /a/exe /a/h /a/c /p/c/machine_specific/vps{,.hosts} /c/roles/prom_export/files/simple/usr/local/bin/fsf-install-node-exporter /a/opt/fpaste)
+  p=(
+    /a/bin /a/exe /a/h /a/c /p/c/machine_specific/vps{,.hosts}
+    /c/roles/prom_export/files/simple/usr/local/bin/fsf-install-node-exporter
+    /a/opt/fpaste
+    /p/c/user-specific/www-data/icecast-fsf{,-tech}-htpasswd
+    /p/c/icecast.xml
+  )
   a="-ahviSAXPH --specials --devices --delete --relative --exclude-from=/p/c/li-rsync-excludes"
   ret=0
   for h in li je bk; do
@@ -1780,7 +1812,7 @@ bindpush() {
   dsign iankelling.org expertpathologyreview.com zroe.org amnimal.ninja
   lipush
   for h in li bk; do
-    m ssh $h.b8.nz dnsup
+    m ssh iank@$h.b8.nz dnsup
   done
 }
 bindpushb8() {
@@ -1904,68 +1936,12 @@ satoshi() { # $1 satoshi in usd
 # 2023). However, in 2024-02, I ran a backup where a receiving machine
 # had the wallet enabled and there was no error, so I don't know if this
 # is still an issue or likely it is an inconsistent behavior.
+# Note: a pruned node won't allow for a wallet to be added, super lame
+# so i'm just not running a bitcoin node for now.
+# Error: Prune: last wallet synchronisation goes beyond pruned data. You
+# need to -reindex (download the whole blockchain again in case of
+# pruned node)
 #
-# As a workaround, this function is for enabling the wallet when I want
-# to use it and leave it disabled otherwise.
-walleton() {
-  local active
-  active=false
-  no_on=true
-  if [[ ! $(readlink -f /var/lib/bitcoind/wallets) == /q/wallets ]]; then
-    if systemctl --quiet is-active bitcoind; then
-      if [[ -e /tmp/no-bitcoinon ]]; then
-        no_on=true
-      else
-        if [[ $EUID == 0 ]]; then
-          m install -T -o iank -g iank /dev/null /tmp/no-bitcoinon
-        else
-          m touch /tmp/no-bitcoinon
-        fi
-      fi
-      active=true
-      m ser stop bitcoind
-    fi
-    m s ln -s /q/wallets /var/lib/bitcoind
-    sudo chown -h bitcoin:bitcoin /var/lib/bitcoind/wallets
-    if $active; then
-      m ser start bitcoind
-      if ! $no_on; then
-        m rm /tmp/no-bitcoinon
-      fi
-    fi
-  fi
-}
-walletoff() {
-  local active
-  active=false
-  no_on=true
-  if [[ $(readlink -f /var/lib/bitcoind/wallets) == /q/wallets ]]; then
-    if systemctl --quiet is-active bitcoind; then
-      if [[ -e /tmp/no-bitcoinon ]]; then
-        no_on=true
-      else
-        if [[ $EUID == 0 ]]; then
-          m install -T -o iank -g iank /dev/null /tmp/no-bitcoinon
-        else
-          m touch /tmp/no-bitcoinon
-        fi
-      fi
-      active=true
-      m ser stop bitcoind
-    else
-      echo note: bitcoind not active
-    fi
-    m rm /var/lib/bitcoind/wallets
-    if $active; then
-      # note, starting bitcoin always fails, but it actually
-      # succeeds. But this is strangely not consistent.
-      m ser start bitcoind
-      if ! $no_on; then
-        m rm /tmp/no-bitcoinon
-      fi
-    fi
-  fi
-}
 #### end bitcoin related things
 
 
@@ -2156,7 +2132,7 @@ fastboot() {
 
 kdecd() { /usr/lib/x86_64-linux-gnu/libexec/kdeconnectd; }
 
-bat() {
+batp() {
   cat /sys/class/power_supply/BAT0/capacity
 }
 
@@ -2701,6 +2677,7 @@ host-info-update() {
       # hosts is that it is for the User part, the IdentityFile part is
       # redundant to *.b8.nz. Also note ${host}i, we only setup those for vpn hosts, but there is no harm in overspecifying here.
       root_hosts+=($host ${host}i $host.b8.nz ${host}i.b8.nz)
+      # shellcheck disable=SC2004 # false positive
       root_hosts_a[$host]=t  # a for associative array
     else
       nonroot_hosts+=($host ${host}i)
@@ -2841,12 +2818,17 @@ EOF
 
 
   b8_ip=$(dig +short b8.nz @iankelling.org | tail -1)
+  # if our dynamic ip updates broke, set manually, eg:
+  #b8_ip=72.74.193.xxx
   if [[ ! $b8_ip ]]; then
     echo "$0: error: got empty b8.nz ip. returning 1"
     return 1
   fi
   {
-    echo "@    A       $b8_ip"
+    cat <<EOF
+@      A       $b8_ip
+i      A       $b8_ip
+EOF
     for host in ${!nonvpn_ips[@]}; do
       ipsuf=${nonvpn_ips[$host]}
       echo "$host      A       10.2.0.$ipsuf"
@@ -2858,7 +2840,7 @@ $host     A       10.2.0.$ipsuf
 ${host}wg      A       10.8.0.$ipsuf
 ${host}vp      A       10.5.5.$ipsuf
 ${host}tr      A       10.174.$ipsuf.2
-${host}i       A       $b8_ip
+${host}i       CNAME   i.b8.nz.
 EOF
     done
   } | cedit -e vpn-ips-update /p/c/machine_specific/vps/bind-initial/db.b8.nz
@@ -2942,18 +2924,19 @@ EOF
       unset "portfw_ips[$i]"
     fi
 
-    ip=$(getent ahostsv4 "$i$suf_from_here" | awk '{ print $1 }' | head -n1) ||:
+    # note this might be outdated until we do a dns push
+    ip=$(dig +short "$i$suf_from_here" @iankelling.org | tail -n1) ||:
     if [[ ! $ip ]]; then
       if [[ $suf == .office.fsf.org ]]; then
         suf_from_here=wg.b8.nz
         ip=$(getent ahostsv4 "$i$suf_from_here" | awk '{ print $1 }' | head -n1) ||:
       fi
-      if [[ ! $ip ]]; then
-        echo error: failed to get ip of "$i$suf_from_here"
-        return 1
-      fi
     fi
-    ip_to_hosts[$ip]+=" $i"
+    if [[ $ip ]]; then
+      ip_to_hosts[$ip]+=" $i"
+    else
+      echo error: failed to get ip of "$i$suf_from_here"
+    fi
   done
 
   for ip in "${!ip_to_hosts[@]}"; do
@@ -3754,10 +3737,21 @@ EOFOUTER
   chmod +x $out
 }
 
-smeld() { # ssh meld usage host1 host2 file
+# ssh meld. usage: host1 host2 file
+smeld() {
   meld <(ssh $1 cat $3) <(ssh $2 cat $3)
 }
 
+# remote file meld
+# usage: host file1 file2
+rmeld() {
+  local tmpdir
+  tmpdir=$(mktemp -d)
+  scp "$1:$2" "$1:$3" $tmpdir
+  meld "$tmpdir/${2##*/}" "$tmpdir/${3##*/}"
+}
+
+
 spd() {
   PATH=/usr/local/spdhackfix:$PATH command spd "$@"
 }
@@ -4130,10 +4124,17 @@ nmtc() {
   s nmtui-connect "$@"
 }
 
+# check exim and others network namespace
 mailnncheck() {
-  local unit pid ns mailnn
+  local unit pid ns mailnn spamd_ser
+
+  spamd_ser=spamd
+  if systemctl cat spamassassin &>/dev/null; then
+    spamd_ser=spamassassin
+  fi
+
   # mailvpn would belong on the list if using openvpn
-  for unit in mailnn unbound dovecot spamassassin exim4 radicale; do
+  for unit in mailnn unbound dovecot $spamd_ser exim4 radicale; do
     pid=$(servicepid $unit)
     echo debug: unit=$unit pid=$pid
     if [[ ! $pid ]]; then
@@ -4366,11 +4367,24 @@ vrun() {
 }
 
 electrum() {
+  # Running the appimage said fuse was not available, but try
+  # running the appimage with --appimage-extract, which worked.
+  # It seems there is no need to backup the wallet, it can be restored
+  # via the seed onto any computer that needs it.
+  /a/opt/electrum/squashfs-root/AppRun "$@"
+
+
+  # This was an old way I ran electrum over tor, and seems like I
+  # imported a bitcoin core wallet.
+  #
   # https://electrum.readthedocs.io/en/latest/tor.html
   # https://github.com/spesmilo/electrum-docs/issues/129
-  s rsync -ptog --chown bitcoin:bitcoin ~/.Xauthority /var/lib/bitcoind/.Xauthority
-  sudo -u bitcoin DISPLAY=$DISPLAY XAUTHORITY=/var/lib/bitcoind/.Xauthority /a/opt/electrum-4.2.1-x86_64.AppImage -p socks5:localhost:9050
+  # s rsync -ptog --chown bitcoin:bitcoin ~/.Xauthority /var/lib/bitcoind/.Xauthority
+  # sudo -u bitcoin DISPLAY=$DISPLAY XAUTHORITY=/var/lib/bitcoind/.Xauthority /a/opt/electrum-4.2.1-x86_64.AppImage -p socks5:localhost:9050
+
 }
+
+
 monero() {
   sudo -u bitcoin DISPLAY=$DISPLAY XAUTHORITY=/var/lib/bitcoind/.Xauthority /a/opt/monero-gui-v0.17.3.2/monero-wallet-gui
 }
@@ -4387,14 +4401,24 @@ rgm() {
   rg "$@" /p/w.org /a/t.org /a/work.org /b
 }
 
-# re all my files more expansively
+# re all my files more expansively.
+# usage [-OPT...] regex space combined
 rem() {
   local paths
+  local -a opts
+  for arg; do
+    if [[ $arg == -* ]]; then
+      opts+=("$1")
+      shift
+    else
+      break
+    fi
+  done
   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 $local_rgv_args -g "!bash_unpublished" -- "$*" $paths /a/work.org ||:
+  rgv $local_rgv_args -g "!bash_unpublished" "${opts[@]}" -- "$*" $paths /a/work.org ||:
 }
 reml() { # rem with limit to 5 matches per file
   local_rgv_args="-m 5"
@@ -4795,6 +4819,50 @@ zmqsend() {
 
 ffg() { /nocow/t/ffmpeg-release/ffmpeg-7.0.1/tools/graph2dot -o /tmp/g.tmp && dot -Tpng /tmp/g.tmp -o /tmp/g.png && feh /tmp/g.png; }
 
+firefox-hide-tabs() {
+
+  # without this, make tabs smaller by setting browser.uidensity 1 in about:config
+
+  profiledir=$1
+  [[ $1 ]] || return 1
+  # Related: the sidebery extension is useful.
+
+  # This is from
+  # https://raw.githubusercontent.com/MrOtherGuy/firefox-csshacks/master/chrome/hide_tabs_toolbar.css
+
+  ainsl $profiledir/chrome/userChrome.css '#TabsToolbar{ visibility: collapse !important }'
+
+}
+
+# kill lease on cmc
+klease() {
+  local tmpdir ret out
+  ret=0
+  out=$(ssh cmc dnsmasq-end-lease "$1" 2>&1) || ret=1
+  printf "%s\n" "$out"
+  if [[ $out == *"try diffing"* ]]; then
+    tmpdir=$(mktemp -d)
+    m scp cmc:/tmp/dhcp.leases cmc:/tmp/dhcp.leases.iank $tmpdir
+    m diff $tmpdir/dhcp.leases $tmpdir/dhcp.leases.iank ||:
+    rm -rf $tmpdir
+  fi
+  return $ret
+}
+
+# ffs and switch the bash history on this terminal.
+ffs() {
+  local last
+  last="${*: -1}"
+  if [[ $last && $last != -* && $last != sysops ]]; then
+    his
+  fi
+  command ffs "$@"
+}
+
+i3gen() {
+  /b/ds/i3-sway/gen
+}
+
 export BASEFILE_DIR=/a/bin/fai-basefiles
 
 #export ANDROID_HOME=/a/opt/android-home