2 # ZPE shell plugin helper
3 # Copyright 2021 Armaan Bhojwani, MIT License
6 zpe_config_dir="${HOME}/.config/zpe/"
7 zpe_plugin_dir="${zpe_config_dir}/plugins/"
8 zpe_tmp_dir="/tmp/zpe/"
9 zpe_log_dir="${zpe_tmp_dir}/logs"
12 # Create necesary directories, check dependencies
13 [[ -d "${zpe_config_dir}" ]] || mkdir -p "${zpe_config_dir}"
14 [[ -d "${zpe_plugin_dir}" ]] || mkdir -p "${zpe_plugin_dir}"
15 [[ -d "${zpe_tmp_dir}" ]] || mkdir ${zpe_tmp_dir}
16 [[ -d "${zpe_log_dir}" ]] || mkdir ${zpe_log_dir}
17 touch "${zpe_config_dir}"repositories
18 [[ -x git ]] && echo "Please install git"
22 # Clone all the repos in the config file recursively into the plugin directory
24 cat ${zpe_config_dir}repositories | xargs -P10 -I{} git -C ${zpe_plugin_dir} \
25 clone {} -q --depth 1 &> "${zpe_log_dir}"/$(date -Iseconds)
26 echo "All plugins are downloaded"
32 local find_dirs=$(find "${zpe_plugin_dir}" -name ".git" -type d)
33 echo $find_dirs | xargs -P10 -I {} git --git-dir={} config pull.ff only
34 echo $find_dirs | xargs -P10 -I {} git --git-dir={} --work-tree={} pull &> \
35 "${zpe_log_dir}"/$(date -Iseconds)
36 echo "All plugins are up to date"
40 # Remove cloned plugins not specified in the config file
42 find ${zpe_plugin_dir} -maxdepth 1 -type d -exec git -C {} \
43 config --get remote.origin.url \; > "${zpe_tmp_dir}"installed-urls
44 comm -23 <(sort ${zpe_tmp_dir}installed-urls) \
45 <(sort "${zpe_config_dir}"repositories) > "${zpe_tmp_dir}"/diff
47 echo -n "" > "${zpe_tmp_dir}"deletable
49 grep -l $line "$zpe_plugin_dir"/*/.git/config >> "${zpe_tmp_dir}"deletable
50 done < ${zpe_tmp_dir}diff
52 sed -i -e 's/\/.git\/config//g' -e 's/\/\//\//g' "${zpe_tmp_dir}"deletable
54 if [[ $(wc -l "${zpe_tmp_dir}"deletable | cut -d ' ' -f 1) > 0 ]]; then
55 cat "${zpe_tmp_dir}"deletable
56 echo "Delete these directories? [y/N]: "
61 xargs rm -rf <<< $(echo $line2)
62 done < ${zpe_tmp_dir}deletable
69 echo "Nothing to clean"
74 source "${zpe_plugin_dir}"/$1
78 ${EDITOR} ${zpe_config_dir}repositories