X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/abefe8f6ac72bff56eec5e368a549850af9580d5..807c317e99426f8379fc55fc4d4bc98e67ec0f41:/dot/bash-profile diff --git a/dot/bash-profile b/dot/bash-profile index 3e84154..7aaf148 100644 --- a/dot/bash-profile +++ b/dot/bash-profile @@ -1,302 +1,15 @@ ### -*-bash-*- ### -### Bash startup things +### Bash startup things. -## The `.bashrc' hook will run us if it thinks we haven't been run before. -## We should therefore let it know. -export __mdw_profile=done +## Do the common shell profile things. +. "$HOME/.profile" -###-------------------------------------------------------------------------- -### Utility functions. - -## __mdw_addto VAR DIR PATH ... -## -## VAR is the name of a PATH-like environment variable (i.e., one which -## contains a sequence of pathnames separated by colons). DIR is either `l' -## or `r'. The PATHs are pathnames. Those PATHs which correspond to -## existing directories but which aren't currently named in the variable are -## added to the left or right (depending on DIR) of VAR. The relative order -## of PATHs added in the same invokation is the same as the order they -## appeared in PATHs: the DIR argument only affects which end of the VAR they -## get added to. -__mdw_addto () { - local var=$1 val dir=$2 new="" change=nil - eval "val=\$$var" - shift 2 - for i in "$@"; do - case "$new:" in *:$i:*) continue;; esac - [ -d $i ] || continue - case "X$val" in - X) val=$i change=t continue ;; - X$i) continue ;; - X*:$i:*) val=`echo $val | sed -e "s=:$i:=:="` ;; - X$i:*) val=${val#$i:} ;; - X*:$i) val=${val%:$i} ;; - esac - new=$new:$i change=t - done - case $dir in - l) val=${new#:}:$val ;; - r) val=$val$new ;; - esac - case $change in t) export $var="$val" ;; esac -} - -## __mdw_programp NAME -## -## Does NAME exist as an executable program? -__mdw_programp () { type -t >/dev/null "$1"; } - -###-------------------------------------------------------------------------- -### Other preliminaries. - -## Work out my home directory. -## -## This horrible trick resolves symbolic links. It enables resolving links, -## changes directory and displays the name of the directory in a subshell to -## avoid changing the current state. -HOME=`(set -P; cd $HOME; pwd)` -[ -n "$SCHROOT_SESSION_ID" ] || cd $HOME - -## CDE's session structure is demented and doesn't leave us with a proper -## logout hook, so synthesize one here. -[ -n "$DT" ] && trap "source $HOME/.bash_logout" EXIT - -###-------------------------------------------------------------------------- -### Set some basic paths. - -## The main path. -__mdw_addto PATH l \ - $HOME/bin \ - {/usr{/local,}{,/X11R6},}{/bin,/sbin,/games} \ - /opt/nfast{,/gcc}{/bin,/sbin} \ - $HOME/src/ncipher/scripts - -## If we have Plan 9 from User Space, then add that in. -if [ -d /usr/local/plan9 ]; then - export PLAN9=/usr/local/plan9 - __mdw_addto PATH r \ - $PLAN9/bin -fi - -## Search for `info' documents. -__mdw_addto INFOPATH r \ - $HOME/info \ - /usr/info /usr/share/info \ - /usr/local/info /usr/local/share/info \ - /usr/local/share/info/its - -## Script libraries. -__mdw_addto PERLLIB r $HOME/lib/perl -__mdw_addto PYTHONPATH r $HOME/lib/python - -###-------------------------------------------------------------------------- -### Various other kinds of configuration. - -__mdw_setconf () { - if val=$(mdw-conf 2>/dev/null "$2"); then - eval "export $1=\$val" - fi -} - -## Establish a temporary directory. -[ "$TMPDIR" ] || eval `tmpdir -b` -export TMP=$TMPDIR - -## Sensible umask if users have their own groups. -umask 002 - -## Mail and general identification. -__mdw_setconf MAIL mailbox -export NAME="Mark Wooding" -__mdw_setconf EMAIL email -export QMAILINJECT=c - -## Some programs want to know the hostname. -[ -z "$HOST" ] && export HOST=`hostname` - -## Text editor configuration. -export MDW_EDITOR=ed -emacs_startup_args="--no-site-file --mdw-fast-startup -nw" -for ed in \ - "emacs23 $emacs_startup_args" \ - "emacs24 $emacs_startup_args" \ - "emacs22 $emacs_startup_args" \ - "emacs21 $emacs_startup_args" \ - zile mg \ - "emacs -nw" \ - vi pico nano ae; do - name=`echo $ed | sed 's/ .*$//'` - if __mdw_programp "$name"; then - MDW_EDITOR=$ed - break - fi -done -export EDITOR=mdw-editor VISUAL=mdw-editor - -## Determine the locale settings. Really don't set LC_COLLATE because it -## messes with the order of files in `ls' listings and similar. -if [ "$DISPLAY" != "" ]; then - LANG=`mdw-conf x-ctype POSIX` -else - : ${LANG=${LC_CTYPE-${LC_ALL-`mdw-conf console-ctype POSIX`}}} - case "$TERM,`tty`" in - linux,/dev/tty*) - if { vt-is-UTF8 || - kbd_mode | grep UTF-8; } >/dev/null 2>&1; then - ctype=.utf8 - else - ctype= - fi - LANG=${LANG%.*}$ctype - ;; - esac -fi -unset LC_ALL -export LC_COLLATE=POSIX LANG - -## Pager configuration. -export MDW_PAGER=`type -p less` PAGER=mdw-pager METAMAIL_PAGER=mdw-pager -export LESS="-iqgRh1j.3FSX" -export LESSOPEN="|lesspipe.sh %s" -case "${LC_CTYPE-$LANG}" in - *utf8 | *utf-8 | *UTF8 | *UTF-8) LESSCHARSET=utf-8 ;; - *) LESSCHARSET=latin1 ;; -esac -export LESSCHARSET -__mdw_programp global && export LESSGLOBALTAGS=global - -## HTTP and FTP proxies. -http=`mdw-conf http-proxy none` -case "${http_proxy-none},$http" in - *,none) ;; - none,*) export http_proxy=http://$http/ ;; +## Bash-specific hack: if we haven't run the `.bashrc' yet, and this shell is +## interactive, then run it now. +case ${__mdw_bashrc+t} in + t) ;; + *) if [ -t 0 ] && [ -r "$HOME/.bashrc" ]; then . "$HOME/.bashrc"; fi ;; esac -ftp=`mdw-conf ftp-proxy none` -case "${ftp_proxy-none},$ftp,${http_proxy-none}" in - *,none,none) ;; - none,none,*) export ftp_proxy=$http_proxy ;; - none,*,*) export ftp_proxy=http://$ftp/ ;; -esac - -## Ncurses programs should use the Unicode box-drawing characters because the -## alternative character set stuff isn't supported well. -export NCURSES_NO_UTF8_ACS=1 - -## Shut up Perl's readline machinery. -export PERL_READLINE_NOWARN=yes - -## If we have `distcc' then tell `ccache' to use it. -__mdw_programp distcc && export CCACHE_PREFIX=distcc - -## Choose a sensible web browser. If we have a display, try to pick a -## graphical one. -browsers="elinks w3m lynx" -case "${DISPLAY+t}" in - t) browsers="mdw-iceweasel mdw-chrome iceweasel firefox $browsers" ;; -esac -for i in $browsers; do - if __mdw_programp $i; then - export BROWSER=$i - break - fi -done -unset browsers - -## Acquiring root privileges. This is mainly the job of `bashrc', but we -## cache the mechanism here. -__mdw_setconf __MDW_ROOTLY rootly -export BECOME="--preserve-environment" - -## It's useful to see the little sigils in `ls'. -[ -z "$LS_OPTIONS" ] && export LS_OPTIONS="-F" - -## Settings for BBC BASIC listing. -export BASCAT="-l +n" - -## Version control hacking. -export CVS_RSH=ssh -__mdw_setconf CVSROOT cvs-root -__mdw_setconf SVNROOT svn-root -export P4CONFIG=.p4 - -## News server. -__mdw_setconf NNTPSERVER nntp-server - -## Help X programs find their resources. -export XUSERFILESEARCHPATH="$HOME/.Xapps/%N:/usr/lib/X11/%T/%N%S" - -## Make OpenOffice.org do its thing properly. -export OOO_FORCE_DESKTOP=gnome - -## Hack Qt-ish things to be unstoatly. -export QT_STYLE_OVERRIDE=gtk2 - -## Configure `ps'. -export PS_PERSONALITY=gnu - -## Disable core dumps. -ulimit -S -c 0 - -###-------------------------------------------------------------------------- -### Authentication and SSH hacking. - -## Start an authentication agent. This is unnecessarily fiddly. If there's -## a Gnome keyring server then we should use that; unfortunately, it may not -## yet have had a chance to populate the environment with its settings, so we -## go off and fetch them. -if { { [ "$GNOME_KEYRING_CONTROL" ] && - [ -s "$GNOME_KEYRING_CONTROL" ]; } || - { [ "$DBUS_SESSION_BUS_ADDRESS" ] && - __mdw_programp gnome-keyring-daemon; }; } && - stuff=$(gnome-keyring-daemon -s -c gpg 2>/dev/null) -then - eval "$stuff" - export SSH_AUTH_SOCK GPG_AGENT_INFO -fi - -## If we still don't have an agent then start one with a stable name. -eval `start-ssh-agent -b` - -## Decide whether this session should be considered `secure'. A session is -## secure if it's on a secure TTY, but there are lots of ways of finding out -## which TTYs are secure. -if [ -z "$__mdw_bashrc" ] && [ "$__mdw_force_secure_session" = "yes" ] || - ( tty="`tty`" devtty="(/dev/)?${tty#/dev/}" - { { { [ -e /etc/securetty ] && sectty=/etc/securetty; } || - { [ -e /etc/securettys ] && sectty=/etc/securettys; }; } && - egrep "$devtty" $sectty >/dev/null; } || - { [ -e /etc/default/login ] && - egrep "^CONSOLE=$devtty" /etc/default/login >/dev/null; } || - case "${tty#/dev/}" in - console|systty|tty[0-9]) true ;; - *) false ;; - esac ) -then - export __mdw_sechost="`hostname`" -fi - -## Start a passphrase pixie if there is one and it's not already running. -if pixie --version >/dev/null 2>&1; then - mkdir -p $HOME/.catacomb - pixie=${CATACOMB_PIXIE-$HOME/.catacomb/pixie} - if [ -S "$pixie" ] && pixie -C help >/dev/null 2>/dev/null; then - : - else - pixie -d 2>>$HOME/.catacomb/pixie.log - __mdw_started_pixie=yes - fi -fi - -###-------------------------------------------------------------------------- -### Finishing touches. - -## If there's a local hook then run it. -[ -f "$HOME/.profile-local" ] && . "$HOME/.profile-local" - -## If we haven't run the `.bashrc' yet, and this shell is interactive, then -## run it now. -[ -z "$__mdw_bashrc" ] && [ -t 0 ] && \ - [ -r $HOME/.bashrc ] && . $HOME/.bashrc ###----- That's all, folks --------------------------------------------------