-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathplugin-loader.plugin.zsh
81 lines (74 loc) · 2.19 KB
/
plugin-loader.plugin.zsh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
### Plugin Loader ###
# A bootstrap plugin manager in less then 100 lines based on mattmc3/zsh_unplugged.
# Dev Functions
## Update Checker
function _plugin-update-check {
local d u gitlcl gitrmt
for d in ${ZPLUGINDIR}/*/.git(/); do
gitlcl=$(git -C "${d:h}" rev-parse HEAD)
gitrmt=$(git -C "${d:h}" ls-remote origin HEAD | awk '{ print $1 }')
if [ "${gitlcl}" != "${gitrmt}" ] ; then
export u="${u} ${d:h}"
fi
done
echo ${u}
}
## Speed Up Plugins
function _plugin-speed-up {
for f in "${1}"/*.zsh{,-theme}(N); do
zrecompile -pq "${f}"
done
}
# User callable functions
## Clone Uninstalled Plugins
function plugin-clone {
local f plugdir initfile repo repos_source
repos_source=$(echo ${@} | cut -d ' ' -f1)
autoload -U zrecompile
for repo in $(echo ${@} | cut -d ' ' -f2-) ; do
plugdir=${ZPLUGINDIR}/${repo:t}
initfile=${plugdir}/${repo:t}.plugin.zsh
if [[ ! -d ${plugdir} ]]; then
echo "Cloning ${repo}..."
git clone -q --depth 1 --recursive --shallow-submodules "${repos_source}/${repo}" "${plugdir}"
[ "${ZPLUGSPEED}" = "true" ] && _plugin-speed-up
fi
if [[ ! -e ${initfile} ]]; then
local -a initfiles=(${plugdir}/*.plugin.{z,}sh(N) ${plugdir}/*.{z,}sh{-theme,}(N))
(( $#initfiles )) && ln -sf "${initfiles[1]}" "${initfile}"
fi
done
}
## Update Repositories, if need
function plugin-update {
local d f
autoload -U zrecompile
for d in $(_plugin-update-check) ; do
echo "Updating ${d:h:t}..."
git -C "$d:h" pull --ff --recurse-submodules --depth 1 --rebase --autostash
[ "${ZPLUGSPEED}" = "true" ] && _plugin-speed-up
done
}
## Load Plugins
function plugin-source {
local plugdir
for plugdir in ${@} ; do
[[ ${plugdir} = /* ]] || plugdir=${ZPLUGINDIR}/${plugdir}
fpath+=${plugdir}
local initfile=${plugdir}/${plugdir:t}.plugin.zsh
(( $+functions[zsh-defer] )) && zsh-defer . ${initfile} || . ${initfile}
done
}
## Manually Compile All Plugins
function plugin-compile {
if [ "${ZPLUGSPEED}" = "true" ] ; then
ZPLUGINDIR=${ZPLUGINDIR:-$HOME/.config/zsh/plugins}
autoload -U zrecompile
local f
for f in $ZPLUGINDIR/**/*.zsh{,-theme}(N); do
zrecompile -pq "$f"
done
else
echo '$ZPLUGSPEED is not set to "true", set to "true" this function'
fi
}