123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- #!/bin/bash
- # a quick and dirty meta pkg installer
- #
- #TODO: output help if used wrong
- #
- ###############################################################################
- set -e
- [ "$GIMME_URL" ] || GIMME_URL="http://git.kylepdavis.com/kylepdavis/gimme.git"
- [ "$GIMME_DIR" ] || GIMME_DIR="$HOME/.gimme"
- alias getme=gimme
- alias giveme=gimme
- has() {
- which "$1" >/dev/null
- }
- pkgtool() {
- if [[ "$OS" = "Darwin" ]]; then
- brew "$@"
- else
- sudo apt-get -y "$@"
- fi
- }
- _gimmepkg() {
- pkgtool install "$@"
- }
- _GIMMES=
- __gimme() {
- local PKG="$1"
- ! [[ "$_GIMMES" == *" $PKG "* ]] || return 0
- _GIMMES+=" $PKG "
- case "$PKG" in
- dotfiles)
- #TODO: get and install these
- #TODO: difficulty: should be able to setup dotfiles + bash + base tools all in one command ;-)
- #TODO: protip: curl -sLo- $URL | bash # ftw
- echo ... //TODO: $PKG ...
- ;;
- gcc)
- if [[ "$OS" = "Darwin" ]]; then
- "xcode-select" --install 2>&1 | grep -q "already installed"
- else
- _gimmepkg build-essential
- _gimme curl
- fi
- ;;
- bash_profile) _gimme liquidprompt
- [[ -f "$HOME/.bash_profile" ]] || ln -sv "$HOME/.profile" "$HOME/.bash_profile"
- [[ -f "$HOME/.bashrc" ]] || ln -sv "$HOME/.profile" "$HOME/.bashrc"
- ;;
- liquidprompt) _gimme bash_profile git
- [[ -d "$HOME/liquidprompt" ]] || git clone "https://github.com/nojhan/liquidprompt.git" "$HOME/liquidprompt"
- ;;
- git)
- has git || _gimmepkg git
- if ! [[ -f "$HOME/.gitconfig" ]]; then
- git config --global color.ui true
- if [[ "$OS" = "Darwin" ]]; then
- git config --global credential.helper "osxkeychain"
- else
- git config --global credential.helper "cache --timeout=3600"
- fi
- fi
- ;;
- git-extras) _gimme git
- has git-alias || (cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)
- if ! [[ "$(git alias)" ]]; then
- git alias br branch
- git alias ci commit
- git alias co checkout
- git alias di diff
- git alias st status
- fi
- ;;
- python)
- if [[ "$OS" = "Darwin" ]]; then
- mkdir -p "$PYTHONPATH"
- fi
- has python || _gimmepkg python
- ;;
- pylint|pep8) _gimme python
- if ! has "$PKG"; then
- if [[ "$OS" = "Darwin" ]]; then
- easy_install -d "$PYTHONPATH" "$PKG"
- ln -sv "$PYTHONPATH/$PKG" "$(brew --prefix)/bin/$PKG"
- else
- easy_install "$PKG"
- fi
- fi
- ;;
- node)
- if [[ "$OS" = "Darwin" ]]; then
- has node || _gimmepkg node
- else #TODO: might get old version here ...
- _gimme nodejs npm
- fi
- ;;
- jshint|js-beautify|json)
- if [[ "$OS" = "Darwin" ]]; then
- has "$PKG" || npm install -g "$PKG"
- else
- has "$PKG" || sudo npm install -g "$PKG"
- fi
- ;;
- mongodb)
- has "mongod" || _gimmepkg mongodb
- ;;
- redis)
- if ! has "redis-server"; then
- if [[ "$OS" = "Darwin" ]]; then
- _gimmepkg redis
- else
- _gimmepkg redis-server
- fi
- fi
- ;;
- go)
- _gimme curl
- #TODO: setup go vs golang dirs?
- if ! which "$PKG" >/dev/null; then
- if [[ "$OS" = "Darwin" ]]; then
- _gimmepkg go --cross-compile-common
- else
- _gimmepkg golang
- fi
- fi
- ;;
- difftool)
- _gimme colordiff
- ;;
- mergetool)
- if [[ "$OS" = "Darwin" ]]; then
- true #TODO: usually use opendiff but SourceTree installer would be nice
- else
- _gimme meld
- fi
- ;;
- tools)
- _gimme bash_profile liquidprompt git tmux tree vim
- ;;
- dev+generic)
- _gimme gcc mergetool
- ;;
- dev+js)
- _gimme node jshint js-beautify json
- ;;
- dev+sh)
- _gimme shellcheck
- ;;
- dev+py)
- _gimme python pylint pep8
- ;;
- dev+db)
- _gimme mongodb redis postgresql
- ;;
- dev+go)
- _gimme go
- ;;
- dev)
- _gimme dev+generic dev+js dev+sh dev+py dev+db dev+go
- ;;
- stuff)
- _gimme tools dev
- ;;
- homebrew) _gimme gcc git
- [[ -d "$HOME/homebrew" ]] || (mkdir "$HOME/homebrew" 2>/dev/null && curl -L "https://github.com/Homebrew/homebrew/tarball/master" | tar xz --strip 1 -C "$HOME/homebrew" && brew update)
- [[ "$BREW_PREFIX" ]] || BREW_PREFIX=$(brew --prefix)
- has brew-cask || brew install caskroom/cask/brew-cask
- ;;
- pkgtool)
- if [[ "$OS" = "Darwin" ]]; then
- _gimme homebrew
- else
- has apt-get || return 123
- fi
- ;;
- pkgtool_metadata)
- pkgtool update
- ;;
- gimme)
- echo "Checking gimme ..."
- _gimme git
- if ! [[ -d "$GIMME_DIR" ]]; then
- echo "Installing $HOME/bin/gimme ..."
- mkdir -p "$GIMME_DIR"
- git clone "$GIMME_URL" "$GIMME_DIR"
- mkdir -p "$HOME/bin"
- ln -sf "$GIMME_DIR/gimme.sh" "$HOME/bin/gimme"
- else
- echo "Updating gimme ..."
- pushd "$GIMME_DIR" >/dev/null
- git pull
- popd >/dev/null
- fi
- ;;
- *)
- _gimme pkgtool
- #TODO: _gimme pkgtool_metadata
- has "$PKG" || _gimmepkg "$PKG"
- ;;
- esac
- echo "# DONE: gimme $PKG"
- }
- _gimme() {
- local PKG
- for PKG in "$@"; do
- if ! __gimme "$PKG"; then
- echo "ERROR: Unable to fulfill gimme for $PKG!"
- return 123
- fi
- done
- }
- gimme() {
- _GIMMES=
- #set -x
- _gimme "$@"
- #set +x
- }
- GIMME_GIMMES=$(type __gimme | grep ')$' | tr -d ')|*')
- _gimme_complete() {
- COMPREPLY=( $(compgen -W "$GIMME_GIMMES" -- "${COMP_WORDS[COMP_CWORD]}") )
- }
- complete -F _gimme_complete gimme
- if [[ ! "$BASH_SOURCE" && "$#" = 0 ]]; then
- gimme gimme
- exit 0
- fi
- gimme "$@"
|