# Configuration file for environment related options for all shells. # Helper function to print debug information if $DEBUG is not empty. # # Doesn't fit perfectly in this file, but this is the best place to make it # available everywhere. source_debug() { if [ x$DEBUG != x ]; then echo $@ fi } source_debug ". ~/.shell/env" # Use UTF-8 encoding in the terminal. Don't use LC_ALL as it's used for # debugging purposes. Thanks to twb in Freenode/#screen (2009-10-02 10:25). LANG=en_US.UTF-8 export LANG # Add ~/bin and ~/.bin to PATH if available. if [ -d ~/bin ]; then PATH=~/bin:$PATH fi if [ -d ~/.bin ]; then PATH=~/.bin:$PATH fi # Use Vim as editor. EDITOR=vim export EDITOR # Set less as pager, its configuration is done through the .less file. PAGER=less export PAGER # Use ~/tmp as directory for temporary files if available to reduce security # problems on multi-user systems. if [ -O ~/tmp -a -d ~/tmp ]; then TMP=~/tmp TEMP=$TMP TMPDIR=$TMP export TMP TEMP TMPDIR fi # Set colors for GNU ls (and zsh completions). # See `dircolors --print-database` for possible colors. LS_COLORS='no=00' LS_COLORS=$LS_COLORS':fi=00' # normal files: normal LS_COLORS=$LS_COLORS':di=34;01' # directories: blue bold LS_COLORS=$LS_COLORS':ln=36' # symbolic links: cyan LS_COLORS=$LS_COLORS':pi=00' # named pipes: normal LS_COLORS=$LS_COLORS':so=00' # sockets: normal LS_COLORS=$LS_COLORS':bd=00' # block devices: normal LS_COLORS=$LS_COLORS':cd=00' # character devices: normal LS_COLORS=$LS_COLORS':or=36;41' # orphaned links: red background LS_COLORS=$LS_COLORS':su=31;01;43' # setuid files: yellow background LS_COLORS=$LS_COLORS':sg=31;01;43' # setgid files: yellow background LS_COLORS=$LS_COLORS':ow=34;01;41' # directories writable by others: blue background LS_COLORS=$LS_COLORS':ex=31;01' # executables: bold red export LS_COLORS # Set the same colors for non GNU ls, except for orphaned links which aren't # supported. LSCOLORS='ExgxxxxxBxxxxxBdBdExEb' # ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ # | | | | | | | | | | | # | | | | | | | | | | *- directory writable to others, without sticky bit # | | | | | | | | | *--- directory writable to others, with sticky bit # | | | | | | | | *----- executable with setgid bit set # | | | | | | | *------- executable with setuid bit set # | | | | | | *--------- character special # | | | | | *----------- block special # | | | | *------------- executable # | | | *--------------- pipe # | | *----------------- socket # | *------------------- symbolic link # *--------------------- directory export LSCOLORS # Sources a configuration file if it exists; loads a fallback .local file if # it doesn't. If the .local files doesn't exist nothing is sourced. # # $1: Path to directory where configuration files are located. # $2: Directory name in $1 where the non .local files are stored, can be # empty. If empty both configuration files (normal and .local) are stored # in $1. # $3: Base name of file in $2, for example "rc" or "env". # $4: Extension for $3, if this file doesn't exist "$1/$3.local" is sourced. # Can be empty, then no extension is used. # $5: Additional options, set to nolocal to prevent loading of "$1/$3.local" # if "$1/$2/$3.$4" doesn't exist. # # Example with the following directory/file structure, $os is Darwin and # $hostname is marvin. # # ~/.zsh # ~/.zsh/env # ~/.zsh/env.local # ~/.zsh/rc # ~/.zsh/rc.local # ~/.zsh/host/rc.marvin # ~/.zsh/os/rc.Darwin # # To load additional rc files from within ~/.zsh/rc use the following: # # source_config ~/.zsh os rc $os # loads os/rc.Darwin # source_config ~/.zsh host rc $hostname # loads host/rc.marvin # # To load additional env files from within ~/.zsh/env use the following (note # nolocal to prevent loading env.local two times if os and host files don't # exist): # # source_config zsh os env $os nolocal # loads os/rc.Darwin # source_config zsh host env $hostname # loads env.local # # By letting $4 empty normal configuration files can be sourced. A .local can # still be used. # # source_config zsh "" file # loads zsh/file if it exists # # Doesn't fit perfectly in this file, but this is the best place to make it # available everywhere. # # If DEBUG is set to a non empty value additional debug output is printed. source_config() { # Path to the file to source and its local counterpart. if [ x$4 != x ]; then source_file=$1/$2/$3.$4 # If $4 is empty don't append a trailing dot. This allows source_config() # to load normal configuration files. else source_file=$1/$2/$3 fi source_file_local=$1/$3.local # Additional debug output. source_debug "source_config(): checking if $source_file exists" source_debug "source_config(): checking if $source_file_local exists" # If the file does exist then source it. if [ -f $source_file ]; then source_debug "source_config(): -> sourcing $source_file" . $source_file # Otherwise load the .local file if it exists and .local files are # allowed. elif [ -f $source_file_local -a x$5 != xnolocal ]; then source_debug "source_config(): -> sourcing $source_file_local" . $source_file_local else source_debug "source_config(): -> neither exists" fi unset source_file source_file_local } source_debug ". ~/.shell/env (done)" # vim: ft=sh