X-Git-Url: https://ruderich.org/simon/gitweb/?p=config%2Fdotfiles.git;a=blobdiff_plain;f=shell%2Fenv;h=a7f7405049710bec78eae1bc0e25a7bc3a7743e2;hp=2d89b53416dbde019b6abc7939da8666c2e32c92;hb=0f76f93bd286c46d281a574a6db67e038b6d42a7;hpb=dbd35008dac79b1213e70d48e11b19920a2a54f7 diff --git a/shell/env b/shell/env index 2d89b53..a7f7405 100644 --- a/shell/env +++ b/shell/env @@ -20,3 +20,69 @@ export PAGER # 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:ex=31;01' export LS_COLORS + + +# 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. +# $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 +# +# Doesn't fit perfectly in this file, but this is the best place to make it +# available everywhere. +function source_config() { + # Path to the file to source and its local counterpart. + local source_file=$1/$2/$3.$4 + local source_file_local=$1/$3.local + + # Additional debug output. + if [ x$DEBUG != x ]; then + echo "source_config(): checking if $source_file exists" + echo "source_config(): checking if $source_file_local exists" + fi + + # If the file does exist then source it. + if [ -f $source_file ]; then + if [ x$DEBUG != x ]; then + echo "source_config(): sourcing $source_file" + fi + source $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 + if [ x$DEBUG != x ]; then + echo "source_config(): sourcing $source_file_local" + fi + source $source_file_local + fi +}