#!/usr/bin/env sh # XDG Base Directory Specification # # Sets up necessary environment variables for XDG convention, # and those that applications obey for their environments. # # Thank you remeberYou for the idea # see: https://github.com/rememberYou/dotfiles/blob/master/sh/.config/sh/xdg # # Additionally, home directories are set using the XDG specification, # if the xdg-user-dirs module is enabled. # # Shellcheck will complain about setting permissions for the directories # unless it is ignored https://github.com/koalaman/shellcheck/wiki/SC2174 # shellcheck disable=SC2174 # http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html test "$XDG_CACHE_HOME" || export XDG_CACHE_HOME="$HOME/.cache" test "$XDG_CONFIG_HOME" || export XDG_CONFIG_HOME="$HOME/.config" test "$XDG_DATA_HOME" || export XDG_DATA_HOME="$HOME/.local/share" test "$XDG_STATE_HOME" || export XDG_STATE_HOME="$HOME/.local/state" # Desktop environment XDG variables - mimics `xdg-user-dirs` settings, only lowercased and not localized test "$XDG_DESKTOP_DIR" || export XDG_DESKTOP_DIR="$HOME/desktop" test "$XDG_DOCUMENTS_DIR" || export XDG_DOCUMENTS_DIR="$HOME/documents" test "$XDG_DOWNLOAD_DIR" || export XDG_DOWNLOAD_DIR="$HOME/downloads" export XDG_MEDIA_DIR="$HOME/media" export XDG_MUSIC_DIR="$XDG_MEDIA_DIR/audio/music" export XDG_PICTURES_DIR="$HOME/pictures" export XDG_VIDEOS_DIR="$HOME/videos" ## Non-Standard additions # non-standard, is added to path to enable execution of any files herein test "$XDG_PROJECTS_DIR" || export XDG_PROJECTS_DIR="$HOME/projects" test "$XDG_BIN_HOME" || export XDG_BIN_HOME="$HOME/.local/bin" # anything on BIN_HOME should be executable form anywhere export PATH="$PATH:$XDG_BIN_HOME" xdg_isThere() { if [ -e "$1" ] || [ -h "$1" ]; then true else false fi } xdg_makeForUser() { mkdir -p "$1" chmod 0700 "$1" } if [ -h "$XDG_MEDIA_DIR" ] && [ ! -e "$XDG_MEDIA_DIR" ]; then rm "$XDG_MEDIA_DIR" xdg_makeForUser "$XDG_MEDIA_DIR" fi ## ensure directories exist xdg_isThere "$XDG_BIN_HOME" || xdg_makeForUser "$XDG_BIN_HOME" xdg_isThere "$XDG_CACHE_HOME" || xdg_makeForUser "$XDG_CACHE_HOME" xdg_isThere "$XDG_CONFIG_HOME" || xdg_makeForUser "$XDG_CONFIG_HOME" xdg_isThere "$XDG_DATA_HOME" || xdg_makeForUser "$XDG_DATA_HOME" # create xdg-user-dirs if necessary xdg_isThere "$XDG_DESKTOP_DIR" || xdg_makeForUser "$XDG_DESKTOP_DIR" xdg_isThere "$XDG_DOCUMENTS_DIR" || xdg_makeForUser "$XDG_DOCUMENTS_DIR" xdg_isThere "$XDG_DOWNLOAD_DIR" || xdg_makeForUser "$XDG_DOWNLOAD_DIR" xdg_isThere "$XDG_MUSIC_DIR" || xdg_makeForUser "$XDG_MUSIC_DIR" xdg_isThere "$XDG_PICTURES_DIR" || xdg_makeForUser "$XDG_PICTURES_DIR" xdg_isThere "$XDG_VIDEOS_DIR" || xdg_makeForUser "$XDG_VIDEOS_DIR" xdg_isThere "$XDG_PROJECTS_DIR" || xdg_makeForUser "$XDG_PROJECTS_DIR" unset -f xdg_isThere xdg_makeForUser ## Applications that can be set through environment variables export ANDROID_HOME="$XDG_DATA_HOME/android" export ATOM_HOME="$XDG_DATA_HOME/atom" export CARGO_HOME="$XDG_DATA_HOME/cargo" export GEM_HOME="$XDG_DATA_HOME/gem" export GEM_SPEC_CACHE="$XDG_CACHE_HOME/gem" export GNUPGHOME="$XDG_DATA_HOME/gnupg" export GRADLE_USER_HOME="$XDG_DATA_HOME/gradle" export GRIPHOME="$XDG_CONFIG_HOME/grip" export IMAPFILTER_HOME="$XDG_CONFIG_HOME/imapfilter" export IPYTHONDIR="$XDG_CONFIG_HOME/ipython" export KDEHOME="$XDG_CONFIG_HOME/kde" export KODI_DATA="$XDG_DATA_HOME/kodi" export LESSHISTFILE="XDG_STATE_HOME/lesshst" export MPLAYER_HOME="$XDG_CONFIG_HOME/mplayer" export NODE_REPL_HISTORY="$XDG_STATE_HOME/node_repl_history" export NVM_DIR="$XDG_DATA_HOME/nvm" if [ ! -e "$PYTHONSTARTUP" ]; then mkdir -p "$XDG_CONFIG_HOME/python" touch "$PYTHONSTARTUP" fi export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc" export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history" export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var" export TMUX_PLUGIN_MANAGER_PATH="$XDG_DATA_HOME/tmux" export VAGRANT_HOME="$XDG_DATA_HOME/vagrant" export WINEPREFIX="$XDG_DATA_HOME/wine" export ZDOTDIR="$XDG_CONFIG_HOME/zsh" export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java alias yarn='yarn --use-yarnrc "$XDG_CONFIG_HOME/yarn/config"' alias wget='wget --hsts-file="$XDG_STATE_HOME/wget-hsts"'