#!/bin/ksh
#
# $Revision: 9cd11a69f941 $ $Date: Sun, 31 Mar 2024 19:36:56 -0400 $
# $Source: /doc/html/htdocs/dotfiles/bin/mkxdg $
# $Host: furbag.my.domain $
# $UUID: b32d67f4-bfdb-4363-9b99-35ae055664e4 $
#
#<mkxdg: check for existence of Base Directory Spec setup.
#
# https://wiki.archlinux.org/title/XDG_Base_Directory
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

export PATH=/usr/local/bin:/bin:/usr/bin
tag=${0##*/}
umask 022

logmsg () { echo "$(date '+%F %T') $tag: $@"; }
die ()    { logmsg "FATAL: $@"; exit 1; }

# XDG_CONFIG_HOME
#   Where user-specific configurations should be written (analogous
#   to /etc).  Should default to $HOME/.config.

test "x$XDG_CONFIG_HOME" = "x" && XDG_CONFIG_HOME="$HOME/.config"

if test -d "$XDG_CONFIG_HOME"; then
    printf "%s: %s exists:\n" XDG_CONFIG_HOME $XDG_CONFIG_HOME
    ls -lFa $XDG_CONFIG_HOME
    printf "\n"
else
    mkdir $XDG_CONFIG_HOME || die "$XDG_CONFIG_HOME: mkdir failed"
    chmod 750 $XDG_CONFIG_HOME
fi

# XDG_CACHE_HOME
#   Where user-specific non-essential (cached) data should be written
#   (analogous to /var/cache).  Should default to $HOME/.cache.

test "x$XDG_CACHE_HOME" = "x" && XDG_CACHE_HOME="$HOME/.cache"

if test -d "$XDG_CACHE_HOME"; then
    printf "%s: %s exists:\n" XDG_CACHE_HOME $XDG_CACHE_HOME
    ls -lFa $XDG_CACHE_HOME
    printf "\n"
else
    mkdir $XDG_CACHE_HOME || die "$XDG_CACHE_HOME: mkdir failed"
    chmod 750 $XDG_CACHE_HOME
    printf "%s: created %s\n" XDG_CACHE_HOME $XDG_CACHE_HOME
fi

# XDG_DATA_HOME
#   Where user-specific data files should be written (analogous to
#   /usr/share).  Should default to $HOME/.local/share.

test "x$XDG_DATA_HOME" = "x" && XDG_DATA_HOME="$HOME/.local/share"

if test -d "$XDG_DATA_HOME"; then
    printf "%s: %s exists:\n" XDG_DATA_HOME $XDG_DATA_HOME
    ls -lFa $XDG_DATA_HOME
    printf "\n"
else
    mkdir -p $XDG_DATA_HOME || die "$XDG_DATA_HOME: mkdir failed"
    chmod 750 $XDG_DATA_HOME
    printf "%s: created %s\n" XDG_DATA_HOME $XDG_DATA_HOME
fi

# XDG_STATE_HOME
#   Where user-specific state files should be written (analogous to
#   /var/lib).  Should default to $HOME/.local/state.

test "x$XDG_STATE_HOME" = "x" && XDG_STATE_HOME="$HOME/.local/state"

if test -d "$XDG_STATE_HOME"; then
    printf "%s: %s exists:\n" XDG_STATE_HOME $XDG_STATE_HOME
    ls -lFa $XDG_STATE_HOME
    printf "\n"
else
    mkdir -p $XDG_STATE_HOME || die "$XDG_STATE_HOME: mkdir failed"
    chmod 750 $XDG_STATE_HOME
    printf "%s: created %s\n" XDG_STATE_HOME $XDG_STATE_HOME
fi

# XDG_RUNTIME_DIR
#   Used for non-essential, user-specific data files such as sockets,
#   named pipes, etc.  Not required to have a default value; use
#   $HOME/.local/run for now.  Recommended: /run/user/$UID

test "x$XDG_RUNTIME_DIR" = "x" && XDG_RUNTIME_DIR="$HOME/.local/run"

if test -d "$XDG_RUNTIME_DIR"; then
    printf "%s: %s exists:\n" XDG_RUNTIME_DIR $XDG_RUNTIME_DIR
    ls -lFa $XDG_RUNTIME_DIR
    printf "\n"
else
    mkdir -p $XDG_RUNTIME_DIR || die "$XDG_RUNTIME_DIR: mkdir failed"
    chmod 700 $XDG_RUNTIME_DIR
    printf "%s: created %s\n" XDG_RUNTIME_DIR $XDG_RUNTIME_DIR
fi

set | grep XDG
exit 0
