# * settings
-HISTFILE=$HOME/.bh
+if [[ $HISTFILE ]]; then
+ HISTFILE=$HOME/.bh
+fi
source /a/bin/distro-setup/path-add-function
path-add /a/exe
ccomp journalctl jtail jr jrf
-kff() { # keyboardio firmware flash
- pushd /a/bin/distro-setup/Arduino/Model01-Firmware
- yes $'\n' | make flash
+kff() { # keyboardio firmware flash. you must hold down the tilde key
+ pushd /a/opt/Model01-Firmware
+ # if we didn't want this yes hack, then remove "shell read" from
+ # /a/opt/Kaleidoscope/etc/makefiles/sketch.mk
+ yes $'\n' | VERBOSE=1 make flash
popd
}
}
+mns() { # mount namespace
+ ns=$1
+ shift
+ s mkdir -p /root/mount_namespaces
+ if ! sudo mountpoint /root/mount_namespaces >/dev/null; then
+ m sudo mount --bind /root/mount_namespaces /root/mount_namespaces
+ fi
+ m sudo mount --make-private /root/mount_namespaces
+ if [[ ! -e /root/mount_namespaces/$ns ]]; then
+ m sudo touch /root/mount_namespaces/$ns
+ fi
+ if ! sudo mountpoint /root/mount_namespaces/$ns >/dev/null; then
+ m sudo unshare --propagation slave --mount=/root/mount_namespaces/$ns /bin/true
+ fi
+ m sudo -E /usr/bin/nsenter --mount=/root/mount_namespaces/$ns "$@"
+}
+
+mnsr() { # mns run
+ local ns=$1
+ shift
+ mns $ns sudo -u iank -E env "PATH=$PATH" "$@"
+}
+
+mnsnonet() {
+ ns=$1
+ if ! s ip netns list | grep -Fx nonet &>/dev/null; then
+ s ip netns add nonet
+ fi
+ mns $ns --net=/var/run/netns/nonet sudo -E -u iank /bin/bash
+ lomh
+}
+
+
lom() {
local l base
if [[ $1 == /* ]]; then
base=${1##*/}
- if mountpoint -q /mnt/$base; then
+ if mns $base mountpoint -q /mnt/$base; then
return 0
fi
l=$(losetup -j $1 | sed -rn 's/^([^ ]+): .*/\1/p' | head -n1 ||:)
fi
fi
m sudo mkdir -p /mnt/$base
- m sudo mount /dev/mapper/$base /mnt/$base
- m sudo chown $USER:$USER /mnt/$base
+ m mns $base mount /dev/mapper/$base /mnt/$base
+ m mns $base chown $USER:$USER /mnt/$base
+ lomh
else
base=$1
- if mountpoint /mnt/$base &>/dev/null; then
- m sudo umount /mnt/$base
+ if mns $base mountpoint /mnt/$base &>/dev/null; then
+ m mns $base umount /mnt/$base
fi
if sudo cryptsetup status /dev/mapper/$base &>/dev/null; then
if ! m sudo cryptsetup luksClose /dev/mapper/$base; then
mpvd() {
mpv --profile=d "$@";
}
+# mpv all media files in . or $1
+mpvm() {
+ local -a extensions arg
+ # get page source of https://en.wikipedia.org/w/index.php?title=Video_file_format&action=edit
+ # into /a/x.log, then
+ # grep '^| *\.' /a/x.log | sed 's/| *//;s/,//g'
+ extensions=(
+ .webm
+ .mkv
+ .flv
+ .flv
+ .vob
+ .ogv .ogg
+ .drc
+ .gif
+ .gifv
+ .mng
+ .avi
+ .MTS .M2TS .TS
+ .mov .qt
+ .wmv
+ .yuv
+ .rm
+ .rmvb
+ .viv
+ .asf
+ .amv
+ .mp4 .m4p .m4v
+ .mpg .mp2 .mpeg .mpe .mpv
+ .mpg .mpeg .m2v
+ .m4v
+ .svi
+ .3gp
+ .3g2
+ .mxf
+ .roq
+ .nsv
+ )
+ arg=("(" -iname "*${extensions[0]}")
+ for (( i=1 ; i < ${#extensions[@]}; i++ )); do
+ arg+=(-o -iname "*${extensions[i]}")
+ done
+ arg+=(")")
+ dir=${1:-.}
+ # debug:
+ #find $dir "${arg[@]}" -size +1M
+ find $dir "${arg[@]}" -size +1M -exec mpv --profile=d '{}' +
+}
mpvs() {
mpv --profile=s "$@";
}
vpncmd() {
- m sudo -E env "PATH=$PATH" nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n -m "$@"
-}
-vpnf() {
- sudo -v
- vpncmd sudo -E -u iank env "PATH=$PATH" abrowser -no-remote -P vpn &
- sleep 5
- r
-}
-vpn2f() {
- sudo -v
- vpncmd sudo -u iank env "PATH=$PATH" abrowser -no-remote -P vpn2 & r
+ m sudo -E env "PATH=$PATH" nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n "$@"
}
vpni() {
unset SUDOD
elif [[ -d /a ]] && [[ $PWD == "$HOME" ]] && [[ $- == *i* ]]; then
cd /a
+ OLDPWD=
fi
# I have both because I was trying to solve an issue that
# turned out to be unrelated.
# ARDUINO_PATH=/a/opt/Arduino/build/linux/work
-export ARDUINO_PATH=/a/opt/arduino-1.8.15
+
+## i should have documented this...
+# based on https://github.com/keyboardio/Kaleidoscope
export KALEIDOSCOPE_DIR=/a/opt/Kaleidoscope
# They want to be added to the start, but i think