123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #!/bin/bash
- # A meta micro manager for the masses.
- # USAGE:
- # gimme [stuff]
- ###############################################################################
- [ "$GIMME_URL" ] || export GIMME_URL="https://github.com/KylePDavis/gimme"
- [ "$GIMME_DIR" ] || export GIMME_DIR="$HOME/.gimme"
- [ "$GIMME_GIMMES_DIR" ] || export GIMME_GIMMES_DIR="$GIMME_DIR/gimmes"
- [ "$GIMME_LINK" ] || export GIMME_LINK="$HOME/bin/gimme"
- [ "$GIMME_LINK_DIR" ] || export GIMME_LINK_DIR=$(dirname "$GIMME_LINK")
- [ "$GIMMES" ] || export GIMMES=""
- [ "$OS" ] || export OS=$(uname -s)
- [ "$DEBUG" ] || export DEBUG=
- has() { which "$1" >/dev/null; }
- pkgtool() {
- if [[ "$OS" = "Darwin" ]]; then
- brew "$@"
- else
- sudo apt-get -y "$@"
- fi
- }
- gimme_pkg() {
- pkgtool install "$@"
- }
- export -f has pkgtool gimme_pkg
- if [[ "$0" =~ [-]?bash ]]; then # sourced or piped
- if [[ "$BASH_SOURCE" ]]; then # sourced
- _gimme_completely() {
- if [[ "$2" = -* ]]; then
- COMPREPLY=( $(compgen -W "--help --version" -- "$2") )
- else
- COMPREPLY=( $(find "$GIMME_GIMMES_DIR" -type f -path "$GIMME_GIMMES_DIR/$2*" \! -name '.*' | cut -c$(( ${#GIMME_GIMMES_DIR} + 2))- ) )
- fi
- }
- complete -F _gimme_completely gimme
- else # piped
- set -o errexit -o pipefail
- if ! [[ -d "$GIMME_DIR" ]]; then
- echo "Installing $GIMME_DIR/gimme ..."
- mkdir -p "$GIMME_DIR"
- git clone "$GIMME_URL" "$GIMME_DIR"
- mkdir -p "$(dirname "$GIMME_LINK")"
- ln -sf "$GIMME_DIR/gimme" "$GIMME_LINK"
- echo "Done! Now you can 'gimme stuff' or 'gimme dev/stuff' or even 'gimme gimme'!"
- else
- echo "Updating gimme (in $GIMME_DIR) ..."
- cd "$GIMME_DIR"
- git pull
- fi
- fi
- else # normal usage
- set -o errexit -o pipefail
- for GIMME; do
- echo "# WANT: $GIMME"
- ! [[ "$GIMMES" == *" $GIMME "* ]] || exit 0
- export GIMMES+=" $GIMME " GIMME
- P="$GIMME_GIMMES_DIR/$GIMME"
- if ! [[ -f "$P" ]]; then
- # find _default handler
- while P=$(dirname "$P") && [[ "$P" = "$GIMME_GIMMES_DIR"* ]]; do
- if [[ -f "$P/_default" ]]; then
- P="$P/_default"
- break;
- fi
- done
- # no default
- if ! [[ "$P" = "$GIMME_GIMMES_DIR"* ]]; then
- echo "# ERROR: Unable to find $GIMME_GIMMES_DIR/_default handler"
- exit 1
- fi
- fi
- if [[ -x "$P" ]]; then
- [[ "$PATH" = "$LINK_DIR"* ]] || export PATH="$LINK_DIR:$PATH"
- if "$P" | sed "s/^/ /"; then
- echo "# DONE: $GIMME"
- else
- OUCH=$?
- echo "# FAIL: Error for gimme \"$GIMME\" (EXIT_CODE=$OUCH)"
- exit $OUCH
- fi
- else
- echo "# WARN: the gimme \"$GIMME\" was SKIPPED because \"$P\" is not marked executable!"
- fi
- done
- fi
|