+fixu() {
+ local stats
+ ls -lad /run/user/1000
+ stats=$(stat -c%a-%g-%u /run/user/1000)
+ if [[ $stats != 700-1000-1000 ]]; then
+ m s chmod 700 /run/user/1000; m s chown iank.iank /run/user/1000
+ fi
+}
+
+# systemctl is-enabled / status / cat says nothing, instead theres
+# some obscure symlink. paths copied from man systemd.unit.
+# possibly also usefull, but incomplete, doesnt show units not loaded in memory:
+# seru list-dependencies --reverse --all UNIT
+sysd-deps() {
+ local f
+ local -a dirs search
+ ngset
+
+ case $1 in
+ u)
+ search=(
+ ~/.config/systemd/user.control/*
+ $XDG_RUNTIME_DIR/systemd/user.control/*
+ $XDG_RUNTIME_DIR/systemd/transient/*
+ $XDG_RUNTIME_DIR/systemd/generator.early/*
+ ~/.config/systemd/user/*
+ /etc/systemd/user/*
+ $XDG_RUNTIME_DIR/systemd/user/*
+ /run/systemd/user/*
+ $XDG_RUNTIME_DIR/systemd/generator/*
+ ~/.local/share/systemd/user/*
+ /usr/lib/systemd/user/*
+ $XDG_RUNTIME_DIR/systemd/generator.late/*
+ )
+ ;;
+ *)
+ search=(
+ /etc/systemd/system.control/*
+ /run/systemd/system.control/*
+ /run/systemd/transient/*
+ /run/systemd/generator.early/*
+ /etc/systemd/system/*
+ /etc/systemd/systemd.attached/*
+ /run/systemd/system/*
+ /run/systemd/systemd.attached/*
+ /run/systemd/generator/*
+ /lib/systemd/system/*
+ /run/systemd/generator.late/*
+ )
+ ;;
+ esac
+ for f in "${search[@]}"; do
+ [[ -d $f ]] || continue
+ case $f in
+ *.requires|*.wants)
+ dirs+=("$f")
+ ;;
+ esac
+ done
+ # dirs is just so we write out the directory names, ls does it when there is 2 or more dirs.
+ case ${#dirs[@]} in
+ 1)
+ echo "${dirs[0]}:"
+ ll "${dirs[@]}"
+ ;;
+ 0) : ;;
+ *)
+ ll "${dirs[@]}"
+ ;;
+ esac
+ ngreset
+}
+
+fixvpndns() {
+ local link istls
+ read _ link _ istls < <(resolvectl dnsovertls tunfsf)
+ case $istls in
+ yes|no) : ;;
+ *) echo fixvpndns error: unexpected istls value: $istls >&2; return 1 ;;
+ esac
+ s busctl call org.freedesktop.resolve1 /org/freedesktop/resolve1 org.freedesktop.resolve1.Manager SetLinkDNSOverTLS is $link no
+}
+