there have been some issues with tmpdir that were uncovered thanks to
using proot in termux. this better supports home dir changes, paths that
already exist, and an incorrect var name used in proot, for tmpdir
generation. it also fixes .local permissions, to support accessing it
during zsu (which still isn't implemented lol!)
## xdg local dir
# NOTE: need this for tmp, so confirm it exists.
## xdg local dir
# NOTE: need this for tmp, so confirm it exists.
-# XXX: perms are not specified for XDG dirs except runtime, but I think 760
-# makes the most sense. shouldn't break anything since no one else should
-# be poking around in our dir.
-[[ -e ~/.local ]] || mkdir -m760 ~/.local
+# XXX: perms are not specified for XDG dirs except runtime. 760 makes the most
+# sense, but we need to be a bit more permissive for zsu.
+[[ -e ~/.local ]] && chmod 755 ~/.local || mkdir -pm766 ~/.local
## tmp
# NOTE: specs say that POSIX tmp and XDG runtime directories should exist
## tmp
# NOTE: specs say that POSIX tmp and XDG runtime directories should exist
if [[ ! -v _sev_tmp ]] {
_sev_tmp=~/.local/tmp
# create personal TMPDIR under system tmp
if [[ ! -v _sev_tmp ]] {
_sev_tmp=~/.local/tmp
# create personal TMPDIR under system tmp
- # NOTE: under proot with uid remapping, we can reuse old tmp, without
- # worrying about permission issues; intended for proot under termux.
- # XXX: _sev_proot_old_user only works if /tmp is shared!
- t=${TMPDIR:-${TEMPDIR:-${TEMP:-${TMP:-${${TMPPREFIX%/zsh}:-/tmp}}}}}/.home-${_sev_proot_old_username:-$LOGNAME}
+ # NOTE: under proot with uid remapping and shared /tmp, we can reuse old
+ # dir, without worrying about permission issues; intended for termux.
+ t=${TMPDIR:-${TEMPDIR:-${TEMP:-${TMP:-${${TMPPREFIX%/zsh}:-/tmp}}}}}/.home-${_sev_proot_real_user:-$LOGNAME}
[[ -e $t ]] || mkdir -m700 $t 2>/dev/null
if [[ ! -d $t ]] {
# fallback TMPDIR to bare local directory or existing softlink
[[ -e $t ]] || mkdir -m700 $t 2>/dev/null
if [[ ! -d $t ]] {
# fallback TMPDIR to bare local directory or existing softlink
print -P "%F{orange}*** $_sev_tmp exists, can't link to tmp dir $t, ignoring it%f"
_sev_tmp=$t
} else {
print -P "%F{orange}*** $_sev_tmp exists, can't link to tmp dir $t, ignoring it%f"
_sev_tmp=$t
} else {
- if [[ -h $_sev_tmp ]] {
- [[ -o interactive && $_sev_tmp:P != $t:P ]] &&
+ if [[ ! -v $_sev_tmp_keep_link && -h $_sev_tmp && $_sev_tmp:P != $t:P ]] {
+ [[ -o interactive ]] &&
print -P "%F{orange}*** $_sev_tmp links to ${_sev_tmp:P} and not ${t:P}, unlinking it%f"
# NOTE: ln -f doesn't seem to work reliably with softlink
# directories, so explicitly remove the target if it exists
print -P "%F{orange}*** $_sev_tmp links to ${_sev_tmp:P} and not ${t:P}, unlinking it%f"
# NOTE: ln -f doesn't seem to work reliably with softlink
# directories, so explicitly remove the target if it exists
# TODO: handle cleanup of old dir if it doesn't match?
unlink $_sev_tmp 2>/dev/null
}
# TODO: handle cleanup of old dir if it doesn't match?
unlink $_sev_tmp 2>/dev/null
}
- # link local dir to tmp dir
- ln -s $t $_sev_tmp 2>/dev/null
+ if [[ ! -e $_sev_tmp ]] {
+ # link local dir to tmp dir
+ ln -s $t $_sev_tmp 2>/dev/null
+ }
}
# ensure dir is clean
_sev_zcleanup tmp
}
# ensure dir is clean
_sev_zcleanup tmp