# so I've thrown a bunch of things at the wall to speed it up.
prompt-command() {
local return=$? # this MUST COME FIRST
+ local h
local jobs_char
PS1='\w'
# save history. if our filesystem went read-only or something, continue on
if history -a; then
if [[ $SSH_CLIENT && $NOT_MAIL_HOST_P == t ]]; then
- history 1 | sed -r 's/^([^ ]+ +){4}//' | nc -N localhost 36660 ||:
+ h="$(history 1)"
+ if [[ $h ]]; then
+ sed -r 's/^([^ ]+ +){4}//' <<<"$h" | nc -w 1 -N localhost 36660 ||:
+ fi
fi
fi
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.$ipsuf start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.$ipsuf start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
m pactl set-sink-mute @DEFAULT_SINK@ false
rm -f /tmp/ianknap
}
+unmute() { um "$@"; }
-nap() {
+mute() {
local sink card
sink=$(pactl get-default-sink)
card="${sink%.*}"
# noticably slows bash startup.
+### persistent pyenv setup. started 2026-02-28
+# git clone https://github.com/pyenv/pyenv.git /a/opt/pyenv
+# mypyenvinit
+# pyenv install 3.13
+# pyenv global 3.13
+# # from pipx install instructions
+# python3 -m pip install --user pipx
+# python3 -m pipx ensurepath
+# # from beets install instructions.
+# # in brackets are nondefault plugins
+# pipx install 'beets[lyrics,discogs,mbsync]'
+
mypyenvinit () {
if [[ $EUID == 0 || ! -e ~/.pyenv/bin ]]; then
fi
done
+ ln -sf /a/opt/pyenv ~/.pyenv
+
# disabled
# if [[ -d /var/lib/bitcoind && -d /p/c/user-specific/bitcoin ]]; then
# s rsync -clpgoDiSAX --chown=bitcoin:bitcoin /p/c/user-specific/bitcoin/settings.json /var/lib/bitcoind
-if [[ ! -d ~/.pyenv/.git ]]; then
- git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- . /b/ds/brc2
- mypyenvinit
- pyenv install 3.13
- pyenv global 3.13
- # from pipx install instructions
- python3 -m pip install --user pipx
- python3 -m pipx ensurepath
- # from beets install instructions.
- # in brackets are nondefault plugins
- pipx install 'beets[lyrics,discogs,mbsync]'
-fi
-
##### end beets #####
# when we run it, do:
#sudo -u postgres createuser -d iank
sudo usermod -a -G postgres iank
+ if ! out=$(psql -XAtq -Pfieldsep=' ' -vON_ERROR_STOP=on postgres <<<"select 1 from pg_user where usename = 'iank';" 2>/dev/null) || [[ $out != 1 ]]; then
+ sudo -u postgres createuser -d iank
+ fi
+ # initial db creation with:
+ # createdb -O iank db_name
fi
#####
4 20 * * 5 iank check-lets-encrypt-ssl-settings
4 21 * * 5 iank auto-commit-changes /a /p
4 23 * * 5 iank failmail eggdrop-upgrade
-12 22 * * 5 iank failmail /b/bash_unpublished/cron-misc
+12 22 * * * iank failmail /b/bash_unpublished/cron-misc
# avoid dnssec expirations. This is a hack, what we should
kd|frodo)
at_home=true
;;
- x2|x3|sy|so)
+ x2|x3|sy|so|sf)
laptop=true
if [[ $(timeout 1 dig +short @10.2.0.1 -x 10.2.0.2 2>&1 ||:) == kd.b8.nz. ]] \
&& ip n show 10.2.0.1 | grep . &>/dev/null; then
mexit 0
fi
case $HOSTNAME in
- kw|kd|frodo|x2|x3|sy|so) : ;;
+ kw|kd|frodo|x2|x3|sy|so|sf) : ;;
*)
die "error: no default targets for this host, use -t"
;;
fi
cmd_arg=resume
preserve_arg=-p
- add-wireless-target sy so
+ add-wireless-target sf so
fi
if [[ ! $cmd_arg ]]; then
if [[ ! -v targets && ! $source ]]; then
exit-if-no-default-targets
if $at_home; then
- if ! $kd_spread && [[ $HOSTNAME != x3 ]]; then
- add-x3-target
- fi
+ ## x3 needs reinstall
+ # if ! $kd_spread && [[ $HOSTNAME != x3 ]]; then
+ # add-x3-target
+ # fi
if [[ $HOSTNAME != frodo ]]; then
targets+=(frodo.b8.nz)
fi
targets+=(kd.b8.nz)
fi
wireless_home_hosts=(
- sy
+ sf
so
)
for h in ${wireless_home_hosts[@]}; do
sshfail=()
remote_str_cmd="mkdir -p /mnt/root/btrbk /mnt/o/btrbk && \
date +%z && \
-df --output=size,pcent / | tail -n1"
+df --output=size,pcent /mnt/root | tail -n1"
for h in ${targets[@]}; do
if $fast || $conf_only; then
fi
done
}
-# write piped lines to fstab, wiping out any existing lines that have
+# write piped lines to fstab, unless any existing lines have
# the same first 2 fields.
fstab() {
local mount_source mpoint line_end l
while read -r mount_source mpoint line_end; do
l="$mount_source $mpoint $line_end"
- # kill off any lines that duplicate the mount point.
- sed --follow-symlinks -ri "\%$l%b;\%^\s*\S+\s+$mpoint\s%d" /etc/fstab
+ if grep -rq "^[[:space:]]*$mount_source[[:space:]]+$mpoint[[:space:]]+" /etc/fstab; then continue; fi
tu /etc/fstab <<<"$l"
done
}
fi
}
-# Setup fstab for subvols we care about.
-# Input vars: none
-setup-fstab() {
- local root_dev o_dev crypt_dev mopts dev f fa
- root_dev=$(awk '$2 == "/mnt/root" {print $1}' /etc/mtab)
- mapper-dev root_dev
- o_dev=$(awk '$2 == "/mnt/o" {print $1}' /etc/mtab)
- mapper-dev o_dev
-
-
- # root2_dev=$(awk '$2 == "/mnt/root2" {print $1}' /etc/mtab)
- # mapper-dev root2_dev
- # # dont bother with the above for crypt2_dev
- # crypt2_dev=$root2_dev
-
-
- if cryptsetup status $root_dev &>/dev/null; then
- crypt_dev=$root_dev
- else # if we are in a recovery boot, find the next best crypt device
- mopts=,noauto
- # todo: I think I had an idea to not setup /o in this case,
- # but never finished implementing it
- for dev in $(dmsetup ls --target crypt | awk '{print $1}'); do
- dev=/dev/mapper/$dev
- if awk '{print $1}' /etc/mtab | grep -Fx $dev &>/dev/null; then
- crypt_dev=$dev
- break
- fi
- done
- fi
-
- # dont tax the cpus of old laptops
- if (( $(nproc) > 2)); then
- mopts+=,compress=zstd
- fi
- if grep -qF ,nodiscard,flushoncommit /etc/fstab; then
- mopts+=,nodiscard,flushoncommit
- fi
-
-
- fstab <<EOF
-$crypt_dev /a btrfs noatime,subvol=a$mopts 0 0
-EOF
-
- # ssh and probably some other things care about parent directory
- # ownership, and ssh doesn\'t allow any group writable parent
- # directories, so we are forced to use a directory structure similar
- # to home directories
- fa=(/mnt/root/btrbk/q.*); f=${fa[0]}
- if [[ -e $f ]]; then
- fstab <<EOF
-$crypt_dev /q btrfs noatime,subvol=q$mopts 0 0
-/q/p /p none bind$mopts 0 0
-EOF
- fi
-
- fa=(/mnt/root/btrbk/qr.*); f=${fa[0]}
- if [[ -e $f ]]; then
- fstab <<EOF
-$crypt_dev /qr btrfs noatime,subvol=qr$mopts 0 0
-EOF
- fi
-
- # not syncing ar at the moment
- # fa=(/mnt/root/btrbk/ar.*); f=${fa[0]}
- # if [[ -e $f ]]; then
- # fstab <<EOF
- # $crypt_dev /ar btrfs noatime,subvol=ar$mopts 0 0
- # EOF
- # fi
-
-
- fa=(/mnt/o/btrbk/o.*); f=${fa[0]}
- if [[ -e $f ]]; then
- if [[ $o_dev != "$root_dev" ]]; then
- # ,compress=zstd regardless of mopts since these are all text files
- # and it cuts disk use by about half.
- fstab <<EOF
-$o_dev /o btrfs noatime,subvol=o${mopts/,compress=zstd/},compress=zstd 0 0
-EOF
- fi
- fstab <<EOF
-/o/m /m none bind$mopts 0 0
-/o/debbugs /debbugs none bind$mopts 0 0
-EOF
- fi
-}
# Prune from ${all_vols[@]}: vols that have loopback mounts within their
# mountpoint and vols not in fstab.
fi
done
if $found_loop; then
+ # just check if its stale so we notice it.
+ m check-subvol-stale /$vol
continue
fi
##### end #####
declare -A root_dirs
-setup-fstab
prune-vols
w mount-mismatch-fix ||:
plan-umounts
while true; do
- read -r line ||:
+ read -r line || sleep 5
#echo "prof-notify debug line: $line"
# check that the profanity window is not focused
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.29 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.29 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
rate_limit no
volume /mnt/r5
subvolume d
-# moved
-#subvolume ar
-#subvolume roverflow
+subvolume r
[Unit]
-Description=Snapshot subvolumes that have a primary location in /mnt/rbackup
+Description=Snapshot subvolumes that have a primary location in /mnt/r5
After=multi-user.target
[Service]
Type=oneshot
-ExecStart=/usr/local/bin/sysd-mail-once btrbkrbackup btrbk -c /etc/btrbk/rbackup.conf run
+ExecStart=/usr/local/bin/sysd-mail-once btrbkr5 btrbk -c /etc/btrbk/r5.conf run
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.34 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.34 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.2 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.2 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.97 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.97 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.99 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.99 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.9 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.9 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.3 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.3 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.7 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.7 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.28 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.28 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
[Service]
Type=oneshot
-ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns -n 10.174.8 start %i
-ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns/newns stop %i
+ExecStart=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns -n 10.174.8 start %i
+ExecStop=/usr/bin/flock -w 20 /tmp/newns.flock /usr/local/bin/newns stop %i
RemainAfterExit=yes
[Install]
--- /dev/null
+[Desktop Entry]
+DefaultProfile=profileian.profile
+
+[Favorite Profiles]
+Favorites=profileian.profile
+
+[General]
+ConfigVersion=1
+
+[KonsoleWindow]
+ShowMenuBarByDefault=false
+
+[MainWindow]
+1920x1080 screen: Height=249
+1920x1080 screen: Width=1916
+1920x1080 screen: XPosition=2
+1920x1080 screen: YPosition=286
+1920x1200 screen: Height=1196
+1920x1200 screen: Width=956
+1920x1200 screen: XPosition=962
+1920x1200 screen: YPosition=2
+2 screens: Height=578
+2 screens: Width=1916
+2 screens: XPosition=2
+2 screens: YPosition=2
+DP-1 eDP-1=DP-1
+DP-1-1 eDP-1=DP-1-1
+DP-1-3 eDP-1=eDP-1
+HDMI-1 eDP-1=eDP-1
+HDMI-2 eDP-1=HDMI-2
+MenuBar=Disabled
+State=AAAA/wAAAAD9AAAAAQAAAAAAAAAAAAAAAPwCAAAAAvsAAAAiAFEAdQBpAGMAawBDAG8AbQBtAGEAbgBkAHMARABvAGMAawAAAAAA/////wAAAXYA////+wAAABwAUwBTAEgATQBhAG4AYQBnAGUAcgBEAG8AYwBrAAAAAAD/////AAABFgD///8AAAd6AAAIagAAAAQAAAAEAAAACAAAAAj8AAAAAQAAAAIAAAACAAAAFgBtAGEAaQBuAFQAbwBvAGwAQgBhAHIAAAAAAP////8AAAAAAAAAAAAAABwAcwBlAHMAcwBpAG8AbgBUAG8AbwBsAGIAYQByAAAAAIz/////AAAAAAAAAAA=
+ToolBarsMovable=Disabled
+eDP-1=eDP-1
+
+[TabBar]
+TabBarPosition=Top
+
+[ThumbnailsSettings]
+EnableThumbnails=false
+
+[UiSettings]
+ColorScheme=