Set compromise XDG_RUNTIME_DIR if necessary

It's not ideal to set XDG_RUNTIME_DIR in your shell environment,
rather than from your session manager (or systemd, or whatever), since
then you can't reliably provide the same lifetime guarantees that
XDG_RUNTIME_DIR is supposed to have? But this is still preferable to not
having an XDG_RUNTIME_DIR at all, so I'm gonna go with it.
This commit is contained in:
Danielle McLean 2022-07-11 17:45:18 +10:00
parent f00062ec1b
commit 690df57f00
Signed by: 00dani
GPG Key ID: 52C059C3B22A753E
1 changed files with 20 additions and 0 deletions

20
zshenv
View File

@ -6,6 +6,26 @@
export XDG_CONFIG_HOME XDG_CACHE_HOME XDG_DATA_HOME XDG_STATE_HOME
# The other four XDG directories are very easy, but XDG_RUNTIME_DIR is
# complicated. It kinda needs to be managed by a systemwide supervisor, like
# systemd, in order to meet all of the XDG Base Directory specification's
# requirements? In particular, the directory is supposed to come into being
# when you log in, live as long as you have any active sessions, and be
# destroyed when you log out - none of this can easily be done from the shell
# environment alone, especially on an operating system like macOS where your
# graphical session wasn't spawned from a shell using something like .xinitrc.
#
# We're going to assume XDG_RUNTIME_DIR will have already be set by a
# systemwide supervisor if it can possibly have been. If it hasn't - say,
# because we're on macOS - we'll compromise by using TMPDIR. Since TMPDIR has
# a different lifetime than XDG_RUNTIME_DIR is supposed to, this is an
# imperfect solution, but it's the best we can do.
if [[ ! -d $XDG_RUNTIME_DIR ]] && [[ -d $TMPDIR ]]; then
export XDG_RUNTIME_DIR=${TMPDIR}xdg-$UID
mkdir -p $XDG_RUNTIME_DIR
chmod 0700 $XDG_RUNTIME_DIR
fi
# The real zsh config lives in XDG_CONFIG_HOME! ;)
: ${ZDOTDIR:=$XDG_CONFIG_HOME/zsh}
source $ZDOTDIR/zshenv