Move .scripts -> .local/bin
This commit is contained in:
Executable
+186
@@ -0,0 +1,186 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Vim plugin manager
|
||||
# Depends: git
|
||||
|
||||
#----
|
||||
BASE="$XDG_CONFIG_HOME/vim/pack"
|
||||
#----
|
||||
DIR="$BASE/plugins"
|
||||
LIST="$BASE/list"
|
||||
START="$DIR/start"
|
||||
OPT="$DIR/opt"
|
||||
|
||||
help() {
|
||||
B=$(tput bold)
|
||||
U=$(tput smul)
|
||||
N=$(tput sgr0)
|
||||
|
||||
cat << EOF
|
||||
${B}NAME${N}
|
||||
vimplugin.sh - vim plugin manager
|
||||
|
||||
${B}SYNOPSIS${N}
|
||||
${B}vimplugin.sh${N} [${U}OPTION${N}] [${U}COMMAND${N}] [<${U}ARG${N}>...]
|
||||
|
||||
${B}OPTIONS${N}
|
||||
${B}-h${N} Display usage message and exit.
|
||||
|
||||
${B}COMMANDS${N}
|
||||
${B}init${N}
|
||||
Creates all the required directories/files.
|
||||
|
||||
${B}install${N} ${U}URL${N} <${U}LOCATION${N}>
|
||||
Install a new plugin from a valid GitHub ${U}URL${N}.
|
||||
Store this plugin in <${U}LOCATION${N}> (start/opt), default to start.
|
||||
|
||||
${B}list${N} <${U}NUMBER${N}>
|
||||
Print all the installed plugins.
|
||||
If <${U}NUMBER${N}> is provided, print only the plugin in that position.
|
||||
|
||||
${B}remove${N}
|
||||
Remove plugin, pick from selection menu.
|
||||
|
||||
${B}update${N}
|
||||
Install/update all plugins stored in the config file.
|
||||
EOF
|
||||
}
|
||||
|
||||
# Exit if no option is provided
|
||||
[ "$#" -eq 0 ] && help && exit 1
|
||||
|
||||
SCRIPT="$(basename "$0")"
|
||||
|
||||
# Option handling
|
||||
while getopts ':h?' opt; do
|
||||
case $opt in
|
||||
h)
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
\?)
|
||||
echo "$SCRIPT: invalid option '$OPTARG'"
|
||||
echo "Try '$SCRIPT -h' for more information."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
remove() {
|
||||
list
|
||||
printf "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"
|
||||
echo "Removed plugin: $TO_REMOVE"
|
||||
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"
|
||||
}
|
||||
|
||||
# Command handling
|
||||
shift $((OPTIND - 1))
|
||||
case "$1" in
|
||||
init | install | list | remove | update)
|
||||
"$@"
|
||||
;;
|
||||
*)
|
||||
echo "$SCRIPT: invalid command '$1'"
|
||||
echo "Try '$SCRIPT -h' for more information."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user