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 | ||
563555cf | 13 | : ${REPO=https://ftp.distorted.org.uk/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 | ||
ce178f96 MW |
77 | ###-------------------------------------------------------------------------- |
78 | ### Install some more complicated programs. | |
79 | ||
f617db13 MW |
80 | echo "Installing packages..." |
81 | systems=" | |
285a1386 MW |
82 | mlib:crc-mktab |
83 | checkpath:tmpdir | |
f617db13 MW |
84 | " |
85 | [ "$xstuff" ] && systems="$systems | |
285a1386 | 86 | xtoys:xatom |
f617db13 MW |
87 | " |
88 | for system in $systems; do | |
89 | set -- $(echo $system | tr : ' ') | |
285a1386 | 90 | sys=$1 prog=$2 |
f617db13 MW |
91 | $echon " $sys:$echoc" |
92 | if $false $prog >/dev/null 2>&1 --version; then | |
93 | echo " already installed." | |
94 | else | |
95 | ( set -e | |
96 | $echon " downloading$echoc" | |
97 | cd $HOME$sub/src | |
285a1386 MW |
98 | rm -rf $sys.tar.gz $sys-$ver |
99 | $GETURL $sys.tar.gz $REPO/$sys.tar.gz | |
f617db13 | 100 | $echon " unpacking$echoc" |
285a1386 MW |
101 | dir=$(gzip -cd $sys.tar.gz | tar tf - | head -1) |
102 | gzip -cd $sys.tar.gz | tar xf - | |
f617db13 | 103 | $echon " configuring$echoc" |
285a1386 | 104 | cd $dir |
f617db13 MW |
105 | mkdir build |
106 | cd build | |
188ebb31 MW |
107 | ../configure \ |
108 | --prefix=$HOME$sub \ | |
109 | PKG_CONFIG_PATH=$HOME$sub/lib/pkgconfig \ | |
110 | >>buildlog 2>&1 | |
f617db13 MW |
111 | $echon " building$echoc" |
112 | make >>buildlog 2>&1 | |
113 | $echon " installing$echoc" | |
114 | make install >>buildlog 2>&1 | |
115 | echo " done." | |
116 | ) | |
117 | fi | |
118 | done | |
852cd5fb | 119 | echo " all done." |
f617db13 | 120 | |
ce178f96 MW |
121 | ###-------------------------------------------------------------------------- |
122 | ### Install global configuration. | |
123 | ||
f141fe0f MW |
124 | echo -n "Installing dotfile configuration:" |
125 | if [ -f $HOME$sub/.mdw.conf ]; then | |
126 | echo " already installed." | |
127 | else | |
128 | cp mdw.conf $HOME$sub/.mdw.conf | |
129 | echo " done." | |
130 | fi | |
131 | ||
ce178f96 | 132 | ## Symlink the various dotfiles into place |
852cd5fb | 133 | dotfiles=" |
abefe8f6 MW |
134 | bash-profile:.bash_profile bash-logout:.bash_logout |
135 | bash-completion:.bash_completion bashrc inputrc | |
54896c4f | 136 | emacs emacs-calc vm gnus.el ercrc.el |
d8070b21 | 137 | vimrc mg zile lesskey sqliterc |
bb65ad08 | 138 | parallel-config:.parallel/config |
1344a0a4 | 139 | ipython-config.py:.ipython/profile_default/ipython_config.py |
bff12eb1 | 140 | ipython-key-bindings.py:.ipython/profile_default/startup/50-key-bindings.py |
30169591 | 141 | ditz-config |
ce39049e | 142 | mailrc signature muttrc |
ce178f96 | 143 | cgrc tigrc |
e7d23024 | 144 | gdbinit |
8a7e906d | 145 | guile |
1d89ce86 | 146 | rcrc |
5d25e440 | 147 | toprc |
a6a6806a | 148 | mc-ini:.mc/ini mc-panels.ini:.mc/panels.ini |
f56d38cd | 149 | pulse-daemon.conf:.pulse/daemon.conf |
cbffcf2b | 150 | aspell.conf |
78719982 | 151 | tclshrc:.tclshrc tclshrc:.wishrc |
ccaac00b MW |
152 | lisp-init.lisp:.cmucl-init.lisp |
153 | lisp-init.lisp:.sbclrc | |
154 | lisp-init.lisp:.clisprc.lisp | |
f6335a0c | 155 | lisp-init.lisp:.eclrc |
b5bf3445 | 156 | swank.lisp |
5a91acc5 | 157 | mdw-build.conf:.config/mdw-build.conf |
3ec64a11 | 158 | w3m-config:.w3m/config elinks.conf:.elinks/elinks.conf |
4d60a7ac | 159 | dircolors colordiffrc screenrc tmux.conf cvsrc indent.pro" |
739bccbf | 160 | [ "$xstuff" ] && dotfiles="$dotfiles |
f7cb5c84 | 161 | xinitrc xsession xmodmap vncrc vncsession |
5e23020b | 162 | fonts.conf |
e517857c | 163 | stalonetrayrc |
1c6b19d4 | 164 | putty-defaults:.putty/sessions/Default%20Settings |
2e60c7f3 | 165 | mdw.session:.config/gnome-session/sessions/mdw.session |
7cfa1f1a | 166 | eterm-theme.cfg:.Eterm/themes/Eterm/theme.cfg |
739bccbf | 167 | e-keybindings.cfg:.enlightenment/keybindings.cfg |
eae29a8c | 168 | evnc-keybindings.cfg:.enlightenment-vnc/keybindings.cfg |
e8aee51b MW |
169 | e16-bindings:.e16/bindings.cfg |
170 | gtkrc-2.0 | |
171 | gtk3.css:.config/gtk-3.0/gtk.css | |
172 | gtk3-settings.ini:.config/gtk-3.0/settings.ini" | |
f617db13 MW |
173 | echo "Installing dotfiles..." |
174 | for d in $dotfiles; do | |
739bccbf MW |
175 | target=.$d |
176 | case $d in | |
177 | *:*) target=${d#*:} d=${d%%:*};; | |
178 | esac | |
179 | ft=$HOME$sub/$target | |
180 | dir=${ft%/*} | |
181 | mkdir -p $dir | |
99063107 | 182 | ln -s $here/dot/$d $ft.new |
739bccbf MW |
183 | mv $ft.new $ft |
184 | echo " $target" | |
f617db13 | 185 | done |
852cd5fb | 186 | echo " all done." |
f617db13 | 187 | |
f7cb5c84 MW |
188 | ## CPP-hack files which need it. |
189 | cppfiles="" | |
190 | [ "$xstuff" ] && cppfiles="$cppfiles | |
191 | Xdefaults" | |
192 | echo "Hacking files with C preprocessor..." | |
c7203018 | 193 | defs="-DHOME=$HOME -DPROFILE=$here" |
a1c9c51e | 194 | defs="$defs -DEMACSWD=$(bin/mdw-conf emacs-width 77)" |
f7cb5c84 MW |
195 | for c in $cppfiles; do |
196 | target=.$c | |
197 | case $c in | |
198 | *:*) target=${c#*:} c=${c%%:*};; | |
199 | esac | |
200 | ft=$HOME$sub/$target | |
201 | dir=${ft%/*} | |
202 | mkdir -p $dir | |
c7203018 | 203 | cpp -P $defs dot/$c -o $ft.new |
f7cb5c84 MW |
204 | mv $ft.new $ft |
205 | echo " $target" | |
206 | done | |
207 | echo " all done." | |
208 | ||
403dc178 MW |
209 | ## Substitute things which need substituting. |
210 | dotfilessubst=" | |
211 | gitconfig | |
8508a859 | 212 | mykermrc |
403dc178 MW |
213 | pulse-default.pa.in:.pulse/default.pa" |
214 | echo "Installing dotfiles with substitutions..." | |
215 | for d in $dotfilessubst; do | |
216 | case $d in | |
217 | *:*) target=${d#*:} d=${d%%:*};; | |
218 | *) target=.$d d=$d.in;; | |
219 | esac | |
220 | ft=$HOME$sub/$target | |
221 | dir=${ft%/*} | |
222 | mkdir -p $dir | |
223 | sed " | |
2b5d4580 MW |
224 | 1i\\ |
225 | ### generated by $here/setup; do not edit!\\ | |
403dc178 MW |
226 | |
227 | /@home@/ s\a\a$HOME\ag | |
73165cde | 228 | /@profile@/ s\a\a$here\ag |
bf674ae1 | 229 | /@releasekey@/ s\a\a$(bin/mdw-conf releasekey 481334C2)\ag |
403dc178 MW |
230 | " dot/$d >$ft.new |
231 | mv $ft.new $ft | |
232 | echo " $target" | |
233 | done | |
234 | echo " all done." | |
235 | ||
f4e43257 | 236 | ## Symlink backgrounds. |
b8d76a42 | 237 | backgrounds=$(cd bg && echo *) |
f4e43257 MW |
238 | if [ "$xstuff" ]; then |
239 | echo "Installing backgrounds..." | |
240 | for b in $backgrounds; do | |
241 | for e in enlightenment e16; do | |
242 | dir=$HOME$sub/.$e/backgrounds | |
243 | t=$dir/$b | |
244 | mkdir -p $dir | |
99063107 | 245 | ln -s $here/bg/$b $t.new |
f4e43257 MW |
246 | mv $t.new $t |
247 | done | |
248 | echo " $b" | |
249 | done | |
250 | echo " all done." | |
251 | fi | |
252 | ||
ce178f96 MW |
253 | ###-------------------------------------------------------------------------- |
254 | ### Install useful scripts included in this package. | |
255 | ||
e04c4857 | 256 | scripts=" |
547fb8af | 257 | mdw-editor |
b20bfd83 | 258 | mdw-pager |
b056f5c4 | 259 | mdw-conf |
b94830d9 | 260 | mdw-build mdw-sbuild mdw-sbuild-server |
5f56828b | 261 | update-buildable-branch |
c4e84cb1 | 262 | emacsclient-hack |
8e08f814 | 263 | movemail-hack |
aaa2d943 | 264 | sendmail-hack |
68b2e9e6 | 265 | aspell-hack |
285a1386 MW |
266 | emerge-hack |
267 | lesspipe.sh | |
6a5170a8 | 268 | run-with-shell-env |
285a1386 | 269 | start-ssh-agent |
6a5170a8 | 270 | start-ssh-pageant |
6ffd4490 | 271 | add-ssh-keys |
4cdeb0d0 | 272 | svnwrap |
73bb9001 | 273 | guest-console |
4cdeb0d0 | 274 | hyperspec" |
8e08f814 | 275 | [ "$xstuff" ] && scripts="$scripts |
3bdada49 | 276 | xinitcmd |
34a5ea4e | 277 | un-backslashify-selection |
c02999e8 | 278 | lock-screen |
b7743290 | 279 | xpra-start-xdummy |
8e08f814 | 280 | xshutdown" |
e04c4857 MW |
281 | echo "Installing scripts..." |
282 | mkdir -p $HOME$sub/bin | |
283 | for s in $scripts; do | |
284 | ft=$HOME$sub/bin/$s | |
99063107 | 285 | ln -s $here/bin/$s $ft.new |
e04c4857 MW |
286 | mv $ft.new $ft |
287 | echo " $s" | |
288 | done | |
289 | echo " all done." | |
290 | ||
4d7d040b MW |
291 | hacks=" |
292 | ssh:ssh" | |
293 | echo "Installing hacks..." | |
294 | for h in $hacks; do | |
295 | d=${h%%:*} h=${h#*:} | |
296 | ft=$HOME$sub/bin/hacks/$d | |
297 | mkdir -p $ft | |
298 | ln -s $here/hacks/$h $ft/$h.new | |
299 | mv $ft/$h.new $ft/$h | |
300 | echo " $d:$h" | |
301 | done | |
302 | echo " all done." | |
303 | ||
ce178f96 MW |
304 | ###-------------------------------------------------------------------------- |
305 | ### Set up the Emacs config. | |
306 | ||
65ff0e8c MW |
307 | $echon "Finding a suitable emacs:$echoc" |
308 | emacs=no | |
936b7279 | 309 | for i in emacs24 emacs23 emacs22 emacs21 emacs; do |
65ff0e8c MW |
310 | if type -p >/dev/null $i; then |
311 | emacs=$i | |
312 | break | |
313 | fi | |
314 | done | |
315 | if [ $emacs = no ]; then | |
316 | echo " failed." | |
317 | emacs=: | |
318 | else | |
319 | echo " $emacs." | |
320 | fi | |
321 | ||
f617db13 | 322 | echo "Installing Emacs packages..." |
400223a1 MW |
323 | emacspkg=" |
324 | make-regexp | |
a1293ade | 325 | ew-hols |
a3bdb4d9 | 326 | mdw-gnus-patch |
1778b496 | 327 | git git-blame vc-git stgit |
c6fe19d5 | 328 | mdw-multiple-cursors |
400223a1 MW |
329 | quilt" |
330 | for elib in $emacspkg; do | |
f617db13 | 331 | $echon " $elib:$echoc" |
65ff0e8c | 332 | if $false $emacs >/dev/null 2>&1 --no-site-file --batch --eval ' |
20eb0692 | 333 | (progn |
852cd5fb MW |
334 | (setq load-path (nconc load-path (list "~/lib/emacs"))) |
335 | (kill-emacs (condition-case nil | |
336 | (progn (load-library "'"$elib"'") 0) | |
20eb0692 | 337 | (error 1))))'; then |
f617db13 MW |
338 | echo " already installed." |
339 | else | |
99063107 MW |
340 | if [ -f el/$elib.el ]; then |
341 | cp el/$elib.el $HOME$sub/lib/emacs/$elib.el | |
a3bdb4d9 MW |
342 | else |
343 | $echon " downloading$echoc" | |
344 | $GETURL $HOME$sub/lib/emacs/$elib.el $REPO/$elib.el | |
345 | fi | |
f617db13 MW |
346 | $echon " compiling$echoc" |
347 | (cd $HOME$sub/lib/emacs; | |
65ff0e8c | 348 | $emacs >/dev/null 2>&1 --no-site-file --batch \ |
20eb0692 | 349 | --eval '(byte-compile-file "'"$elib.el"'")') |
f617db13 MW |
350 | echo " done." |
351 | fi | |
352 | done | |
852cd5fb | 353 | echo " all done." |
f617db13 MW |
354 | |
355 | $echon "Setting up Emacs configuration:$echoc" | |
356 | $echon " linking$echoc" | |
99063107 | 357 | for f in dot-emacs.el Makefile; do |
f617db13 | 358 | set -- $(echo $link | tr : ' ') |
99063107 MW |
359 | ln -s $here/el/$f $HOME$sub/lib/emacs/$f.new |
360 | mv $HOME$sub/lib/emacs/$f.new $HOME$sub/lib/emacs/$f | |
f617db13 MW |
361 | done |
362 | $echon " compiling$echoc" | |
c39d1139 | 363 | { cd $HOME$sub/lib/emacs && make EMACS=$emacs; } >/dev/null 2>&1 |
f617db13 | 364 | echo " done." |
ce178f96 MW |
365 | |
366 | ###----- That's all, folks -------------------------------------------------- |