Blame view
antigen.zsh
5.97 KB
|
e5dfac7ea
|
1 2 3 4 |
#!/bin/zsh # Each line in this string has the following entries separated by a space # character. |
|
a12d3140a
|
5 |
# <repo-url>, <plugin-location>, <bundle-type> |
|
e5dfac7ea
|
6 |
# FIXME: Is not kept local by zsh! |
|
9dc631003
|
7 |
local _ANTIGEN_BUNDLE_RECORD="" |
|
e5dfac7ea
|
8 9 |
# Syntaxes |
|
280ec4481
|
10 |
# bundle <url> [<loc>=/] |
|
e5dfac7ea
|
11 12 13 14 15 |
bundle () {
# Bundle spec arguments' default values.
local url="$ANTIGEN_DEFAULT_REPO_URL"
local loc=/
|
|
d535ba468
|
16 |
local btype=plugin |
|
e5dfac7ea
|
17 18 |
# Set spec values based on the positional arguments.
|
|
280ec4481
|
19 |
local position_args='url loc' |
|
e5dfac7ea
|
20 21 |
local i=1
while ! [[ -z $1 || $1 == --*=* ]]; do
|
|
43bb2cef1
|
22 23 |
local arg_name="$(echo "$position_args" | cut -d\ -f$i)"
local arg_value="$1"
|
|
e5dfac7ea
|
24 25 26 27 |
eval "local $arg_name='$arg_value'"
shift
i=$(($i + 1))
done
|
|
1abf1faf6
|
28 29 30 31 32 |
# Check if url is just the plugin name. Super short syntax.
if [[ "$url" != */* ]]; then
loc="plugins/$url"
url="$ANTIGEN_DEFAULT_REPO_URL"
fi
|
|
e5dfac7ea
|
33 34 35 |
# Set spec values from keyword arguments, if any. The remaining arguments
# are all assumed to be keyword arguments.
while [[ $1 == --*=* ]]; do
|
|
43bb2cef1
|
36 37 |
local arg_name="$(echo "$1" | cut -d= -f1 | sed 's/^--//')"
local arg_value="$(echo "$1" | cut -d= -f2)"
|
|
e5dfac7ea
|
38 39 40 41 42 43 |
eval "local $arg_name='$arg_value'"
shift
done
# Resolve the url.
if [[ $url != git://* && $url != https://* ]]; then
|
|
bb140864c
|
44 |
url="${url%.git}"
|
|
bb140864c
|
45 |
url="https://github.com/$url.git" |
|
e5dfac7ea
|
46 |
fi |
|
e5dfac7ea
|
47 |
# Add it to the record. |
|
a12d3140a
|
48 49 50 51 |
_ANTIGEN_BUNDLE_RECORD="$_ANTIGEN_BUNDLE_RECORD
$url $loc $btype"
-antigen-ensure-repo "$url"
|
|
e5dfac7ea
|
52 |
|
|
a12d3140a
|
53 |
bundle-load "$url" "$loc" "$btype" |
|
2ac7c0cb0
|
54 |
|
|
a12d3140a
|
55 |
} |
|
2ac7c0cb0
|
56 |
|
|
a12d3140a
|
57 58 59 60 61 62 63 64 65 |
-antigen-get-clone-dir () {
# Takes a repo url and gives out the path that this url needs to be cloned
# to. Doesn't actually clone anything.
# TODO: Memoize?
echo -n $ADOTDIR/repos/
echo "$1" | sed \
-e 's/\.git$//' \
-e 's./.-SLASH-.g' \
-e 's.:.-COLON-.g'
|
|
2ac7c0cb0
|
66 |
} |
|
0b32bec27
|
67 68 69 70 71 72 73 74 75 76 |
-antigen-get-clone-url () {
# Takes a repo's clone dir and gives out the repo's original url that was
# used to create the given directory path.
# TODO: Memoize?
echo "$1" | sed \
-e "s:^$ADOTDIR/repos/::" \
-e 's/$/.git/' \
-e 's.-SLASH-./.g' \
-e 's.-COLON-.:.g'
}
|
|
2ac7c0cb0
|
77 78 79 80 81 82 83 |
-antigen-ensure-repo () {
local update=false
if [[ $1 == --update ]]; then
update=true
shift
fi
|
|
2ac7c0cb0
|
84 |
local url="$1" |
|
a12d3140a
|
85 |
local clone_dir="$(-antigen-get-clone-dir $url)" |
|
2ac7c0cb0
|
86 |
|
|
aa510273d
|
87 88 89 90 |
if [[ ! -d $clone_dir ]]; then
git clone "$url" "$clone_dir"
elif $update; then
git --git-dir "$clone_dir/.git" pull
|
|
2ac7c0cb0
|
91 |
fi |
|
e5dfac7ea
|
92 |
} |
|
575a537db
|
93 94 95 96 97 98 |
bundle-update () {
# Update your bundles, i.e., `git pull` in all the plugin repos.
-bundle-echo-record | awk '{print $1}' | sort -u | while read url; do
-antigen-ensure-repo --update "$url"
done
}
|
|
e5dfac7ea
|
99 |
bundle-load () {
|
|
e5dfac7ea
|
100 |
|
|
a12d3140a
|
101 102 103 |
local url="$1"
local location="$(-antigen-get-clone-dir "$url")/$2"
local btype="$3"
|
|
e5dfac7ea
|
104 |
|
|
d535ba468
|
105 |
if [[ $btype == theme ]]; then |
|
e5dfac7ea
|
106 |
|
|
d535ba468
|
107 108 109 |
# Of course, if its a theme, the location would point to the script
# file.
source "$location"
|
|
e5dfac7ea
|
110 |
|
|
d535ba468
|
111 |
else |
|
e5dfac7ea
|
112 |
|
|
d535ba468
|
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# Source the plugin script
# FIXME: I don't know. Looks very very ugly. Needs a better
# implementation once tests are ready.
local script_loc="$(ls "$location" | grep -m1 '.plugin.zsh$')"
if [[ -f $script_loc ]]; then
# If we have a `*.plugin.zsh`, source it.
source "$script_loc"
elif [[ ! -z "$(ls "$location" | grep -m1 '.zsh$')" ]]; then
# If there is no `*.plugin.zsh` file, source *all* the `*.zsh`
# files.
for script ($location/*.zsh) source "$script"
fi
# Add to $fpath, for completion(s)
fpath=($location $fpath)
fi
|
|
e5dfac7ea
|
130 |
|
|
e5dfac7ea
|
131 |
} |
|
0b32bec27
|
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
bundle-cleanup () {
if [[ ! -d "$ADOTDIR/repos" || -z "$(ls "$ADOTDIR/repos/")" ]]; then
echo "You don't have any bundles."
return 0
fi
# Find directores in ADOTDIR/repos, that are not in the bundles record.
local unused_clones="$(comm -13 \
<(-bundle-echo-record | awk '{print $1}' | sort -u) \
<(ls "$ADOTDIR/repos" | while read line; do
-antigen-get-clone-url "$line"
done))"
if [[ -z $unused_clones ]]; then
echo "You don't have any unidentified bundles."
return 0
fi
echo 'You have clones for the following repos, but are not used.'
echo "$unused_clones" | sed 's/^/ /'
echo -n '
Delete them all? [y/N] '
if read -q; then
echo
echo
echo "$unused_clones" | while read url; do
echo -n "Deleting clone for $url..."
rm -rf "$(-antigen-get-clone-dir $url)"
echo ' done.'
done
else
echo
echo Nothing deleted.
fi
}
|
|
e5dfac7ea
|
169 |
bundle-lib () {
|
|
d535ba468
|
170 |
bundle --loc=lib |
|
e5dfac7ea
|
171 172 173 174 175 |
}
bundle-theme () {
local url="$ANTIGEN_DEFAULT_REPO_URL"
local name="${1:-robbyrussell}"
|
|
d535ba468
|
176 |
bundle --loc=themes/$name.zsh-theme --btype=theme |
|
e5dfac7ea
|
177 |
} |
|
1af74ea9e
|
178 |
bundle-apply () {
|
|
e5dfac7ea
|
179 |
# Initialize completion. |
|
a91386310
|
180 181 |
# TODO: Only load completions if there are any changes to the bundle
# repositories.
|
|
e5dfac7ea
|
182 183 |
compinit -i } |
|
df942673b
|
184 185 |
bundle-list () {
# List all currently installed bundles
|
|
9dc631003
|
186 |
if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then |
|
df942673b
|
187 188 189 |
echo "You don't have any bundles." >&2
return 1
else
|
|
60d0dc571
|
190 |
-bundle-echo-record | awk '{print $1 " " $2 " " $3}'
|
|
df942673b
|
191 192 |
fi } |
|
bc9d20c7a
|
193 194 |
# Echo the bundle specs as in the record. The first line is not echoed since it # is a blank line. |
|
60d0dc571
|
195 |
-bundle-echo-record () {
|
|
9dc631003
|
196 |
echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p' |
|
e5dfac7ea
|
197 198 199 |
}
-bundle-env-setup () {
|
|
3047bfeb7
|
200 |
# Pre-startup initializations |
|
e5dfac7ea
|
201 202 |
-set-default ANTIGEN_DEFAULT_REPO_URL \
https://github.com/robbyrussell/oh-my-zsh.git
|
|
911cc8cb5
|
203 |
-set-default ADOTDIR $HOME/.antigen |
|
3047bfeb7
|
204 205 206 207 208 209 |
# Load the compinit module
autoload -U compinit
# Without the following, `compdef` function is not defined.
compinit -i
|
|
e5dfac7ea
|
210 211 212 213 214 |
}
# Same as `export $1=$2`, but will only happen if the name specified by `$1` is
# not already set.
-set-default () {
|
|
43bb2cef1
|
215 216 |
local arg_name="$1"
local arg_value="$2"
|
|
e5dfac7ea
|
217 218 219 220 |
eval "test -z \"\$$arg_name\" && export $arg_name='$arg_value'" } -bundle-env-setup |