Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/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