X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/1b9c276c3efe53818772087cbf3f696682125574..228374502b83afd5a84952bf017f42a10fc8ef28:/dot/bash_profile diff --git a/dot/bash_profile b/dot/bash_profile index 513f754..d61a7c3 100644 --- a/dot/bash_profile +++ b/dot/bash_profile @@ -1,23 +1,24 @@ -# -*-sh-*- -# -# Bash startup things -# - -if [ -z "$__mdw_profile" ]; then +### -*-bash-*- +### +### 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 -# --- 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)` -cd $HOME - -# --- Add elements to a path string --- - +###-------------------------------------------------------------------------- +### 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" @@ -26,69 +27,89 @@ __mdw_addto () { 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} - ;; + 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;; + l) val=${new#:}:$val ;; + r) val=$val$new ;; esac case $change in t) export $var="$val" ;; esac } -# --- Set the path variable --- +## __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)` +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} \ + {/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 -# --- Find whether a program exists --- +## 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 -__mdw_programp () { type -t >/dev/null "$1"; } +## Script libraries. +__mdw_addto PERLLIB r $HOME/lib/perl +__mdw_addto PYTHONPATH r $HOME/lib/python -# --- And the same for manual pages --- +###-------------------------------------------------------------------------- +### Various other kinds of configuration. -case "$MACHTIME" in - *linux*) - MANPATH=`manpath -q` - ;; -esac -__mdw_addto MANPATH l \ - {/usr{,/local}{,/X11R6}{,/share}}/{man,catman} \ - $HOME/man +## Establish a temporary directory. +[ "$TMPDIR" ] || eval `tmpdir -b` +export TMP=$TMPDIR -# --- Where my mail comes from --- +## Sensible umask if users have their own groups. +umask 002 +## Mail and general identification. export MAIL=`mdw-conf mailbox` export NAME="Mark Wooding" export EMAIL=`mdw-conf email` export QMAILINJECT=c -# --- Find a text editor --- +## 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 \ @@ -103,22 +124,18 @@ for ed in \ break fi done - export EDITOR=mdw-editor VISUAL=mdw-editor -# --- Various options for programs --- - -umask 002 - -[ -z "$HOST" ] && export HOST=`hostname` - +## 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` else : ${LANG=${LC_CTYPE-${LC_ALL-`mdw-conf console-ctype`}}} case "$TERM,`tty`" in linux,/dev/tty*) - if vt-is-UTF8 >/dev/null 2>&1; then + if { vt-is-UTF8 || + kbd_mode | grep UTF-8; } >/dev/null 2>&1; then ctype=.utf8 else ctype= @@ -130,33 +147,9 @@ fi unset LC_ALL export LC_COLLATE=POSIX LANG -__mdw_programp distcc && export CCACHE_PREFIX=distcc - -export TEXINPUTS=".:$HOME/lib/tex//:" - -__mdw_addto INFOPATH r \ - $HOME/info \ - /usr/info /usr/share/info \ - /usr/local/info /usr/local/share/info \ - /usr/local/share/info/its -__mdw_addto PERLLIB r $HOME/lib/perl -__mdw_addto PYTHONPATH r $HOME/lib/python - -export __MDW_ROOTLY=`mdw-conf rootly` - -[ -z "$LS_OPTIONS" ] && export LS_OPTIONS="-F" - -export BASCAT="-l +n" - -export CVS_RSH=ssh -export CVSROOT=`mdw-conf cvs-root` -export SVNROOT=`mdw-conf svn-root` -export P4CONFIG=.p4 - -export BECOME="--preserve-environment" - +## Pager configuration. export MDW_PAGER=`type -p less` PAGER=mdw-pager METAMAIL_PAGER=mdw-pager -export LESS="-iqgRh1FX" +export LESS="-iqgRh1FSX" export LESSOPEN="|lesspipe.sh %s" case "${LC_CTYPE-$LANG}" in *utf8 | *utf-8 | *UTF8 | *UTF-8) LESSCHARSET=utf-8 ;; @@ -164,14 +157,8 @@ case "${LC_CTYPE-$LANG}" in esac export LESSCHARSET __mdw_programp global && export LESSGLOBALTAGS=global -export NCURSES_NO_UTF8_ACS=1 -# export MAKEFLAGS="-j4" -[ "$TMPDIR" ] || eval `tmpdir -b` -export TMP=$TMPDIR -export PERL_READLINE_NOWARN=yes - -[ -z "$NNTPSERVER" ] && export NNTPSERVER=`mdw-conf nntp-server` +## HTTP and FTP proxies. http=`mdw-conf http-proxy none` case "${http_proxy-none},$http" in *,none) ;; @@ -184,22 +171,87 @@ case "${ftp_proxy-none},$ftp,${http_proxy-none}" in 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-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. +export __MDW_ROOTLY=`mdw-conf 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 +export CVSROOT=`mdw-conf cvs-root` +export SVNROOT=`mdw-conf svn-root` +export P4CONFIG=.p4 + +## News server. +[ -z "$NNTPSERVER" ] && export NNTPSERVER=`mdw-conf 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 +## Configure `ps'. export PS_PERSONALITY=gnu -export NC_SITES=cam:bos - -# -- Disable core dumps --- - +## Disable core dumps. ulimit -S -c 0 -# --- Start an ssh authentication agent --- +###-------------------------------------------------------------------------- +### 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" ] && + dbus-send --session --print-reply --dest=org.freedesktop.DBus \ + / org.freedesktop.DBus.GetNameOwner string:org.gnome.keyring \ + >/dev/null 2>/dev/null; }; } && + stuff=$(gnome-keyring-daemon -s -c ssh 2>/dev/null) +then + eval "$stuff" + export SSH_AUTH_SOCK +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; } || @@ -215,10 +267,7 @@ then export __mdw_sechost="`hostname`" fi -[ -n "$DT" ] && trap "source $HOME/.bash_logout" EXIT - -# --- And a passphrase pixie --- - +## 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} @@ -230,13 +279,15 @@ if pixie --version >/dev/null 2>&1; then fi fi -[ -f "$HOME/.profile-local" ] && . "$HOME/.profile-local" - -fi +###-------------------------------------------------------------------------- +### Finishing touches. -# --- Now, if my .bashrc hasn't been run yet, run it --- -# -# Oh, don't do that if we don't have a terminal. +## 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 --------------------------------------------------