Blame view
antigen.zsh
6.16 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 84 85 86 87 88 |
-antigen-ensure-repo () {
local update=false
if [[ $1 == --update ]]; then
update=true
shift
fi
local handled_repos=""
local install_bundles=""
local url="$1"
|
|
a12d3140a
|
89 |
local clone_dir="$(-antigen-get-clone-dir $url)" |
|
2ac7c0cb0
|
90 91 92 93 94 95 96 97 98 99 100 |
if ! echo "$handled_repos" | grep -Fqm1 "$url"; then
if [[ ! -d $clone_dir ]]; then
git clone "$url" "$clone_dir"
elif $update; then
git --git-dir "$clone_dir/.git" pull
fi
handled_repos="$handled_repos
$url"
fi
|
|
e5dfac7ea
|
101 |
} |
|
575a537db
|
102 103 104 105 106 107 |
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
|
108 |
bundle-load () {
|
|
e5dfac7ea
|
109 |
|
|
a12d3140a
|
110 111 112 |
local url="$1"
local location="$(-antigen-get-clone-dir "$url")/$2"
local btype="$3"
|
|
e5dfac7ea
|
113 |
|
|
d535ba468
|
114 |
if [[ $btype == theme ]]; then |
|
e5dfac7ea
|
115 |
|
|
d535ba468
|
116 117 118 |
# Of course, if its a theme, the location would point to the script
# file.
source "$location"
|
|
e5dfac7ea
|
119 |
|
|
d535ba468
|
120 |
else |
|
e5dfac7ea
|
121 |
|
|
d535ba468
|
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# 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
|
139 |
|
|
e5dfac7ea
|
140 |
} |
|
0b32bec27
|
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 169 170 171 172 173 174 175 176 177 |
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
|
178 |
bundle-lib () {
|
|
d535ba468
|
179 |
bundle --loc=lib |
|
e5dfac7ea
|
180 181 182 183 184 |
}
bundle-theme () {
local url="$ANTIGEN_DEFAULT_REPO_URL"
local name="${1:-robbyrussell}"
|
|
d535ba468
|
185 |
bundle --loc=themes/$name.zsh-theme --btype=theme |
|
e5dfac7ea
|
186 |
} |
|
1af74ea9e
|
187 |
bundle-apply () {
|
|
e5dfac7ea
|
188 |
# Initialize completion. |
|
a91386310
|
189 190 |
# TODO: Only load completions if there are any changes to the bundle
# repositories.
|
|
e5dfac7ea
|
191 192 |
compinit -i } |
|
df942673b
|
193 194 |
bundle-list () {
# List all currently installed bundles
|
|
9dc631003
|
195 |
if [[ -z "$_ANTIGEN_BUNDLE_RECORD" ]]; then |
|
df942673b
|
196 197 198 |
echo "You don't have any bundles." >&2
return 1
else
|
|
60d0dc571
|
199 |
-bundle-echo-record | awk '{print $1 " " $2 " " $3}'
|
|
df942673b
|
200 201 |
fi } |
|
bc9d20c7a
|
202 203 |
# Echo the bundle specs as in the record. The first line is not echoed since it # is a blank line. |
|
60d0dc571
|
204 |
-bundle-echo-record () {
|
|
9dc631003
|
205 |
echo "$_ANTIGEN_BUNDLE_RECORD" | sed -n '1!p' |
|
e5dfac7ea
|
206 207 208 |
}
-bundle-env-setup () {
|
|
3047bfeb7
|
209 |
# Pre-startup initializations |
|
e5dfac7ea
|
210 211 |
-set-default ANTIGEN_DEFAULT_REPO_URL \
https://github.com/robbyrussell/oh-my-zsh.git
|
|
911cc8cb5
|
212 |
-set-default ADOTDIR $HOME/.antigen |
|
3047bfeb7
|
213 214 215 216 217 218 |
# Load the compinit module
autoload -U compinit
# Without the following, `compdef` function is not defined.
compinit -i
|
|
e5dfac7ea
|
219 220 221 222 223 |
}
# Same as `export $1=$2`, but will only happen if the name specified by `$1` is
# not already set.
-set-default () {
|
|
43bb2cef1
|
224 225 |
local arg_name="$1"
local arg_value="$2"
|
|
e5dfac7ea
|
226 227 228 229 |
eval "test -z \"\$$arg_name\" && export $arg_name='$arg_value'" } -bundle-env-setup |