summaryrefslogtreecommitdiff
path: root/zsh/zscripts/zplug.zsh
blob: e1fa3c685d52578b012a6e875f198829a286ca0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env zsh

local zplugs="${ZDOTDIR:-~/.}${ZDOTDIR+/}zplugs"
local zplugins="${ZDATADIR:-.local/share/zsh}/zplugins"

unsetopt nomatch # Disable error message when no file can be found

function __zplugInstall() {
	touch "$zplugs"
	local pluglist=( `cat "$zplugs"` )
	shift
	for plug in "$@"; do
		pluglist[$((${#pluglist[@]}+1))]=$plug
	done

	mkdir -p "$zplugins"

	for plug in ${pluglist[@]}; do
		[ -d "$zplugins/$(basename -s'.git' "$plug")" ] && continue
		if ! `git -C "$zplugins" clone "$plug" "$(basename -s'.git' "$plug")"`; then
			vared -p "Remove \"$plug\"? [y|n]: " -c confirm
			[ "$confirm" =~ (y|yes) ] && pluglist=(${pluglist#$plug}) \
				&& echo "Repo Deleted" \
				|| echo "Repo Kept"
			confirm=""
		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() {
	mkdir -p "$zplugins"
	local pluglist=( `cat "$zplugs"` )
	[ -z "$pluglist" ] && echo "No packages are installed!" && return
	echo "Listing all packages in $zplugins ..."
	local pluglistbn=()
	for i in {1..${#pluglist[@]}}; do
		pluglistbn[$i]="$(basename -s'.git' "${pluglist[$i]}")"
		printf '%3d) %s\n' $i "${pluglistbn[$i]}"
	done

	echo
	vared -p "Choose zsh plugin(s) to remove: " -c plugids

	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
		printf "     "
		echo "${pluglistbn[$plugid]}"
	done

	echo
	vared -p "Really remove all of these plugins? [y|n]: " -c confirm
	case $confirm in
		y|yes) ;;
		n|no) echo "Aborted" && return ;;
		*) echo "Input not understood\nAborted" && return ;;
	esac
	for plugid in $=plugids; do
		printf "     "
		rm -vrf "$zplugins/${pluglistbn[$plugid]}"
		pluglist[$plugid]=""
	done
	for plug in ${pluglist[@]}; do echo "$plug"; done | sort -u > "$zplugs"
	echo "\nDone"
}

function __zplugUpgrade() {
	mkdir -p "$zplugins"
	echo "Upgrading all packages...\n"
	for plugdir in "$zplugins"/*; do;
		basename "$plugdir"
		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]
	zplug install, add, i [packages] : Add any packages listed to $zplugs file and install all plugins
	zplug uninstall, remove, r : Interactively remove packages. Removes package from config file as well
	zplug upgrade, update, u : Update all installed packages
	zplug list, l : List all installed packages
	zplug help, h : Show this help menu

	To use zplug, 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() {
	for plugin in "$zplugins"/*/*.zsh; do source "$plugin"; done
}