2017-12-05 22:39:10 -08:00
|
|
|
#!/usr/bin/env zsh
|
|
|
|
# env -- envvars & standard library for dotfiles; don't symlink me!
|
|
|
|
# Can be sourced by zsh/bash scripts
|
|
|
|
|
|
|
|
export XDG_CACHE_HOME=~/.cache
|
|
|
|
export XDG_CONFIG_HOME=~/.config
|
|
|
|
export XDG_DATA_HOME=~/.local/share
|
|
|
|
export XDG_BIN_HOME=~/.local/bin
|
|
|
|
|
|
|
|
export DOTFILES="$(cd $(dirname "${BASH_SOURCE:-${(%):-%x}}") && pwd -P)"
|
|
|
|
export DOTFILES_DATA="$XDG_DATA_HOME/dotfiles"
|
|
|
|
export DOTFILES_ASSETS="$DOTFILES/assets"
|
|
|
|
|
2017-12-30 15:40:45 -08:00
|
|
|
for dir in "$XDG_CACHE_HOME" "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_BIN_HOME" "$DOTFILES_DATA"; do
|
2017-12-05 22:39:10 -08:00
|
|
|
[[ -d $dir ]] || mkdir -p "$dir"
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
## Library
|
|
|
|
function _is_interactive { [[ $- == *i* ]]; }
|
|
|
|
|
|
|
|
function _is_running {
|
|
|
|
for prc in "$@"; do
|
|
|
|
pgrep -x "$prc" >/dev/null || return 1
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function _is_callable {
|
|
|
|
for cmd in "$@"; do
|
|
|
|
command -v "$cmd" >/dev/null || return 1
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function _source {
|
|
|
|
[[ -f $1 ]] && source "$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
function _load {
|
|
|
|
case $1 in
|
|
|
|
/*) source "$1" ;;
|
|
|
|
*) source "$DOTFILES/$1" ;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
function _load_all {
|
|
|
|
for file in "$DOTFILES_DATA"/*.topic/"$1"; do
|
|
|
|
[[ -e $file ]] && source "$file"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function _load_repo {
|
|
|
|
_ensure_repo "$1" "$2" && source "$2/$3" || >&2 echo "Failed to load $1"
|
|
|
|
}
|
|
|
|
|
|
|
|
function _ensure_repo {
|
|
|
|
local target=$1
|
|
|
|
local dest=$2
|
|
|
|
if [[ ! -d $dest ]]; then
|
|
|
|
if [[ $target =~ "^[^/]+/[^/]+$" ]]; then
|
|
|
|
url=https://github.com/$target
|
|
|
|
elif [[ $target =~ "^[^/]+$" ]]; then
|
|
|
|
url=git@github.com:$USER/$target.git
|
|
|
|
fi
|
|
|
|
[[ ${dest%/*} ]] && mkdir -p ${dest%/*}
|
|
|
|
git clone --recursive "$url" "$dest" || return 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function _os {
|
|
|
|
case $OSTYPE in
|
|
|
|
linux*) if [[ -f /etc/arch-release ]]; then echo arch
|
|
|
|
elif [[ -f /etc/debian_version ]]; then echo debian
|
|
|
|
fi ;;
|
|
|
|
darwin*) echo macos ;;
|
|
|
|
cygwin*) echo cygwin ;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
function _cache {
|
|
|
|
_is_interactive || return 1
|
|
|
|
local cache_dir="$XDG_CACHE_HOME/${SHELL##*/}"
|
|
|
|
local cache="$cache_dir/$1"
|
|
|
|
if [[ ! -f $cache || ! -s $cache ]]; then
|
|
|
|
echo "Caching $1"
|
|
|
|
mkdir -p $cache_dir
|
|
|
|
"$@" >$cache
|
|
|
|
fi
|
|
|
|
source $cache
|
|
|
|
}
|
|
|
|
|
|
|
|
function _cache_clear {
|
|
|
|
command rm -rfv $XDG_CACHE_HOME/${SHELL##*/}/*;
|
|
|
|
}
|