X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/f617db13b0685c674817a6c7c1d148da3c07081f..403dc17837643174f2ff25d1ae14a48ae37508c7:/setup diff --git a/setup b/setup index e262820..94dc65d 100755 --- a/setup +++ b/setup @@ -1,17 +1,22 @@ -#! /bin/sh +#! /bin/bash set -e +###-------------------------------------------------------------------------- +### Basic setup. + umask 002 -sub= up=; +sub= mkdir -p $HOME$sub -: ${REPO=http://guvnor.distorted.org.uk/ftp/pub/mdw} +: ${REPO=http://ftp.distorted.org.uk/ftp/pub/mdw/profile} export PATH=/usr/local/bin:$HOME$sub/bin:/usr/bin:/usr/ccs/bin:/bin -### Sort out command line +###-------------------------------------------------------------------------- +### Sort out command line. + xstuff= false= while [ $# -gt 0 ]; do case "$1" in @@ -24,15 +29,13 @@ while [ $# -gt 0 ]; do shift done -### Find out where I am +###-------------------------------------------------------------------------- +### Environment autoconfiguration. + +## Find out where I am here=$(pwd) -case "$here" in - $HOME/*) ;; - *) echo >&2 "$0: must be below $HOME"; exit 1;; -esac -down=$(echo $here | sed "s#^$HOME/##") -### Suss out how to print things +## Suss out how to print things out=$(echo -n "foo"; echo "bar") if [ "$out" = "foobar" ]; then echon="echo -n" @@ -42,20 +45,7 @@ else echoc='\c' fi -### Create the necessary directories -echo "Creating directories..." -for i in bin lib/emacs src; do - $echon " $i:$echoc" - if [ -d $HOME$sub/$i ]; then - echo " already exists." - else - mkdir -p $HOME$sub/$i - echo " done." - fi -done -echo " all done." - -### Find out how to fetch things over the net +## Find out how to fetch things over the net $echon "Finding URL fetcher:$echoc" if curl >/dev/null 2>&1 --version || [ $? -eq 2 ]; then GETURL="curl -fs -o" @@ -69,43 +59,35 @@ else exit 1 fi -### Install necessary things -echo "Installing useful scripts..." +###-------------------------------------------------------------------------- +### Create the necessary directories. -for script in lesspipe.sh start-ssh-agent; do - $echon " $script:$echoc" - found= - for p in /bin /usr/bin /usr/local/bin $(echo $PATH | tr : ' '); do - if $false [ -x $p/$script ]; then - found=t - break - fi - done - if [ "$found" ]; then - echo " already installed." +echo "Creating directories..." +for i in bin lib/emacs src; do + $echon " $i:$echoc" + if [ -d $HOME$sub/$i ]; then + echo " already exists." else - $echon " downloading$echoc" - $GETURL $HOME$sub/bin/$script $REPO/$script - chmod +x $HOME$sub/bin/$script + mkdir -p $HOME$sub/$i echo " done." fi done +echo " all done." -echo " all done." +###-------------------------------------------------------------------------- +### Install some more complicated programs. -### Install some more complicated programs echo "Installing packages..." systems=" - mLib:2.0.3:mLib-config - chkpath:1.1.0:tmpdir + mlib:crc-mktab + checkpath:tmpdir " [ "$xstuff" ] && systems="$systems - mgLib:1.1.0:mgLib-config - xtoys:1.3.0:xscsize + xtoys:xatom " for system in $systems; do set -- $(echo $system | tr : ' ') - sys=$1 ver=$2 prog=$3 + sys=$1 prog=$2 $echon " $sys:$echoc" if $false $prog >/dev/null 2>&1 --version; then echo " already installed." @@ -113,12 +95,13 @@ for system in $systems; do ( set -e $echon " downloading$echoc" cd $HOME$sub/src - rm -rf $sys-$ver.tar.gz $sys-$ver - $GETURL $sys-$ver.tar.gz $REPO/$sys-$ver.tar.gz + rm -rf $sys.tar.gz $sys-$ver + $GETURL $sys.tar.gz $REPO/$sys.tar.gz $echon " unpacking$echoc" - gzip -cd $sys-$ver.tar.gz | tar xf - + dir=$(gzip -cd $sys.tar.gz | tar tf - | head -1) + gzip -cd $sys.tar.gz | tar xf - $echon " configuring$echoc" - cd $sys-$ver + cd $dir mkdir build cd build ../configure --prefix=$HOME$sub >>buildlog 2>&1 @@ -130,55 +113,199 @@ for system in $systems; do ) fi done -echo " all done." +echo " all done." -### Symlink the various dotfiles into place -dotfiles=" - bash_profile bash_logout bashrc - emacs emacs-calc - vm mailrc - cmucl-init.lisp clisprc.lisp sbclrc - dircolors screenrc" -[ "$xstuff" ] && dotfiles="$dotfiles xinitrc xsession Xdefaults" -mkdir -p $HOME/test +###-------------------------------------------------------------------------- +### Install global configuration. + +echo -n "Installing dotfile configuration:" +if [ -f $HOME$sub/.mdw.conf ]; then + echo " already installed." +else + cp mdw.conf $HOME$sub/.mdw.conf + echo " done." +fi + +## Symlink the various dotfiles into place +dotfiles=" + bash_profile bash_logout bashrc inputrc bash_completion + emacs emacs-calc vm gnus.el + vimrc mg zile + mailrc signature + cgrc tigrc + gdbinit + guile + toprc + aspell.conf + lisp-init.lisp:.cmucl-init.lisp + lisp-init.lisp:.sbclrc + lisp-init.lisp:.clisprc.lisp + lisp-init.lisp:.eclrc + swank.lisp + dircolors colordiffrc screenrc cvsrc indent.pro" +[ "$xstuff" ] && dotfiles="$dotfiles + xinitrc xsession Xdefaults vncrc vncsession + fonts.conf + stalonetrayrc + putty-defaults:.putty/sessions/Default%20Settings + eterm-theme.cfg:.Eterm/themes/Eterm/theme.cfg + e-keybindings.cfg:.enlightenment/keybindings.cfg + evnc-keybindings.cfg:.enlightenment-vnc/keybindings.cfg + e16-bindings:.e16/bindings.cfg" echo "Installing dotfiles..." for d in $dotfiles; do - [ -f $d ] - rm -f "$HOME$sub/.$d" - ln -s $up$down/$d $HOME$sub/.$d - echo " .$d" + target=.$d + case $d in + *:*) target=${d#*:} d=${d%%:*};; + esac + ft=$HOME$sub/$target + dir=${ft%/*} + mkdir -p $dir + ln -s $here/dot/$d $ft.new + mv $ft.new $ft + echo " $target" +done +echo " all done." + +## Substitute things which need substituting. +dotfilessubst=" + gitconfig + pulse-default.pa.in:.pulse/default.pa" +echo "Installing dotfiles with substitutions..." +for d in $dotfilessubst; do + case $d in + *:*) target=${d#*:} d=${d%%:*};; + *) target=.$d d=$d.in;; + esac + ft=$HOME$sub/$target + dir=${ft%/*} + mkdir -p $dir + sed " +1i\ +### generated by $here/setup; do not edit!\ + +/@home@/ s$HOMEg +/@releasekey@/ s$(bin/mdw-conf release-key 481334C2)g +/@gitignore@/ s$(bin/mdw-conf gitignore $here/git/gitignore)g +" dot/$d >$ft.new + mv $ft.new $ft + echo " $target" done echo " all done." -### Set up the Emacs config +## Symlink backgrounds. +backgrounds=" + jue-peek.jpg + medusa.jpg + bsg-supper.jpg + rayne.jpg + hypatia.jpg + noodly.jpg + lovelace.jpg" +if [ "$xstuff" ]; then + echo "Installing backgrounds..." + for b in $backgrounds; do + for e in enlightenment e16; do + dir=$HOME$sub/.$e/backgrounds + t=$dir/$b + mkdir -p $dir + ln -s $here/bg/$b $t.new + mv $t.new $t + done + echo " $b" + done + echo " all done." +fi + +###-------------------------------------------------------------------------- +### Install useful scripts included in this package. + +scripts=" + mdw-editor + mdw-pager + mdw-conf + mdw-build + emacsclient-hack + movemail-hack + emerge-hack + lesspipe.sh + start-ssh-agent + svnwrap + hyperspec" +[ "$xstuff" ] && scripts="$scripts + xinitcmd + un-backslashify-selection + lock-screen + xshutdown" +echo "Installing scripts..." +mkdir -p $HOME$sub/bin +for s in $scripts; do + ft=$HOME$sub/bin/$s + ln -s $here/bin/$s $ft.new + mv $ft.new $ft + echo " $s" +done +echo " all done." + +###-------------------------------------------------------------------------- +### Set up the Emacs config. + +$echon "Finding a suitable emacs:$echoc" +emacs=no +for i in emacs22 emacs23 emacs21 emacs; do + if type -p >/dev/null $i; then + emacs=$i + break + fi +done +if [ $emacs = no ]; then + echo " failed." + emacs=: +else + echo " $emacs." +fi + echo "Installing Emacs packages..." -for elib in make-regexp; do +emacspkg=" + make-regexp + ew-hols + mdw-gnus-patch + git git-blame vc-git stgit + quilt" +for elib in $emacspkg; do $echon " $elib:$echoc" - if $false emacs >/dev/null 2>&1 --batch --eval ' - (kill-emacs (condition-case nil - (progn (load-library "make-regexp") 0) - (error 1)))'; then + if $false $emacs >/dev/null 2>&1 --no-site-file --batch --eval ' + (progn + (setq load-path (nconc load-path (list "~/lib/emacs"))) + (kill-emacs (condition-case nil + (progn (load-library "'"$elib"'") 0) + (error 1))))'; then echo " already installed." else - $echon " downloading$echoc" - $GETURL $HOME$sub/lib/emacs/make-regexp.el $REPO/make-regexp.el + if [ -f el/$elib.el ]; then + cp el/$elib.el $HOME$sub/lib/emacs/$elib.el + else + $echon " downloading$echoc" + $GETURL $HOME$sub/lib/emacs/$elib.el $REPO/$elib.el + fi $echon " compiling$echoc" (cd $HOME$sub/lib/emacs; - emacs >/dev/null 2>&1 --batch \ - --eval '(byte-compile-file "make-regexp.el")') + $emacs >/dev/null 2>&1 --no-site-file --batch \ + --eval '(byte-compile-file "'"$elib.el"'")') echo " done." fi done -echo " all done." +echo " all done." $echon "Setting up Emacs configuration:$echoc" $echon " linking$echoc" -for link in dot-emacs.el:dot-emacs.el emacs-Makefile:Makefile; do +for f in dot-emacs.el Makefile; do set -- $(echo $link | tr : ' ') - from=$1 to=$2 - rm -f $HOME$sub/lib/emacs/$to - ln -s ../../$up$down/$from $HOME$sub/lib/emacs/$to + ln -s $here/el/$f $HOME$sub/lib/emacs/$f.new + mv $HOME$sub/lib/emacs/$f.new $HOME$sub/lib/emacs/$f done $echon " compiling$echoc" -make >/dev/null 2>&1 -C $HOME$sub/lib/emacs +make >/dev/null 2>&1 -C $HOME$sub/lib/emacs EMACS=$emacs echo " done." + +###----- That's all, folks --------------------------------------------------