Commit | Line | Data |
---|---|---|
65ff0e8c | 1 | #! /bin/bash |
f617db13 MW |
2 | |
3 | set -e | |
4 | ||
ce178f96 MW |
5 | ###-------------------------------------------------------------------------- |
6 | ### Basic setup. | |
7 | ||
f617db13 MW |
8 | umask 002 |
9 | ||
4aa875e9 | 10 | sub= |
f617db13 MW |
11 | mkdir -p $HOME$sub |
12 | ||
8ba15f37 | 13 | : ${REPO=http://ftp.distorted.org.uk/ftp/pub/mdw/profile} |
f617db13 MW |
14 | |
15 | export PATH=/usr/local/bin:$HOME$sub/bin:/usr/bin:/usr/ccs/bin:/bin | |
16 | ||
ce178f96 MW |
17 | ###-------------------------------------------------------------------------- |
18 | ### Sort out command line. | |
19 | ||
f617db13 MW |
20 | xstuff= false= |
21 | while [ $# -gt 0 ]; do | |
22 | case "$1" in | |
23 | -x) xstuff=t;; | |
24 | -n) false=false;; | |
25 | --) shift; break;; | |
26 | -*) echo >&2 "$0: bad option"; exit 1;; | |
27 | *) break;; | |
28 | esac | |
29 | shift | |
30 | done | |
31 | ||
ce178f96 MW |
32 | ###-------------------------------------------------------------------------- |
33 | ### Environment autoconfiguration. | |
34 | ||
35 | ## Find out where I am | |
f617db13 | 36 | here=$(pwd) |
f617db13 | 37 | |
ce178f96 | 38 | ## Suss out how to print things |
f617db13 MW |
39 | out=$(echo -n "foo"; echo "bar") |
40 | if [ "$out" = "foobar" ]; then | |
41 | echon="echo -n" | |
42 | echoc="" | |
43 | else | |
44 | echon="echo" | |
45 | echoc='\c' | |
46 | fi | |
47 | ||
ce178f96 | 48 | ## Find out how to fetch things over the net |
f617db13 MW |
49 | $echon "Finding URL fetcher:$echoc" |
50 | if curl >/dev/null 2>&1 --version || [ $? -eq 2 ]; then | |
51 | GETURL="curl -fs -o" | |
52 | echo " curl." | |
53 | elif wget >/dev/null 2>&1 --version; then | |
54 | GETURL="wget -q -O" | |
55 | echo " wget." | |
56 | else | |
57 | echo " failed!" | |
58 | echo >&2 "$0: failed to find URL fetcher" | |
59 | exit 1 | |
60 | fi | |
61 | ||
ce178f96 MW |
62 | ###-------------------------------------------------------------------------- |
63 | ### Create the necessary directories. | |
64 | ||
65 | echo "Creating directories..." | |
66 | for i in bin lib/emacs src; do | |
67 | $echon " $i:$echoc" | |
68 | if [ -d $HOME$sub/$i ]; then | |
69 | echo " already exists." | |
70 | else | |
71 | mkdir -p $HOME$sub/$i | |
72 | echo " done." | |
73 | fi | |
74 | done | |
75 | echo " all done." | |
76 | ||
77 | ###-------------------------------------------------------------------------- | |
78 | ### Install necessary things. | |
79 | ||
f617db13 MW |
80 | echo "Installing useful scripts..." |
81 | ||
af58d83c | 82 | scripts=" |
8e08f814 | 83 | lesspipe.sh start-ssh-agent svnwrap" |
af58d83c | 84 | for script in $scripts; do |
f617db13 MW |
85 | $echon " $script:$echoc" |
86 | found= | |
87 | for p in /bin /usr/bin /usr/local/bin $(echo $PATH | tr : ' '); do | |
88 | if $false [ -x $p/$script ]; then | |
89 | found=t | |
90 | break | |
91 | fi | |
92 | done | |
93 | if [ "$found" ]; then | |
94 | echo " already installed." | |
95 | else | |
96 | $echon " downloading$echoc" | |
97 | $GETURL $HOME$sub/bin/$script $REPO/$script | |
98 | chmod +x $HOME$sub/bin/$script | |
99 | echo " done." | |
100 | fi | |
101 | done | |
102 | ||
852cd5fb | 103 | echo " all done." |
f617db13 | 104 | |
ce178f96 MW |
105 | ###-------------------------------------------------------------------------- |
106 | ### Install some more complicated programs. | |
107 | ||
f617db13 MW |
108 | echo "Installing packages..." |
109 | systems=" | |
8e08f814 | 110 | mlib:2.0.4:crc-mktab |
f617db13 MW |
111 | chkpath:1.1.0:tmpdir |
112 | " | |
113 | [ "$xstuff" ] && systems="$systems | |
8e08f814 | 114 | xtoys:1.4.0:xatom |
f617db13 MW |
115 | " |
116 | for system in $systems; do | |
117 | set -- $(echo $system | tr : ' ') | |
118 | sys=$1 ver=$2 prog=$3 | |
119 | $echon " $sys:$echoc" | |
120 | if $false $prog >/dev/null 2>&1 --version; then | |
121 | echo " already installed." | |
122 | else | |
123 | ( set -e | |
124 | $echon " downloading$echoc" | |
125 | cd $HOME$sub/src | |
126 | rm -rf $sys-$ver.tar.gz $sys-$ver | |
127 | $GETURL $sys-$ver.tar.gz $REPO/$sys-$ver.tar.gz | |
128 | $echon " unpacking$echoc" | |
129 | gzip -cd $sys-$ver.tar.gz | tar xf - | |
130 | $echon " configuring$echoc" | |
131 | cd $sys-$ver | |
132 | mkdir build | |
133 | cd build | |
134 | ../configure --prefix=$HOME$sub >>buildlog 2>&1 | |
135 | $echon " building$echoc" | |
136 | make >>buildlog 2>&1 | |
137 | $echon " installing$echoc" | |
138 | make install >>buildlog 2>&1 | |
139 | echo " done." | |
140 | ) | |
141 | fi | |
142 | done | |
852cd5fb | 143 | echo " all done." |
f617db13 | 144 | |
ce178f96 MW |
145 | ###-------------------------------------------------------------------------- |
146 | ### Install global configuration. | |
147 | ||
f141fe0f MW |
148 | echo -n "Installing dotfile configuration:" |
149 | if [ -f $HOME$sub/.mdw.conf ]; then | |
150 | echo " already installed." | |
151 | else | |
152 | cp mdw.conf $HOME$sub/.mdw.conf | |
153 | echo " done." | |
154 | fi | |
155 | ||
ce178f96 | 156 | ## Symlink the various dotfiles into place |
852cd5fb | 157 | dotfiles=" |
be7dba95 | 158 | bash_profile bash_logout bashrc inputrc bash_completion |
b3468c3b | 159 | emacs emacs-calc vm |
3e3c03ee | 160 | vimrc mg |
b3468c3b | 161 | mailrc signature |
ce178f96 | 162 | cgrc tigrc |
e7d23024 | 163 | gdbinit |
8a7e906d | 164 | guile |
5d25e440 | 165 | toprc |
cbffcf2b | 166 | aspell.conf |
ccaac00b MW |
167 | lisp-init.lisp:.cmucl-init.lisp |
168 | lisp-init.lisp:.sbclrc | |
169 | lisp-init.lisp:.clisprc.lisp | |
f6335a0c | 170 | lisp-init.lisp:.eclrc |
2425eca9 | 171 | dircolors colordiffrc screenrc cvsrc indent.pro" |
739bccbf | 172 | [ "$xstuff" ] && dotfiles="$dotfiles |
eae29a8c | 173 | xinitrc xsession Xdefaults vncrc vncsession |
1c6b19d4 | 174 | putty-defaults:.putty/sessions/Default%20Settings |
7cfa1f1a | 175 | eterm-theme.cfg:.Eterm/themes/Eterm/theme.cfg |
739bccbf | 176 | e-keybindings.cfg:.enlightenment/keybindings.cfg |
eae29a8c | 177 | evnc-keybindings.cfg:.enlightenment-vnc/keybindings.cfg |
eebca092 MW |
178 | e16-bindings:.e16/bindings.cfg |
179 | e16-config:.e16/e_config--1.0.cfg | |
180 | jue-peek.jpg:.enlightenment/backgrounds/jue-peek.jpg | |
181 | jue-peek.jpg:.e16/backgrounds/jue-peek.jpg" | |
f617db13 MW |
182 | echo "Installing dotfiles..." |
183 | for d in $dotfiles; do | |
739bccbf MW |
184 | target=.$d |
185 | case $d in | |
186 | *:*) target=${d#*:} d=${d%%:*};; | |
187 | esac | |
188 | ft=$HOME$sub/$target | |
189 | dir=${ft%/*} | |
190 | mkdir -p $dir | |
191 | ln -s $here/$d $ft.new | |
192 | mv $ft.new $ft | |
193 | echo " $target" | |
f617db13 | 194 | done |
852cd5fb | 195 | echo " all done." |
f617db13 | 196 | |
ce178f96 MW |
197 | ###-------------------------------------------------------------------------- |
198 | ### Process the Git configuration. | |
199 | ||
200 | echo -n "Installing Git configuration:" | |
201 | sed " | |
202 | 1i\ | |
15581433 | 203 | ### generated by $here/setup; do not edit!\ |
ce178f96 MW |
204 | |
205 | /@releasekey@/ s::$(./mdw-conf release-key 481334C2):g | |
15581433 | 206 | /@gitignore@/ s::$(./mdw-conf gitignore $here/gitignore):g |
ce178f96 MW |
207 | " gitconfig >$HOME/.gitconfig.new |
208 | mv $HOME/.gitconfig.new $HOME/.gitconfig | |
209 | echo " done." | |
210 | ||
211 | ###-------------------------------------------------------------------------- | |
212 | ### Install useful scripts included in this package. | |
213 | ||
e04c4857 | 214 | scripts=" |
547fb8af | 215 | mdw-editor |
b056f5c4 | 216 | mdw-conf |
8e08f814 | 217 | movemail-hack |
547fb8af | 218 | emerge-hack" |
8e08f814 MW |
219 | [ "$xstuff" ] && scripts="$scripts |
220 | xrun | |
221 | xshutdown" | |
e04c4857 MW |
222 | echo "Installing scripts..." |
223 | mkdir -p $HOME$sub/bin | |
224 | for s in $scripts; do | |
225 | ft=$HOME$sub/bin/$s | |
226 | ln -s $here/$s $ft.new | |
227 | mv $ft.new $ft | |
228 | echo " $s" | |
229 | done | |
230 | echo " all done." | |
231 | ||
ce178f96 MW |
232 | ###-------------------------------------------------------------------------- |
233 | ### Set up the Emacs config. | |
234 | ||
65ff0e8c MW |
235 | $echon "Finding a suitable emacs:$echoc" |
236 | emacs=no | |
6960aa99 | 237 | for i in emacs22 emacs21 emacs; do |
65ff0e8c MW |
238 | if type -p >/dev/null $i; then |
239 | emacs=$i | |
240 | break | |
241 | fi | |
242 | done | |
243 | if [ $emacs = no ]; then | |
244 | echo " failed." | |
245 | emacs=: | |
246 | else | |
247 | echo " $emacs." | |
248 | fi | |
249 | ||
f617db13 | 250 | echo "Installing Emacs packages..." |
400223a1 MW |
251 | emacspkg=" |
252 | make-regexp | |
1778b496 | 253 | git git-blame vc-git stgit |
400223a1 MW |
254 | quilt" |
255 | for elib in $emacspkg; do | |
f617db13 | 256 | $echon " $elib:$echoc" |
65ff0e8c | 257 | if $false $emacs >/dev/null 2>&1 --no-site-file --batch --eval ' |
20eb0692 | 258 | (progn |
852cd5fb MW |
259 | (setq load-path (nconc load-path (list "~/lib/emacs"))) |
260 | (kill-emacs (condition-case nil | |
261 | (progn (load-library "'"$elib"'") 0) | |
20eb0692 | 262 | (error 1))))'; then |
f617db13 MW |
263 | echo " already installed." |
264 | else | |
265 | $echon " downloading$echoc" | |
20eb0692 | 266 | $GETURL $HOME$sub/lib/emacs/$elib.el $REPO/$elib.el |
f617db13 MW |
267 | $echon " compiling$echoc" |
268 | (cd $HOME$sub/lib/emacs; | |
65ff0e8c | 269 | $emacs >/dev/null 2>&1 --no-site-file --batch \ |
20eb0692 | 270 | --eval '(byte-compile-file "'"$elib.el"'")') |
f617db13 MW |
271 | echo " done." |
272 | fi | |
273 | done | |
852cd5fb | 274 | echo " all done." |
f617db13 MW |
275 | |
276 | $echon "Setting up Emacs configuration:$echoc" | |
277 | $echon " linking$echoc" | |
278 | for link in dot-emacs.el:dot-emacs.el emacs-Makefile:Makefile; do | |
279 | set -- $(echo $link | tr : ' ') | |
280 | from=$1 to=$2 | |
739bccbf MW |
281 | ln -s $here/$from $HOME$sub/lib/emacs/$to.new |
282 | mv $HOME$sub/lib/emacs/$to.new $HOME$sub/lib/emacs/$to | |
f617db13 MW |
283 | done |
284 | $echon " compiling$echoc" | |
65ff0e8c | 285 | make >/dev/null 2>&1 -C $HOME$sub/lib/emacs EMACS=$emacs |
f617db13 | 286 | echo " done." |
ce178f96 MW |
287 | |
288 | ###----- That's all, folks -------------------------------------------------- |