#!/bin/sh set -e vim_dir="${HOME}/.vim" uninstall=1 remove=1 copy=1 link=0 _usage() { printf "\n" >&2 printf "Usage: setup [OPTIONS]\n" >&2 printf "\n" >&2 printf "Installs or Uninstalls vim configuration files.\n" >&2 printf "\n" >&2 printf "If called without the uninstall option then it will install the configuration files.\n" >&2 printf "The copy and link options are ignored if called with the uninstall or remove option.\n" >&2 printf "Options:\n" >&2 printf "\t-c | --copy: Copy the configuration files, instead of creating symlinks.\n" >&2 printf "\t-h | --help: Print usage information.\n" >&2 printf "\t-l | --link: Create symlinks to the configuration files (Default).\n" >&2 printf "\t-r | --remove: Removes the entire ~/.vim directory.\n" >&2 printf "\t-u | --uninstall: Uninstalls configuration files.\n" >&2 printf "" >&2 } _parse_options() { arg= while ! test -z "$1"; do arg="$1" case $arg in -c | --copy) copy=0 link=1 shift;; -h | --help) _usage exit;; -l | --link) copy=1 link=0 shift;; -r | --remove) remove=0 shift;; -u | --uninstall) uninstall=0 shift;; *) echo "Unknown option $arg" >&2 shift;; esac done } _make_dirs() { if ! test -d "${vim_dir}"; then mkdir "${vim_dir}" fi } _uninstall_vim() { echo "Uninstalling vim..." >&2 test -e "${vim_dir}/vimrc" && rm "${vim_dir}/vimrc" } _remove_vim() { echo "Removing ~/.vim..." >&2 test -d "${vim_dir}" && rm -r -i "${vim_dir}" } _link_vim() { echo "Symlinking vim configuration files..." >&2 ln -sfv "${PWD}/vimrc" "${vim_dir}" } _copy_vim() { echo "Copying vim configuration files..." >&2 cp "${PWD}/vimrc" "${vim_dir}" } _install_vim() { _make_dirs # check if in copy mode & copy configuration test "$copy" -eq 0 && _copy_vim && return 0 # else check if in link mode & link configuration test "$link" -eq 0 && _link_vim && return 0 # we don't know what to do w/o link or copy so error echo "Must supply the link or copy option, use --help for usage" >&2 exit 1 } #------------------------------- main ------------------------------- main() { _parse_options "$@" # check if remove is called first test $remove -eq 0 && _remove_vim && exit # then check if uninstall was called test $uninstall -eq 0 && _uninstall_vim && exit # else install the configuration files _install_vim echo "Vim will need to be started, vim plugins should download on start or call :PlugInstall." } main "$@"