|
@@ -0,0 +1,240 @@
|
|
|
+#!/bin/bash
|
|
|
+# a quick and dirty meta pkg installer
|
|
|
+###############################################################################
|
|
|
+set -e
|
|
|
+
|
|
|
+#TODO: output help if used wrong
|
|
|
+#TODO: provide completion
|
|
|
+#TODO: bubble up errors from pkgs
|
|
|
+GIMME_URL="http://git.kylepdavis.com/kylepdavis/gimme.git"
|
|
|
+
|
|
|
+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) _gimme git
|
|
|
+ if [[ "$BASH_SOURCE" ]]; then
|
|
|
+ echo "TODO: make this update gimme"
|
|
|
+ else
|
|
|
+ echo "Installing 'gimme' to \$HOME/bin/"
|
|
|
+ GIMME_DIR="$HOME/.gimme"
|
|
|
+ if ! [[ -d "$GIMME_DIR" ]]; then
|
|
|
+ mkdir -p "$GIMME_DIR"
|
|
|
+ git clone "$GIMME_URL" "$GIMME_DIR"
|
|
|
+ mkdir -p "$HOME/bin"
|
|
|
+ ln -sfv "$GIMME_DIR/gimme.sh" "$HOME/bin/gimme"
|
|
|
+ else
|
|
|
+ pushd "$GIMME_DIR"
|
|
|
+ git pull
|
|
|
+ popd
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ return 0
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ _gimme pkgtool
|
|
|
+ #TODO: _gimme pkgtool_metadata
|
|
|
+ has "$PKG" || _gimmepkg "$PKG"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ echo "Got $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 "$@"
|