Created
August 10, 2015 22:29
-
-
Save petrosp/2b0d670e600acdb8ba47 to your computer and use it in GitHub Desktop.
Hack `prezto` to allow modularity
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Initializes Prezto. | |
# | |
# Authors: | |
# Sorin Ionescu <sorin.ionescu@gmail.com> | |
# | |
# | |
# Version Check | |
# | |
# Check for the minimum supported version. | |
min_zsh_version='4.3.17' | |
if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then | |
print "prezto: old shell detected, minimum required: $min_zsh_version" >&2 | |
return 1 | |
fi | |
unset min_zsh_version | |
# | |
# Module Loader | |
# | |
# Loads Prezto modules. | |
function pmodload { | |
local -a pmodules | |
local pmodule | |
local pfunction_glob='^([_.]*|prompt_*_setup|README*)(-.N:t)' | |
# $argv is overridden in the anonymous function. | |
pmodules=("$argv[@]") | |
# Add functions to $fpath. | |
fpath=(${pmodules:+${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions(/FN)} $fpath) | |
fpath=(${ZDOTDIRLOCAL}/modules/${^pmodules}/functions(/FN) $fpath) | |
function { | |
local pfunction | |
# Extended globbing is needed for listing autoloadable function directories. | |
setopt LOCAL_OPTIONS EXTENDED_GLOB | |
# Load Prezto functions. | |
for pfunction in\ | |
${ZDOTDIR:-$HOME}/.zprezto/modules/${^pmodules}/functions/$~pfunction_glob \ | |
${ZDOTDIR:-$HOME}.local/modules/${^pmodules}/functions/^([_.]*|README*)(.N:t) | |
do | |
autoload -Uz "$pfunction" | |
done | |
} | |
# Load Prezto modules. | |
for pmodule in "$pmodules[@]"; do | |
if zstyle -t ":prezto:module:local:$pmodule" loaded 'yes' 'no'; then | |
continue | |
elif zstyle -t ":prezto:module:$pmodule" loaded 'yes' 'no'; then | |
continue | |
elif [[ ! -d "${ZDOTDIRLOCAL}/modules/$pmodule" ]]; then | |
zstyle ":prezto:module:local:${pmodule}" loaded 'no' | |
if [[ ! -d "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule" ]]; then | |
print "$0: no such module: $pmodule" >&2 | |
continue | |
else | |
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" ]]; then | |
source "${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/init.zsh" | |
fi | |
fi | |
if (( $? == 0 )); then | |
zstyle ":prezto:module:$pmodule" loaded 'yes' | |
else | |
# Remove the $fpath entry. | |
fpath[(r)${ZDOTDIR:-$HOME}/.zprezto/modules/${pmodule}/functions]=() | |
function { | |
local pfunction | |
# Extended globbing is needed for listing autoloadable function | |
# directories. | |
setopt LOCAL_OPTIONS EXTENDED_GLOB | |
# Unload Prezto functions. | |
for pfunction in ${ZDOTDIR:-$HOME}/.zprezto/modules/$pmodule/functions/$~pfunction_glob; do | |
unfunction "$pfunction" | |
done | |
} | |
zstyle ":prezto:module:$pmodule" loaded 'no' | |
fi | |
elif [[ -s "${ZDOTDIRLOCAL}/modules/$pmodule/init.zsh" ]]; then | |
# try to source a local modules | |
zstyle ":prezto:module:$pmodule" loaded 'no' | |
source "${ZDOTDIRLOCAL}/modules/$pmodule/init.zsh" | |
if (( $? == 0 )); then | |
zstyle ":prezto:module:local:$pmodule" loaded 'yes' | |
if zstyle -t ":prezto:module:$pmodule" aliases; then | |
if [[ -s "${ZDOTDIRLOCAL}/modules/${^pmodules}/aliases.zsh" ]]; then | |
source "${ZDOTDIRLOCAL}/modules/$pmodule/aliases.zsh" | |
fi | |
fi | |
else | |
zstyle ":prezto:module:local:$pmodule" loaded 'no' | |
for dzfunction in \ | |
$ZDOTDIRLOCAL/modules/${^pmodule}/functions/^([_.]*|README*)(.N:t) | |
do | |
if (( $+functions[$pfunction] )); then | |
unfunction "$pfunction" | |
fi | |
done | |
# remove the fpath entry | |
fpath[(r)${ZDOTDIRLOCAL}/modules/${pmodule}/functions]=() | |
fi | |
else | |
zstyle ":prezto:module:local:${pmodule}" loaded 'no' | |
fi | |
done | |
} | |
# | |
# Prezto Initialization | |
# | |
# Source the Prezto configuration file. | |
if [[ -s "${ZDOTDIR:-$HOME}/.zpreztorc" ]]; then | |
source "${ZDOTDIR:-$HOME}/.zpreztorc" | |
fi | |
# Disable color and theme in dumb terminals. | |
if [[ "$TERM" == 'dumb' ]]; then | |
zstyle ':prezto:*:*' color 'no' | |
zstyle ':prezto:module:prompt' theme 'off' | |
fi | |
# Load Zsh modules. | |
zstyle -a ':prezto:load' zmodule 'zmodules' | |
for zmodule ("$zmodules[@]") zmodload "zsh/${(z)zmodule}" | |
unset zmodule{s,} | |
# Autoload Zsh functions. | |
zstyle -a ':prezto:load' zfunction 'zfunctions' | |
for zfunction ("$zfunctions[@]") autoload -Uz "$zfunction" | |
unset zfunction{s,} | |
# Load Prezto modules. | |
zstyle -a ':prezto:load' pmodule 'pmodules' | |
pmodload "$pmodules[@]" | |
unset pmodules |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Executes commands at the start of an interactive session. | |
# | |
# Authors: | |
# Sorin Ionescu <sorin.ionescu@gmail.com> | |
# | |
export ZDOTDIRLOCAL=$HOME/.zsh.local | |
# Source Prezto. | |
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then | |
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" | |
fi | |
# Customize to your needs... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment