You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							151 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							151 lines
						
					
					
						
							2.9 KiB
						
					
					
				| #!/bin/sh | |
|  | |
| #---- | |
| BASE="$XDG_CONFIG_HOME/vim/pack" | |
| #---- | |
| DIR="$BASE/plugins" | |
| LIST="$BASE/list" | |
| START="$DIR/start" | |
| OPT="$DIR/opt" | |
|  | |
| help() { | |
| 	B=$(tput bold) | |
| 	N=$(tput sgr0) | |
|  | |
| 	cat << EOF | |
| ${B}NAME${N} | |
| 	vimplugin - vim plugin manager | |
|  | |
| ${B}SYNOPSIS${N} | |
| 	./vimplugin.sh <command> [<arg1> <arg2>] | |
|  | |
| ${B}COMMANDS${N} | |
| 	${B}init${N} | |
| 		Creates all the required directories/files. | |
|  | |
| 	${B}install <url> ["start"/"opt"]${N} | |
| 		Install a new plugin, <url> need to be a valid GitHub URL, | |
| 		start/opt to install the plugin in the start/opt directory | |
| 		(default: start). | |
|  | |
| 	${B}list <number>${N} | |
| 		Prints all the installed plugins, | |
| 		<number> prints just the plugin in that position. | |
| 	${B}remove${N} | |
| 		Remove plugin, script will prompt a selection menu. | |
| 	${B}update${N} | |
| 		Installs/updates all plugins from the config file. | |
| EOF | |
| } | |
|  | |
| init() { | |
| 	sudo mkdir -p "$START" | |
| 	sudo mkdir -p "$OPT" | |
| 	sudo touch "$LIST" | |
| 	if [ ! -s "$LIST" ]; then | |
| 		# Append to empty file | |
| 		sudo sh -c 'echo "start:" >> '"$LIST" | |
| 		sudo sh -c 'echo "opt:" >> '"$LIST" | |
| 	fi | |
| } | |
|  | |
| list() { | |
| 	if [ -z "$1" ]; then | |
| 		echo "Listing all installed plugins.." | |
| 	fi | |
|  | |
| 	PLUGIN="$(find "$DIR" -mindepth 2 -maxdepth 2 \ | |
| 		| sort | awk -F '/' '{ print $(NF-1)"/"$NF }')" | |
| 	NUM=0 | |
| 	for p in $PLUGIN; do | |
| 		NUM=$(( NUM + 1 )) | |
|  | |
| 		if [ -z "$1" ]; then | |
| 			echo "$NUM) $p" | |
| 		elif [ "$NUM" = "$1" ]; then | |
| 			echo "$p" | |
| 		fi | |
| 	done | |
| } | |
|  | |
| install() { | |
| 	# Check if correct git URL | |
| 	if [ -z "$(echo "$1" | sed -nr \ | |
| 		's/^https:\/\/github\.com\/(.*\/.*).git$/\1/p')" ]; then | |
| 		echo "script: url invalid: $1" | |
| 	else | |
| 		# cd to correct directory if called from the CLI | |
| 		if [ -z "$2" ]; then | |
| 			# Default is directory 'start' | |
| 			cd "$START" || exit | |
| 		elif [ "$2" = "start" ]; then | |
| 			cd "$START" || exit | |
| 		elif [ "$2" = "opt" ]; then | |
| 			cd "$OPT" || exit | |
| 		fi | |
|  | |
| 		REPO="$(basename "$1" .git)" | |
| 		if [ -d "$REPO" ]; then | |
| 			cd "$REPO" || exit | |
| 			sudo git pull --force 1> /dev/null | |
| 			cd ".." | |
| 			echo "Updated: $REPO" | |
| 		else | |
| 			sudo git clone "$1" 2> /dev/null | |
|  | |
| 			# Add git URL to config file | |
| 			if [ -z "$2" ]; then | |
| 				# Append before 'opt:' | |
| 				sudo sed -i '/opt:/ i '"$1" "$LIST" | |
| 			elif [ "$2" = "start"  ]; then | |
| 				# Append before 'opt:' | |
| 				sudo sed -i '/opt:/ i '"$1" "$LIST" | |
| 			elif [ "$2" = "opt" ]; then | |
| 				# Append at the end of the file | |
| 				sudo sed -i '$ a '"$1" "$LIST" | |
| 			fi | |
|  | |
| 			echo "Installed: $REPO" | |
| 		fi | |
| 	fi | |
| } | |
|  | |
| update() { | |
| 	echo "Updating.." | |
|  | |
| 	init | |
|  | |
| 	cd "$START" || exit | |
| 	while read -r l; do | |
| 		if [ "$l" = "start:"  ]; then | |
| 			cd "$START" || exit | |
| 		elif [ "$l" = "opt:"  ]; then | |
| 			cd "$OPT" || exit | |
| 		else | |
| 			install "$l" "script" | |
| 		fi | |
| 	done < "$LIST" | |
| } | |
|  | |
| remove() { | |
| 	list | |
| 	echo -n "Enter the number to remove: " | |
| 	read -r OPTION | |
|  | |
| 	if [ -z "$(echo "$OPTION" | sed -nr 's/^([0-9]+)$/\1/p')" ]; then | |
| 		echo "Please select a number" | |
| 	else | |
| 		TO_REMOVE="$(list "$OPTION")" | |
| 		if [ -n "$TO_REMOVE" ]; then | |
| 			sudo rm -rf "$DIR/$TO_REMOVE" | |
| 			sudo sed -i '/'"$(basename "$TO_REMOVE")"'\.git/d' "$LIST" | |
| 		fi | |
| 	fi | |
| } | |
|  | |
| if type "$1" 2> /dev/null | grep -q "function"; then | |
| 	"$@" | |
| else | |
| 	help | |
| fi | |
| 
 | |
| 
 |