summaryrefslogtreecommitdiff
path: root/.config/login.d/02_xdg_runtime_dir.sh
diff options
context:
space:
mode:
authorLuke Shumaker <shumakl@purdue.edu>2015-09-19 15:49:29 -0400
committerLuke Shumaker <shumakl@purdue.edu>2015-09-19 15:49:29 -0400
commit118f849aed5aef3bf2750ca102007b4a38e44486 (patch)
tree47eb202ab5e4ed21a43122a44ed331e76a7bf258 /.config/login.d/02_xdg_runtime_dir.sh
parent739fa0ff2b7b0581b2d294f8de8b9e79234ed66c (diff)
parent641fc49fc651b6a67fb8ff90198e889e0e3920bb (diff)
Merge remote-tracking branch 'origin/master' into purdue-cs/master
# Conflicts: # .config/X11/clientrc # .config/bash/rc.sh # .config/cron/make-config # .config/emacs/custom.el # .config/emacs/init.el # .config/login.d/10_selected-editor.sh # .config/login.sh
Diffstat (limited to '.config/login.d/02_xdg_runtime_dir.sh')
-rw-r--r--.config/login.d/02_xdg_runtime_dir.sh29
1 files changed, 29 insertions, 0 deletions
diff --git a/.config/login.d/02_xdg_runtime_dir.sh b/.config/login.d/02_xdg_runtime_dir.sh
new file mode 100644
index 0000000..864eadd
--- /dev/null
+++ b/.config/login.d/02_xdg_runtime_dir.sh
@@ -0,0 +1,29 @@
+#!/hint/sh
+
+# Set XDG_RUNTIME_DIR if we can
+if [ -z "$XDG_RUNTIME_DIR" ] && shopt -q login_shell && type flock &>/dev/null; then
+ _diy_xdg_runtime_login() {
+ export XDG_RUNTIME_DIR="$XDG_CACHE_HOME/xdg-runtime-dir/$HOSTNAME"
+ if ! [ /dev/fd/7 -ef "$XDG_CACHE_HOME/xdg-runtime-dir/.lock" ]; then
+ exec 7>"$XDG_CACHE_HOME/xdg-runtime-dir/.lock"
+ if flock -xn 7; then
+ if [ ! -d "$XDG_RUNTIME_DIR" ]; then
+ local tmp="$(mktemp -d --tmpdir -- "${USER}@${HOSTNAME}-runtime.XXXXXXXXXX")"
+ mkdir -p -- "$XDG_CACHE_HOME/xdg-runtime-dir"
+ ln -sfT -- "$tmp" "$XDG_RUNTIME_DIR"
+ fi
+ # Unfortunately this doesn't survive across exec(1).
+ trap _diy_xdg_runtime_logout EXIT
+ flock -sn 7
+ fi
+ fi
+ }
+ _diy_xdg_runtime_logout() {
+ exec 7>&-
+ exec 7>"$XDG_CACHE_HOME/xdg-runtime-dir/.lock"
+ if flock -xn 7; then
+ rm -rf -- "$(readlink "$XDG_RUNTIME_DIR")"
+ fi
+ }
+ _diy_xdg_runtime_login
+fi