]> git.sev.monster Git - dotfiles.git/commitdiff
zshenv: fix tmp and .local [for termux proot]
authorsev <git@sev.monster>
Mon, 16 Sep 2024 13:36:23 +0000 (08:36 -0500)
committersev <git@sev.monster>
Mon, 16 Sep 2024 13:46:33 +0000 (08:46 -0500)
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!)

etc/zsh/.zshenv

index bf8af5662fc0c89e6fb4714954696b4c33406cfb..6a513e251c7976a4541e5ecae99b6c507d01f9fa 100644 (file)
@@ -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
This page took 0.038044 seconds and 4 git commands to generate.