Allow specifying path to tmux socket.
[profile.git] / .bash_profile
1 if tty -s || [ "${0:0:1}" = "-" -o "$1" = "force" ]; then
2   # Remember if nocaseglob was on.
3   shopt -q nocaseglob
4   nocg=$?
5   # Turn it off so we source stuff in the right order.
6   shopt -u nocaseglob
7
8   # Remember LC_ALL.
9   lc_all=$LC_ALL
10   # Turn it off to set case-sensitive matching
11   LC_ALL=C
12
13   # Force these to come before everything else.
14   required="OS.bashrc
15 PATH.bashrc
16 BECOME.bashrc"
17
18   # Remember PATH so we can mangle it to find tsort and sed.
19   path="$PATH"
20   PATH=/usr/bin:/bin:/usr/ccs/bin
21
22   # Sort all scripts by dependencies.
23   profile_d=${PROFILE_HOME:-~}/.profile.d
24   deps=
25   unsorted=
26   for i in $profile_d/*.bashrc; do
27     dep=$(sed -n 's/^##*[       ]*profile-required:[    ]*//p' "$i")
28     i="${i##$profile_d/}"
29     if [ -n "$dep" ]; then
30       for d in $dep; do
31         deps="$deps
32 $d $i"
33       done
34     else
35       unsorted="$unsorted
36 $i"
37     fi
38   done
39
40   deps="$deps$unsorted"
41
42   # Avoid odd number of tokens for tsort.
43   n=$(echo "$deps" | wc -w)
44   if [ $((n%2)) = 1 ]; then
45     deps="$deps
46 ${deps##*
47 }"
48   fi
49   sorted=$(echo "$deps" | tsort)
50   if [ -n "$sorted" ]; then
51     deps="$sorted"
52     unset sorted
53   fi
54   deps="$required
55 $deps"
56
57   # Restore PATH.
58   PATH="$path"
59
60   # Source them all in the right order.
61   sourced=
62   for i in $deps; do
63     [ -e "$profile_d/$i" ] || continue
64     [ "${sourced/ $i /}" = "$sourced" ] || continue
65     . "$profile_d/$i"
66     sourced="$sourced $i "
67   done
68
69   # Maybe turn nocaseglob back on.
70   [ $nocg = 0 ] && shopt -s nocaseglob
71
72   # Reset LC_ALL.
73   LC_ALL=$lc_all
74
75   unset i d n dep deps profile_d path required unsorted sourced
76   unset lc_all nocg
77
78   # Don't inherit failure from the last script.
79   true
80 fi