# 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. function source_debug { if [ x$DEBUG != x ]; then echo $@ fi } source_debug "sourcing ~/.shell/env" # Use UTF-8 encoding in the terminal. LC_ALL=en_US.UTF-8 LANG=$LC_ALL export LC_ALL LANG # Use Vim as editor. EDITOR=vim export EDITOR # Set less as pager, its configuration is done through the .less file. PAGER=less export PAGER # Set colors for GNU ls (and zsh completions). This colors files normal (fi), # directories blue bold (di), symbolic links cyan (ln), named pipes normal # (pi), sockets normal (so), block devices normal (bd), character devices # normal (cd), orphaned links with red background (or), setuid (su) and setgid # (sg) files with yellow background, directories writable by others with blue # background (ow) and executables bold red (ex). # See `dircolors --print-database` for possible colors. LS_COLORS="no=00:fi=00:di=34;01:ln=36:pi=00:so=00:bd=00:cd=00:\ or=36;41:su=31;01;43:sg=31;01;43:ow=34;01;41:ex=31;01" 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. function 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 "finished sourcing ~/.shell/env" # vim: ft=sh