local h=${1##*@}
local x
ssh-keygen -R $h -f $(readlink -f ~/.ssh/known_hosts)
- x=$(timeout 1 ssh -oBatchMode=yes -v $1 |& sed -rn "s/debug1: Connecting to $h \[([^\]*)].*/\1/p")
+ x=$(timeout 1 ssh -oBatchMode=yes -oControlMaster=no -oControlPath=/ -v $1 |& sed -rn "s/debug1: Connecting to $h \[([^\]*)].*/\1/p")
if [[ ! $x ]]; then
echo "khfix: ssh failed"
return 1
}
ccat () { # config cat. see a config without extra lines.
- grep '^\s*[^[:space:]#]' "$@"
+ grep '^\s*[^;[:space:]#]' "$@"
}
cdiff() {
done < "$file"
}
+# mail related
+etail() {
+ sudo tail -f /var/log/exim4/mainlog
+}
+
f() {
# cd forward
c +
# Create from existing manually installed apps by doing
# fdroidcl search -i, then manually removing
# automatically installed/preinstalled apps
+
+# firefox updater. commented out, firefox depends on nonfree opengl.
+# de.marmaro.krt.ffupdater
+# # causes replicant to die on install and go into a boot loop
+# me.ccrama.redditslide
+#
+# # my attempt at recovering from boot loop:
+# # in that case, boot to recovery (volume up, home button, power, let go of power after samsun logo)
+# # then
+# mount /dev/block/mmcblk0p12 /data
+# cd /data
+# find -iname '*appname*'
+# rm -rf FOUND_DIRS
+# usually good enough to just rm -rf /data/app/APPNAME
+#
+# currently broken:
+#at.bitfire.davdroid
fdroid_pkgs=(
- at.bitfire.davdroid
com.alaskalinuxuser.justnotes
com.artifex.mupdfdemo
com.fsck.k9
com.zoffcc.applications.zanavi
cz.martykan.forecastie
de.danoeh.antennapod
- de.marmaro.krt.ffupdater
im.vector.alpha # riot
info.papdt.blackblub
- me.ccrama.redditslide
me.tripsit.tripmobile
net.gaast.giggity
net.osmand.plus
command feh -FzZ "$@"
}
+# mail related
+frozen() {
+ rm -rf /tmp/frozen
+ s mailq |gr frozen|awk '{print $3}' | while read -r id; do
+ s exim -Mvl $id
+ echo
+ s exim -Mvh $id
+ echo
+ s exim -Mvb $id
+ echo -e '\n\n##############################\n'
+ done | tee -a /tmp/frozen
+}
+frozenrm() {
+ local ids=()
+ while read -r line; do
+ printf '%s\n' "$line"
+ ids+=($(printf '%s\n' "$line" |gr frozen|awk '{print $3}'))
+ done < <(s mailq)
+ echo "sleeping for 2 in case you change your mind"
+ sleep 2
+ s exim -Mrm "${ids[@]}"
+}
+
funce() {
# like -e for functions. returns on error.
# at the end of the function, disable with:
set -x
mv -T $src $dst || { set +x; return 1; }
ln -s -T $dst $src
+ /a/exe/lnf /p/.mu ~
+ mu index --maildir=/m/4e
set +x
}
mbdisable() {
s rsync -rlpchviog --relative "${opts[@]}" "$path" "root@$host:/";
}
+# only run on desktop. simpler to keep this on one system.
r2eadd() { # usage: name url
# initial setup of rss2email:
# r2e new r2e@iankelling.org
ssh $1 /tmp/${2##*/} "${@:2}"
}
+sss() { # ssh solo
+ ssh -oControlMaster=no -oControlPath=/ "$@"
+}
+
swap() {
local tmp
tmp=$(mktemp)
return $ret
}
+# mail related
testmail() {
declare -gi _seq; _seq+=1
echo "test body" | m mail -s "test mail from $HOSTNAME, $_seq" "${@:-root@localhost}"
# MSG_ID is in /var/log/exim4/mainlog, looks like 1ccdnD-0001nh-EN
}
-# to test sieve, use below command. make modifications, then copy to live file, use -eW to actually modify mailbox
+# to test sieve, use below command. for fsf mail, see fsf-get-mail script.
+# make modifications, then copy to live file, use -eW to actually modify mailbox
# cp /p/c/subdir_files/sieve/personal{test,}.sieve; testsievelist -eW INBOX
#
# Another option is to use sieve-test SCRIPT MAIL_FILE. note,
# sieve with output filter. arg is mailbox, like INBOX.
# This depends on dovecot conf, notably mail_location in /etc/dovecot/conf.d/10-mail.conf
-#
+
testsievelist() {
sieve-filter ~/sieve/maintest.sieve "$@" >/tmp/testsieve.log 2> >(tail) && sed -rn '/^Performed actions:/{n;n;p}' /tmp/testsieve.log | sort -u
}
+# mail related
# plain sieve
testsieve() {
sieve-filter ~/sieve/main.sieve "$@"
}
+# mail related
testexim() {
# testmail above calls sendmail, which is a link to exim/postfix.
# it's docs don't say a way of adding an argument
(sleep $(calc "$@ * 60") && mpv --no-config --volume 50 /a/bin/data/alarm.mp3) > /dev/null 2>&1 &
}
+trg() { transmission-remote-gtk&r; }
+trc() {
+ # example, set global upload limit to 100 kilobytes:
+ # trc -u 100
+ TR_AUTH=":$(jq -r .profiles[0].password ~/.config/transmission-remote-gtk/config.json)" transmission-remote transmission.lan -ne "$@"
+}
+
tu() {
local s;
}
-trg() { transmission-remote-gtk&r; }
-
-# transmission() {
-# local pid=$(cat /var/lib/transmission-daemon/transmission-daemon.pid)
-# if [[ $pid && -e /proc/$pid ]]; then
-# echo "noop. already running."
-# return
-# fi
-
-# local NAME=transmission-daemon
-# local DAEMON=/usr/bin/$NAME
-# local duser=debian-transmission
-
-# [ -e /etc/default/$NAME ] && . /etc/default/$NAME
-# s ip netns exec vpn sudo -u $duser ionice -c 3 nice -n 19 $DAEMON $OPTIONS
-# }
virshrm() {
for x in "$@"; do virsh destroy "$x"; virsh undefine "$x"; done
[[ $1 ]] || { echo need arg; return 1; }
journalctl --unit=openvpn-client@$1 -f -n0 &
s systemctl start openvpn-client@$1
+ # sometimes the ask-password agent does not work and needs a delay.
+ sleep .5
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779240
+ # noticed around 8-2017 after update from around stretch release
+ # on debian testing, even though the bug is much older.
+ s systemd-tty-ask-password-agent
}
vpnoff() {
wtr() { curl wttr.in/boston; }
xl() {
- # this succeeds even if gnome-screensaver isn't running.
+ # this succeeds even if gnome-screensaver isn\'t running.
gnome-screensaver-command --exit &>/dev/null
if ! pidof xscreensaver; then
+ pushd /
xscreensaver &
+ popd
# 1 was not long enough
sleep 3
fi