]> git.armaanb.net Git - zpe.git/blob - zpe.zsh
move to sr.ht, remove branding
[zpe.git] / zpe.zsh
1 #!/usr/bin/env zsh
2 # The ZPE Zsh plugin helper. Copyright 2020 Armaan Bhojwani, MIT License
3
4 # Set defaults
5 zpe_config_dir="${HOME}/.config/zpe/"
6 zpe_plugin_dir="${zpe_config_dir}/plugins/"
7 zpe_tmp_dir="/tmp/zpe/"
8 zpe_log_dir="/tmp/zpe/logs"
9
10 zpe-meta-pre() {
11   # Create necesary directories, check dependencies
12   [[ -d "${zpe_config_dir}" ]] || mkdir -p "${zpe_config_dir}"
13   [[ -d "${zpe_plugin_dir}" ]] || mkdir -p "${zpe_plugin_dir}"
14   [[ -d "${zpe_tmp_dir}" ]] || mkdir ${zpe_tmp_dir}
15   [[ -d "${zpe_log_dir}" ]] || mkdir ${zpe_log_dir}
16   touch "${zpe_config_dir}"repositories
17   [[ -x git ]] && echo "Please install git"
18 }
19
20 zpe-clone() {
21   # Clone all the repos in the config file recursively into the plugin directory
22   zpe-meta-pre
23   cat ${zpe_config_dir}repositories | xargs -P10 -I{} git -C ${zpe_plugin_dir} clone {} -q --depth 1 &> "${zpe_log_dir}"/$(date -Iseconds)
24   echo "All plugins are downloaded"
25 }
26
27 zpe-pull() {
28   # Recursively pull
29   zpe-meta-pre
30   local find_dirs=$(find "${zpe_plugin_dir}" -name ".git" -type d)
31   echo $find_dirs | xargs -P10 -I {} git --git-dir={} config pull.ff only
32   echo $find_dirs | xargs -P10 -I {} git --git-dir={} --work-tree={} pull &> "${zpe_log_dir}"/$(date -Iseconds)
33   echo "All plugins are up to date"
34 }
35
36 zpe-clean() {
37   # Remove cloned plugins not specified in the config file
38   zpe-meta-pre
39   find ${zpe_plugin_dir} -maxdepth 1 -type d -exec git -C {} config --get remote.origin.url \; > "${zpe_tmp_dir}"installed-urls
40   comm -23 <(sort ${zpe_tmp_dir}installed-urls) <(sort "${zpe_config_dir}"repositories) > "${zpe_tmp_dir}"/diff
41
42   echo -n "" > "${zpe_tmp_dir}"deletable
43   while read line; do
44     grep -l $line "$zpe_plugin_dir"/*/.git/config >> "${zpe_tmp_dir}"deletable
45   done < ${zpe_tmp_dir}diff
46
47   sed -i -e 's/\/.git\/config//g' -e 's/\/\//\//g' "${zpe_tmp_dir}"deletable
48
49   if [[ $(wc -l "${zpe_tmp_dir}"deletable | cut -d ' ' -f 1) > 0 ]]; then
50     cat "${zpe_tmp_dir}"deletable
51     echo "Delete these directories? [y/N]: "
52     read -rs -k 1 ans
53     case "${ans}" in
54       y|Y)
55         while read line2; do
56           xargs rm -rf <<< $(echo $line2)
57         done < ${zpe_tmp_dir}deletable
58         echo "Cleaned!"
59         ;;
60       *|$'\n')
61         echo "Aborted"
62     esac
63   else
64     echo "Nothing to clean"
65   fi
66 }
67
68 zpe-source() {
69   source "${zpe_plugin_dir}"/$1
70 }
71
72 zpe() {
73   ${EDITOR} ${zpe_config_dir}repositories
74 }