function remove_from_path() { local a local p local s local r eval "p=\$$1" a=( ${(s/:/)p} ) if [[ ${a[(i)${2}]} -gt ${#a} ]] && return for s in $a; do if [[ ! $s == $2 ]]; then [[ -z "$r" ]] && r=$s || r="$r:$s" fi done eval $1="$r" } function prepend_path() { [[ ! -d "$2" ]] && return local p remove_from_path "$1" "$2" eval "p=\$$1" eval export $1="$2:$p" } function append_path() { [[ ! -d "$2" ]] && return local p remove_from_path "$1" "$2" eval "p=\$$1" eval export $1="$p:$2" } export XDG_CONFIG_HOME="${HOME}/.config" export XDG_CACHE_HOME="${HOME}/.cache" export XDG_DATA_HOME="${HOME}/.local/share" export XDG_STATE_HOME="${HOME}/.local/state" export XDG_RUNTIME_DIR=/tmp export EDITOR=nvim export VISUAL=nvim export READER=mupdf export GOPATH="$HOME/go" export GOBIN="$GOPATH/bin" # OS-specific exports if [[ $(uname) == "Darwin" ]]; then export JAVA_HOME=$(/usr/libexec/java_home) export GEM_HOME=$HOME/.gem export GOROOT=$(brew --prefix golang)/libexec prepend_path PATH "/opt/homebrew/bin" prepend_path PATH "/opt/homebrew/opt/texlive/bin" append_path PATH $GEM_HOME/bin fi # Common Paths append_path PATH "/usr/sbin:/sbin" append_path PATH "$HOME/.local/share/nvim/mason/bin" append_path PATH "$HOME/.local/bin" append_path PATH "$HOME/go/bin" append_path PATH "$HOME/.ghcup/bin" append_path PATH "$HOME/.cabal/bin" append_path PATH "$HOME/.cargo/bin" for bindir in ~/opt/*/bin(N); do if [[ -d "$bindir" ]]; then prepend_path PATH "$bindir" fi done