Skip to content
Snippets Groups Projects
xdg_profile_set.sh 4.55 KiB
Newer Older
Jens Henrik  Goebbert's avatar
Jens Henrik Goebbert committed
#!/bin/bash

# Do not run as root
if [ "$LOGNAME" == "root" ] ; then
    return
fi

# Do not run as a local user
if grep -q "^$LOGNAME" /etc/passwd ; then
    return
fi

# set XDG_BIN if not set
export XDG_PROFILES_BIN="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# set XDG_PROFILES_DIR if not set
export XDG_PROFILES_DIR=${XDG_PROFILES_DIR:-${XDG_PROFILES_BIN}/xdg_profiles/}

# set XDG_PROFILES_HOME, if not set
export XDG_PROFILES_HOME=${XDG_PROFILES_HOME:-${HOME}/.local/xdg/xdg_profiles/}


# set default XDG variables
export XDG_CONFIG_HOME=${HOME}/.config/xdg_profiles/default
export XDG_CONFIG_DIR=${XDG_PROFILES_DIR}/default/config
export XDG_CONFIG_DIRS=${XDG_CONFIG_DIR}:/etc/xdg:/etc

export XDG_DATA_HOME=${HOME}/.local/xdg_profiles/default
export XDG_DATA_DIR=${XDG_PROFILES_DIR}/default/data
export XDG_DATA_DIRS=${XDG_DATA_DIR}:/usr/local/share:/usr/share

export XDG_CACHE_HOME=${XDG_DATA_HOME}/cache

# set profile XDG variables
# XDG_DATA_HOME must be ${HOME}/.local/xdg_profiles/${XDG_PROFILE}, as this is fixed in ${XDG_CONFIG_HOME}/user-dirs.dirs
echo -n "select XDG profile ${XDG_PROFILE} ... "
if [ -d ${XDG_PROFILES_DIR}/${XDG_PROFILE} ]; then
   export XDG_CONFIG_HOME=${HOME}/.config/xdg_profiles/${XDG_PROFILE}
   export XDG_CONFIG_DIR=${XDG_PROFILES_DIR}/${XDG_PROFILE}/config
   export XDG_CONFIG_DIRS=${XDG_CONFIG_DIR}:${XDG_CONFIG_DIRS}
   export XDG_DATA_HOME=${HOME}/.local/xdg_profiles/${XDG_PROFILE}
   export XDG_DATA_DIR=${XDG_PROFILES_DIR}/${XDG_PROFILE}/data
   export XDG_DATA_DIRS=${XDG_DATA_DIR}:${XDG_DATA_DIRS}
   export XDG_CACHE_HOME=${XDG_DATA_HOME}/cache
   echo "found"
else
   echo "is unkown - chosing default"
   export XDG_PROFILE=default
fi

# create XDG directories if not existant
if [ ! -d ${XDG_CONFIG_HOME} ]; then
   echo "XDG profile ${XDG_PROFILE} choosen the first time ... creating ${XDG_CONFIG_HOME}"
   mkdir -p ${XDG_CONFIG_HOME}
   # change default desktop directory from ${HOME}/Desktop to ${XDG_DATA_HOME}/Desktop 
   # to enable profile-specific desktop icons
   cp ${XDG_PROFILES_DIR}/${XDG_PROFILE}/config/user-dirs.dirs ${XDG_CONFIG_HOME}/
   # add bookmarks file
   mkdir -p ${XDG_CONFIG_HOME}/gtk-3.0/
fi
if [ ! -d ${XDG_DATA_HOME} ]; then
   echo "XDG profile ${XDG_PROFILE} choosen the first time ... creating ${XDG_DATA_HOME}"
   mkdir -p ${XDG_DATA_HOME}
fi

# always renew desktop icons, which linke to $XDG_PROFILES_DIR/...
#   this might annoy users, who have removed the icons,
#   but it ensures that icon updates are pushed to the users on every new login
if [ ! -d ${XDG_DATA_HOME}/Desktop ]; then
   echo "XDG profile ${XDG_PROFILE} choosen the first time ... creating ${XDG_DATA_HOME}/Desktop"
   mkdir -p ${XDG_DATA_HOME}/Desktop
fi
for file in ${XDG_DATA_HOME}/Desktop/*; do
   if [ -L ${file} ]; then
      target=$(readlink ${file})
      if [[ "${target}" == "${XDG_PROFILES_DIR}"* ]]; then
         rm ${file}
      fi
   fi
done 
# (link to all Desktop files, which are in XDG_CONFIG_DIRS)
IFS=:
for p in ${XDG_DATA_DIRS}; do
   if [ -d ${p}/Desktop ]; then
      ln -sf ${p}/Desktop/* ${XDG_DATA_HOME}/Desktop/
   fi
done

# always renew devilspie2 scripts on login
# (remove any links to XDG_PROFILES_DIR first)
if [ ! -d ${XDG_CONFIG_HOME}/devilspie2 ]; then
   echo "XDG profile ${XDG_PROFILE} choosen the first time ... creating ${XDG_CONFIG_HOME}/devilspie2"
   mkdir -p ${XDG_CONFIG_HOME}/devilspie2/
fi
for file in ${XDG_CONFIG_HOME}/devilspie2/*; do
   if [ -L ${file} ]; then
      target=$(readlink ${file})
      if [[ "${target}" == "${XDG_PROFILES_DIR}"* ]]; then
         rm ${file}
      fi
   fi
done
# (link to all .lua scripts for devilspie2, which are in XDG_CONFIG_DIRS)
IFS=:
for p in ${XDG_CONFIG_DIRS}; do
   if [ -d ${p}/devilspie2 ]; then
      ln -sf ${p}/devilspie2/*.lua ${XDG_CONFIG_HOME}/devilspie2/
   fi
done

# always renew gtk-bookmarks 
# make sure default JSC places ($WORK and $ARCH) are present
# 1) copy ${HOME}/.gtk-bookmarks to tmp-file
# 2) remove 
#   # add bookmarks file
#   if [ -e ${XDG_PROFILES_DIR}/${XDG_PROFILE}/config/gtk-3.0/bookmarks ]; then
#      cp ${XDG_PROFILES_DIR}/${XDG_PROFILE}/config/gtk-3.0/bookmarks ${XDG_CONFIG_HOME}/gtk-3.0/
#   else
#      touch ${XDG_CONFIG_HOME}/gtk-3.0/bookmarks
#   fi
#   ln -sf ${XDG_CONFIG_HOME}/gtk-3.0/bookmarks ${HOME}/.gtk-bookmarks
#

# remove saved sessions, as we do not want infoterm windows to appear multiple times
# (todo: only remove the call of infoterm scripts instead)
if [ ! -z "${XDG_DATA_HOME}" ]; then
  rm -rf ${XDG_DATA_HOME}/cache/sessions
fi

# echo settings
echo "XDG Settings:"
for x in ${!XDG_*}; do echo ${x} = ${!x}; done
echo