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