From: sev Date: Mon, 16 Sep 2024 13:36:23 +0000 (-0500) Subject: zshenv: fix tmp and .local [for termux proot] X-Git-Url: https://git.sev.monster/~sev/dotfiles.git/commitdiff_plain/1a578fd007c8ba4196e424f993ce55837649d78b?ds=sidebyside zshenv: fix tmp and .local [for termux proot] 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!) --- diff --git a/etc/zsh/.zshenv b/etc/zsh/.zshenv index bf8af56..6a513e2 100644 --- a/etc/zsh/.zshenv +++ b/etc/zsh/.zshenv @@ -141,10 +141,9 @@ if [[ ! -v _sev_setup_path || -o login ]] { ## 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 @@ -160,10 +159,9 @@ if [[ ! -v _sev_setup_path || -o login ]] { 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 @@ -182,8 +180,8 @@ if [[ ! -v _sev_tmp ]] { 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 @@ -191,8 +189,10 @@ if [[ ! -v _sev_tmp ]] { # 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