diff options
author | Tim Keller <tjk@tjkeller.xyz> | 2024-10-18 21:52:28 -0500 |
---|---|---|
committer | Tim Keller <tjk@tjkeller.xyz> | 2024-10-18 21:52:28 -0500 |
commit | 2dc486fb891e65658dff83ab34ca8878756a6a90 (patch) | |
tree | 03b39eb93f38534ab0972beadb770fecbd2243b8 /zscripts/zplug.zsh | |
download | zsh-2dc486fb891e65658dff83ab34ca8878756a6a90.tar.xz zsh-2dc486fb891e65658dff83ab34ca8878756a6a90.zip |
initial commit
Diffstat (limited to 'zscripts/zplug.zsh')
-rwxr-xr-x | zscripts/zplug.zsh | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/zscripts/zplug.zsh b/zscripts/zplug.zsh new file mode 100755 index 0000000..27dc70f --- /dev/null +++ b/zscripts/zplug.zsh @@ -0,0 +1,136 @@ +#!/usr/bin/env zsh + +local home=~ +local zplugs="${ZDOTDIR:-$home/.}${ZDOTDIR:+/}zplugs" # Declare all variables using `local` to keep them away from the interactive shell +local zplugins="${ZPLUGINSDIR:-$home/.local/share/zsh/zplugins}" +#[[ $EUID != 0 ]] && [ -z "$ZPLUGNOROOT" ] && local sudo=${SUDO-sudo} + +function __zplugInstall() { + touch "$zplugs" + local pluglist=( `\grep -v '#' "$zplugs"` ) + local confirm plug + shift + for plug in "$@"; do; pluglist+=(${plug}); done + + $sudo mkdir -p "$zplugins" + + for plug in ${pluglist[@]}; do + [ -d "$zplugins/$(basename -s'.git' "$plug")" ] && continue + if ! `$sudo git -C "$zplugins" clone "$plug" "$(basename -s'.git' "$plug")"`; then + # Runs if git has an error + printf "Remove \"$plug\"? [y|n]: " + read confirm + case $confirm in + y|yes) pluglist=(${pluglist#$plug}) && echo "Repo Deleted" ;; + *) echo "Repo Kept" ;; + esac + fi + echo + done + for plug in ${pluglist[@]}; do echo "$plug"; done | sort -u > "$zplugs" + echo "All plugins installed and saved to $zplugs!\nDone" +} + +function __zplugUninstall() { + local pluglist=( `cat "$zplugs"` ) pluglistbn=() + local confirm i plug plugids plugig + + [ -z "$pluglist" ] && echo "No packages are installed!" && return + + $sudo mkdir -p "$zplugins" + echo "Listing all packages in $zplugins ..." + for i in {1..${#pluglist[@]}}; do + pluglistbn[$i]="$(basename -s'.git' "${pluglist[$i]}")" + printf '%3d) %s\n' $i "${pluglistbn[$i]}" + done + + echo + printf "Choose zsh plugin(s) to remove: " + read plugids + [ -z "$plugids" ] && echo "No plugins selected\nAborting" && return + + echo "\nListing selected plugins:" + for plugid in $=plugids; do + if [ -z ${pluglist[$plugid]} ]; then + echo "Error: input \"$plugid\" is not a valid plugin identifier" + return + fi + echo "\t${pluglistbn[$plugid]}" + done + + printf "\nReally remove all of these plugins? [y|n]: " + read confirm + case $confirm in + y|yes) ;; + n|no) echo "Aborted" && return ;; + *) echo "Input not understood\nAborted" && return ;; + esac + for plugid in $=plugids; do + printf '\t' + $sudo rm -vrf "$zplugins/${pluglistbn[$plugid]}" + pluglist[$plugid]="" + done + for plug in ${pluglist[@]}; do echo "$plug"; done | sort -u > "$zplugs" + echo "\nDone" +} + +function __zplugUpgrade() { + local plugdir + $sudo mkdir -p "$zplugins" + echo "Upgrading all packages...\n" + for plugdir in "$zplugins"/*; do; + basename "$plugdir" + $sudo git -C "$plugdir" pull; + echo + done + echo "Done" +} + +function __zplugList() { + mkdir -p "$zplugins" + echo "Listing all packages...\n" + ls "$zplugins" | nl -s') ' -w3 + echo "\nDone" +} + +function __zplugHelp() { + echo "Usage: zplug [install/add/i|uninstall/remove/r|upgrade/update/u|list/l|help/h] + install, add, i [packages] : Install plugins from config file & add any new plugins + uninstall, remove, r : Interactively remove plugins + upgrade, update, u : Update all installed plugins + list, l : List all installed plugins + help, h : Show this help menu + + All plugins are listed in $zplugs + All plugins are installed in $zplugins + + To install a plugin, just put it in the zplug file and run \"zplug install\" + or just run \"zplug install [plugin]\" where [plugin] is a link to download the + plugin using git + + For instance, \"https://github.com/zdharma-continuum/fast-syntax-highlighting\" is + a valid plugin link for the fast-syntax-highlighting plugin. + + To use your plugins, just put \"zplugInitialize\" as the last line of your zshrc!" +} + +function zplug() { + local cmd=${1:-h} + case $cmd in + install|add|i) __zplugInstall $@ ;; + uninstall|remove|r) __zplugUninstall ;; + upgrade|update|u) __zplugUpgrade ;; + list|l) __zplugList ;; + help|h) __zplugHelp ;; + *) echo "zplug: input \"$1\" not recognized!" && __zplugHelp ;; + esac +} + +function zplugInitialize() { + local plugin + if ! [ -d "$zplugins" ] && [ -f "$zplugs" ]; then + echo "zplug installing plugins..." + __zplugInstall 0 # Put in some value since there is a shift + fi + for plugin in "$zplugins"/*/*.zsh; do source "$plugin"; done 2>/dev/null +} |