close to right for loading aliases
[feisty_meow.git] / scripts / core / launch_feisty_meow.sh
1 #!/bin/bash
2
3 ##############
4
5 # Fred Hamster's Feisty Meow Concerns Ltd. Startup Profile.
6 #
7 # This file is useful within .profile or other initialization scripts.
8 #
9 # Author: Chris Koeritz
10
11 ##############
12
13 # DEBUG_FEISTY_MEOW: if this variable is non-empty, then it causes the feisty meow
14 # scripts to print more diagnostic information when they run.  not all
15 # scripts support this, but the core ones do.
16
17 #export DEBUG_FEISTY_MEOW=true
18
19 ##############
20
21 # this script cannot handle figuring out where it lives, so approaches that
22 # get the WORKDIR will fail.  this is a consequence of this always being used
23 # in bash's 'source' directive, which does not pass the script name as
24 # argument 0.  instead, we just check for the bad condition of a malconfigured
25 # script system and try to repair it.
26
27 # we start out thinking things are good.
28 NO_REPAIRS_NEEDED=true
29
30 # check if any crucial folder is hosed.  we will torch the existing config
31 # to the extent we can.
32 if [ ! -d "$FEISTY_MEOW_APEX" ]; then
33   # flag some problems.
34   unset NO_REPAIRS_NEEDED
35   # wipe out the offending variable(s).
36   unset FEISTY_MEOW_SCRIPTS FEISTY_MEOW_APEX
37   # clean out any unfortunate wrongness that may exist in our generated areas.
38   if [ -d "$FEISTY_MEOW_LOADING_DOCK" ]; then \rm -rf "$FEISTY_MEOW_LOADING_DOCK"; fi
39   if [ -d "$FEISTY_MEOW_GENERATED_STORE" ]; then \rm -rf "$FEISTY_MEOW_GENERATED_STORE"; fi
40   # also wipe any values from the variables pointing at generated stuff.
41   unset FEISTY_MEOW_LOADING_DOCK FEISTY_MEOW_GENERATED_STORE
42   echo "
43
44 The feisty meow configuration is damaged somehow.  Please change to the
45 directory where it is stored, e.g.:
46
47   cd /opt/feistymeow.org/feisty_meow
48
49 and run this command (the whole unwieldy multiple line chunk inside the bars):
50
51
52 ##############
53   exec bash -i 3<<EOF 4<&0 <&3
54     echo -e '\n\n^^^ errors above here indicate potential problems in .bashrc ^^^';
55     export FEISTY_MEOW_APEX=\"\$(pwd)\"; export FEISTY_MEOW_SCRIPTS=\$FEISTY_MEOW_APEX/scripts;
56     export FEISTY_MEOW_SHOW_LAUNCH_GREETING=yes;
57     /bin/bash \$(pwd)/scripts/core/reconfigure_feisty_meow.sh;
58     source \$(pwd)/scripts/core/launch_feisty_meow.sh; exec 3>&- <&4
59 EOF
60 ##############
61
62
63 This code snippet assumes that the .bashrc file could still need editing to
64 fix an erroneous FEISTY_MEOW_APEX variable, so we skip it above when bash
65 runs.  Check \$HOME/.bashrc to see if a change there will fix the problem.
66
67 "
68 else
69   # apex is good, so let's make the scripts good too.
70   if [ -z "$FEISTY_MEOW_SCRIPTS" -o ! -d "$FEISTY_MEOW_SCRIPTS" ]; then
71     export FEISTY_MEOW_SCRIPTS="$FEISTY_MEOW_APEX/scripts"
72   fi
73   # check again to test our belief system...
74   if [ ! -d "$FEISTY_MEOW_SCRIPTS" ]; then
75     unset NO_REPAIRS_NEEDED
76     echo -e "The feisty meow scripts cannot be found under the current top:\n  FEISTY_MEOW_APEX=$FEISTY_MEOW_APEX"
77   fi
78 fi
79
80 if [ "$NO_REPAIRS_NEEDED" == "true" ]; then
81
82   # we believe it's safe to run through the rest of this script.
83
84   ##############
85   
86   # some preconditions we want to establish before loading anything...
87   
88   # make sure that aliases can be used in non-interactive shells.
89   shopt -s expand_aliases
90   
91   # patch the user variable if we were launched by one of our cron jobs.
92   if [ -z "$USER" -a ! -z "$CRONUSER" ]; then
93     export USER="$CRONUSER"
94   fi
95   
96   ##############
97   
98   export ERROR_OCCURRED=
99     # there have been no errors to start with, at least.  we will set this
100     # to non-empty if something bad happens.
101   
102   if [ -z "$FEISTY_MEOW_LOADING_DOCK" ]; then
103     # FEISTY_MEOW_LOADING_DOCK is where the generated files are located.
104     # this is our single entry point we can use without knowing any variables
105     # yet in the initialization process.
106     export FEISTY_MEOW_LOADING_DOCK="$HOME/.zz_feisty_loading"
107   #hmmm: the above is kind of a constant.  that's not so great.
108   
109     # make sure our main variables are established.
110     FEISTY_MEOW_VARIABLES_LOADING_FILE="$FEISTY_MEOW_LOADING_DOCK/fmc_variables.sh"
111     if [ ! -f "$FEISTY_MEOW_VARIABLES_LOADING_FILE" ]; then
112       echo -e "\
113   
114   The feisty meow scripts need initialization via the bootstrap process.  For\n\
115   example, if the feisty meow folder lives in '$DEFAULT_FEISTYMEOW_ORG_DIR', then this\n\
116   command bootstraps feisty meow:\n\
117   \n\
118     bash $example_dir/feisty_meow/scripts/core/reconfigure_feisty_meow.sh\n\
119   \n\
120   \n"
121       ERROR_OCCURRED=true
122     fi
123   
124     ##############
125
126 echo POINT A
127   
128     if [ -z "$ERROR_OCCURRED" ]; then
129
130 echo POINT B
131       # pull in our generated variables that are the minimal set we need to find
132       # the rest of our resources.
133       source "$FEISTY_MEOW_VARIABLES_LOADING_FILE"
134   
135 echo POINT C
136       # Set up the temporary directory.
137       source "$FEISTY_MEOW_SCRIPTS/core/create_tempdir.sh"
138 echo POINT D
139     fi
140   
141   fi
142
143   ##############
144
145   if [ -z "$ERROR_OCCURRED" ]; then
146
147 echo POINT E
148
149     # load the larger body of standard feisty meow variables into the environment.
150     # we actually want this to always run also; it will decide what variables need
151     # to be set again.
152     source "$FEISTY_MEOW_SCRIPTS/core/variables.sh"
153
154 echo POINT F
155     ##############
156
157     # include helpful functions.  we do this every time rather than making it part
158     # of variable initialization, because functions cannot be exported to
159     # sub-shells in bash.
160     source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"
161
162 echo POINT G
163     # load some helper methods for the terminal which we'll use below.
164     source "$FEISTY_MEOW_SCRIPTS/tty/terminal_titler.sh"
165
166 echo POINT H
167     ##############
168
169 #hmmm: abstract this to a twiddle shell options method.
170     # check hash table before searching path.
171     shopt -s checkhash
172     # don't check path for sourced files.
173     shopt -u sourcepath
174     # ignore duplicate lines.
175     HISTCONTROL=ignoredups
176     # append to the history file.
177     shopt -s histappend
178     # automatically update window size if needed.
179     shopt -s checkwinsize
180
181     ##############
182 echo POINT I
183
184     # make history writes immediate to avoid losing history if bash is zapped.
185     echo $PROMPT_COMMAND | grep -q history
186     if [ $? -ne 0 ]; then
187       # we only change the prompt command if we think it hasn't already been done.
188       export PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
189     fi
190
191     ##############
192
193     # perform the bulkier parts of the initialization process.
194
195     if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then echo "heavyweight init begins..."; fi
196
197 echo POINT J
198     # set up the aliases for the shell, but only if they are not already set.
199     type CORE_ALIASES_LOADED &>/dev/null
200     if [ $? -ne 0 ]; then
201       if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then
202         echo "the aliases were missing, now they are being added..."
203       fi
204 echo HEEE HAHAHAHAHA
205       source "$FEISTY_MEOW_LOADING_DOCK/fmc_core_and_custom_aliases.sh"
206 echo HOOOOEY
207     fi
208
209 echo POINT K
210     #echo before the new labelling, terminal titles have:
211     #show_terminal_titles
212
213     # a minor tickle of the title of the terminal, unless we already have some history.
214     label_terminal_with_info
215
216     if [ ! -z "$DEBUG_FEISTY_MEOW" ]; then echo "heavyweight init is done."; fi
217
218     if [ -z "$ERROR_OCCURRED" ]; then
219       # set a sentinel variable to say we loaded the feisty meow environment.
220       export FEISTY_MEOW_SCRIPTS_LOADED=true
221     fi
222
223   fi  # no error occurred.
224
225   if [ ! -z "$FEISTY_MEOW_SHOW_LAUNCH_GREETING" ]; then
226     echo
227     echo
228     echo "welcome to the feisty meow zone of peace, one of many refuges in the uncountably"
229     echo "infinite multiverses that are hypothetically possible."
230     echo
231     echo
232     unset FEISTY_MEOW_SHOW_LAUNCH_GREETING
233   fi
234
235   # load the last bits we do here.
236   source "$FEISTY_MEOW_LOADING_DOCK/fmc_ending_sentinel.sh"
237
238 fi # "$NO_REPAIRS_NEEDED" was == "true" 
239