Merge remote-tracking branch 'upstream/master'

pull/67/head
Ryan Kanno 2011-07-08 09:03:45 -10:00
commit 6ecbdb3642
23 changed files with 480 additions and 266 deletions

3
.gitignore vendored
View File

@ -1,5 +1,4 @@
aliases/enabled */enabled/*
plugins/enabled
.DS_Store .DS_Store
custom/*.bash custom/*.bash
!custom/example.bash !custom/example.bash

View File

@ -1,46 +1,53 @@
# Bash it # Bash it
'Bash it' is a mash up of my own bash commands and scripts, other bash stuff I have found and a shameless ripoff of [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh). :) **Bash it** is a mash up of my own bash commands and scripts, other bash stuff I have found.
Includes some autocompletion tools, theming support, aliases, custom functions, a few stolen pieces from Steve Losh, and more. (And a shameless ripoff of [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh). :)
Includes autocompletion, themes, aliases, custom functions, a few stolen pieces from Steve Losh, and more.
## Install ## Install
Check a clone of this repo. You can view what a sample `~/.bash_profile` looks like in `template/bash_profile.template.bash`. If you wanted to use that template, make sure to make a backup of your current `~/.bash_profile` file. 1. Check a clone of this repo: `git clone http://github.com/revans/bash-it.git bash_it`
2. Run `install.sh` (it automatically backs up your `~/.bash_profile`)
3. Edit your `~/.bash_profile` file in order to customize bash-it.
git clone http://github.com/revans/bash-it.git bash_it **NOTE:**
The install script will also prompt you asking if you use [Jekyll](https://github.com/mojombo/jekyll).
cp ~/.bash_profile ~/.bash_profile_original This is to set up the `.jekyllconfig` file, which stores info necessary to use the Jekyll plugin.
cp <path/to/cloned/repo>/template/bash_profile.template.bash ~/.bash_profile
## Help Screens ## Help Screens
bash-it (will show all the help commands) ```
aliases-help bash-it (will show all the help commands)
rails-help aliases-help
git-help rails-help
plugins-help git-help
plugins-help
```
## Your Custom scripts, aliases, and functions ## Your Custom scripts, aliases, and functions
For custom scripts, and aliases, you can create the following files and they will be ignored by the git repo: For custom scripts, and aliases, just create the following files (they'll be ignored by the git repo):
* `aliases/custom.aliases.bash` * `aliases/custom.aliases.bash`
* `lib/custom.bash` * `lib/custom.bash`
* `plugins/custom.plugins.bash` * `plugins/custom.plugins.bash`
and anything in the custom directory will be ignored with the exception of `custom/example.bash`. Anything in the custom directory will be ignored, with the exception of `custom/example.bash`.
## Themes ## Themes
There are a few bash-it themes, but I'm hoping the community will jump in and create their own custom prompts and share their creations with everyone else by submitting a pull request to me (revans). There are a few bash it themes. If you've created your own custom prompts, I'd love it if you shared with everyone else! Just submit a Pull Request to me (revans).
## Help out ## Help out
I think all of us have our own custom scripts that we have added over time and so following in the footsteps of oh-my-zsh, bash-it was created as a framework for those who choose to use bash as their shell. As a community, I'm excited to see what everyone else has in their custom toolbox and am hoping that they'll share it with everyone by submitting a pull request to bash-it. I think everyone has their own custom scripts accumulated over time. And so, following in the footsteps of oh-my-zsh, bash it is a framework for easily customizing your bash shell. Everyone's got a custom toolbox, so let's start making them even better, **as a community!**
So, if you have contributions to bash-it, please send me a pull request and I'll take a look at it and commit it to the repo as long as it looks good. If you do change an existing command, please give an explanation as to why. That will help a lot when I merge your changes in. Thanks, and happing bashing! Send me a pull request and I'll merge it as long as it looks good. If you change an existing command, please give an explanation why. That will help a lot when I merge your changes in.
Thanks, and happing bashing!
## Contributors ## Contributors

View File

@ -46,15 +46,6 @@ alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
alias md='mkdir -p' alias md='mkdir -p'
alias rd=rmdir alias rd=rmdir
# show / hide hidden files
alias showhidden="defaults write com.apple.finder AppleShowAllFiles TRUE; killall Finder"
alias hidehidden="defaults write com.apple.finder AppleShowAllFiles FALSE; killall Finder"
# display IP address
alias myip="echo ethernet:; ipconfig getifaddr en0; echo wireless:; ipconfig getifaddr en1"
# http://snippets.dzone.com/posts/show/2486
alias killsvn="find . -name ".svn" -type d -exec rm -rf {} \;"
function aliases-help() { function aliases-help() {
echo "Generic Alias Usage" echo "Generic Alias Usage"
echo echo

View File

@ -39,6 +39,8 @@ case $OSTYPE in
;; ;;
esac esac
function git-help() { function git-help() {
echo "Git Custom Aliases Usage" echo "Git Custom Aliases Usage"
echo echo

View File

@ -1,23 +0,0 @@
# Open the root of your site in your vim or builtin cd to it
if [[ $EDITOR = "vim" ]]
then
alias newentry="builtin cd $JEKYLL_LOCAL_ROOT && $EDITOR ."
else
alias newentry="builtin cd $JEKYLL_LOCAL_ROOT"
fi
# Build and locally serve the site
alias testsite="builtin cd $JEKYLL_LOCAL_ROOT && jekyll --server --auto"
# Build but don't locally serve the site
alias buildsite="builtin cd $JEKYLL_LOCAL_ROOT && rm -rf _site/ && jekyll"
# Rsync the site to the remote server
alias deploysite="builtin cd $JEKYLL_LOCAL_ROOT && rsync -rz _site/ $JEKYLL_REMOTE_ROOT"
alias jkas="jekyll --auto --server"
alias rmjkas="rm -rf _site/* && jkas"

View File

@ -14,7 +14,6 @@ alias dashcode="open -a dashcode"
alias f='open -a Finder ' alias f='open -a Finder '
alias textedit='open -a TextEdit' alias textedit='open -a TextEdit'
alias hex='open -a "Hex Fiend"' alias hex='open -a "Hex Fiend"'
alias gitx="open -a GitX"
if [ -s /usr/bin/firefox ] ; then if [ -s /usr/bin/firefox ] ; then
unalias firefox unalias firefox

View File

@ -17,37 +17,22 @@ do
source $config_file source $config_file
done done
# Tab Completion # Load enabled aliases, completion, plugins
COMPLETION="${BASH}/completion/*.bash" for file_type in "aliases" "completion" "plugins"
for config_file in $COMPLETION
do
source $config_file
done
# Plugins
if [ ! -d "${BASH}/plugins/enabled" ]
then
mkdir "${BASH}/plugins/enabled"
ln -s ${BASH}/plugins/available/* "${BASH}/plugins/enabled"
fi
PLUGINS="${BASH}/plugins/enabled/*.bash"
for config_file in $PLUGINS
do
source $config_file
done
# Aliases
if [ ! -d "${BASH}/aliases/enabled" ]
then
mkdir "${BASH}/aliases/enabled"
ln -s ${BASH}/aliases/available/* "${BASH}/aliases/enabled"
fi
FUNCTIONS="${BASH}/aliases/enabled/*.bash"
for config_file in $FUNCTIONS
do do
if [ ! -d "${BASH}/${file_type}/enabled" ]
then
mkdir "${BASH}/${file_type}/enabled"
ln -s ${BASH}/${file_type}/available/* "${BASH}/${file_type}/enabled"
fi
FILES="${BASH}/${file_type}/enabled/*.bash"
for config_file in $FILES
do
source $config_file source $config_file
done
done done
# Load any custom aliases that the user has added
if [ -e "${BASH}/aliases/custom.aliases.bash" ] if [ -e "${BASH}/aliases/custom.aliases.bash" ]
then then
source "${BASH}/aliases/custom.aliases.bash" source "${BASH}/aliases/custom.aliases.bash"
@ -71,6 +56,13 @@ PREVIEW="less"
[ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview" [ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview"
[ -s /Applications/Preview.app ] && PREVIEW="/Applications/Preview.app" [ -s /Applications/Preview.app ] && PREVIEW="/Applications/Preview.app"
# Load all the Jekyll stuff
if [ -e $HOME/.jekyllconfig ]
then
. $HOME/.jekyllconfig
fi
# #
# Custom Help # Custom Help

View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
# Completion for gem
if [ -z "$REMOTE_GEMS" ]
then
REMOTE_GEMS=( $(gem list --remote --no-versions | tr '\n' ' ') )
fi
if [ -z "$LOCAL_GEMS" ]
then
LOCAL_GEMS=( $(gem list --no-versions | sed 's/\*\*\* LOCAL GEMS \*\*\*//' | tr '\n' ' ') )
fi
_installcomp() {
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "${REMOTE_GEMS[*]}" -- $cur) )
}
_uninstallcomp() {
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "${LOCAL_GEMS[*]}" -- $cur) )
}
_gem() {
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
case $prev in
install)
_installcomp
return 0
;;
uninstall)
_uninstallcomp
return 0
;;
esac
local commands=(build cert check cleanup contents dependency environment fetch generate_index help install list lock outdated owner pristine push query rdoc search server sources specification stale uninstall unpack update which)
COMPREPLY=( $(compgen -W "${commands[*]}" -- $cur) )
}
complete -F _gem gem

28
install.sh 100755
View File

@ -0,0 +1,28 @@
#!/usr/bin/env bash
cp $HOME/.bash_profile $HOME/.bash_profile.bak
echo "Your original .bash_profile has been backed up to .bash_profile.bak"
cp $HOME/.bash_it/template/bash_profile.template.bash $HOME/.bash_profile
echo "Copied the template .bash_profile into ~/.bash_profile, edit this file to customize bash-it"
while true
do
read -p "Do you use Jekyll? (If you don't know what Jekyll is, answer 'n') [Y/N] " RESP
case $RESP
in
[yY])
cp $HOME/.bash_it/template/jekyllconfig.template.bash $HOME/.jekyllconfig
echo "Copied the template .jekyllconfig into your home directory. Edit this file to customize bash-it for using the Jekyll plugins"
break
;;
[nN])
break
;;
*)
echo "Please enter Y or N"
esac
done

View File

@ -5,13 +5,6 @@ function git_remote {
git remote add origin $GIT_HOSTING:$1.git git remote add origin $GIT_HOSTING:$1.git
} }
# git add remote branch
function garb() {
echo "Adding remote branch '$1'";
git config branch.$1.remote origin;
git config branch.$1.merge refs/heads/$1;
}
function git_first_push { function git_first_push {
echo "Running: git push origin master:refs/heads/master" echo "Running: git push origin master:refs/heads/master"
git push origin master:refs/heads/master git push origin master:refs/heads/master
@ -99,3 +92,4 @@ else
echo "you're currently not in a git repository" echo "you're currently not in a git repository"
fi fi
} }

View File

@ -1,7 +1,30 @@
#!/bin/bash #!/bin/bash
editpost() { editpost() {
builtin cd "$JEKYLL_LOCAL_ROOT/_posts" unset SITE
if [ -z "$1" ]
then
echo "Error: no site specified."
echo "The site is the name of the directory your project is in."
return 1
fi
for site in ${SITES[@]}
do
if [ "$(basename $site)" = "$1" ]
then
SITE=$site
break
fi
done
if [ -z "$SITE" ]
then
echo "No such site."
return 1
fi
builtin cd "$SITE/_posts"
COUNTER=1 COUNTER=1
NUMBER="$RANDOM" NUMBER="$RANDOM"
@ -18,25 +41,51 @@ editpost() {
done done
less $TMPFILE less $TMPFILE
read -p "Number of post to edit: " POST_TO_EDIT read -p "Number of post to edit: " POST_TO_EDIT
if [ -z "$EDITOR" ] if [ -z "$JEKYLL_EDITOR" ]
then then
nano "${POSTS[$POST_TO_EDIT]}" nano "${POSTS[$POST_TO_EDIT]}"
else else
"$EDITOR" "${POSTS[$POST_TO_EDIT]}" "$JEKYLL_EDITOR" "${POSTS[$POST_TO_EDIT]}"
fi fi
} }
jknewpost() { newpost() {
unset SITE
if [ -z "$1" ]
then
echo "Error: no site specified."
echo "The site is the name of the directory your project is in."
return 1
fi
if [ -z "$SITE" ]
then
echo "No such site."
return 1
fi
loc=0
for site in ${SITES[@]}
do
if [ "$(basename $site)" = "$1" ]
then
SITE=$site
JEKYLL_FORMATTING=${MARKUPS[$loc]}
break
fi
loc=$(($loc+1))
done
# 'builtin cd' into the local jekyll root # 'builtin cd' into the local jekyll root
builtin cd "$JEKYLL_LOCAL_ROOT/_posts" builtin cd "$SITE/_posts"
# Get the date for the new post's filename # Get the date for the new post's filename
FNAME_DATE=$(date "+%Y-%m-%d") FNAME_DATE=$(date "+%Y-%m-%d")
# If the user is using markdown formatting, let them choose what type of post they want. Sort of like Tumblr. # If the user is using markdown or textile formatting, let them choose what type of post they want. Sort of like Tumblr.
OPTIONS="Text Quote Image Audio Video Link" OPTIONS="Text Quote Image Audio Video Link"
@ -204,5 +253,94 @@ jknewpost() {
# Open the file in your favorite editor # Open the file in your favorite editor
"$EDITOR" $FNAME "$JEKYLL_EDITOR" $FNAME
}
function testsite() {
unset SITE
if [ -z "$1" ]
then
echo "Error: no site specified."
echo "The site is the name of the directory your project is in."
return 1
fi
for site in ${SITES[@]}
do
if [ "$(basename $site)" = "$1" ]
then
SITE=$site
break
fi
done
if [ -z "$SITE" ]
then
echo "No such site."
return 1
fi
builtin cd $SITE
jekyll --server --auto
}
function buildsite() {
unset SITE
if [ -z "$1" ]
then
echo "Error: no site specified."
echo "The site is the name of the directory your project is in."
return 1
fi
for site in ${SITES[@]}
do
if [ "$(basename $site)" = "$1" ]
then
SITE=$site
break
fi
done
if [ -z "$SITE" ]
then
echo "No such site."
return 1
fi
builtin cd $SITE
rm -rf _site
jekyll --no-server
}
function deploysite() {
unset SITE
if [ -z "$1" ]
then
echo "Error: no site specified."
echo "The site is the name of the directory your project is in."
return 1
fi
loc=0
for site in ${SITES[@]}
do
if [ "$(basename $site)" = "$1" ]
then
SITE=$site
REMOTE=${REMOTES[$loc]}
break
fi
loc=$(($loc+1))
done
if [ -z "$SITE" ]
then
echo "No such site."
return 1
fi
builtin cd $SITE
rsync -rz $REMOTE
} }

View File

@ -32,6 +32,17 @@ function dock-switch() {
echo "dock-switch 3d." echo "dock-switch 3d."
fi fi
else else
echo "sorry. you're currently not using os x" echo "Sorry, this only works on Mac OS X"
fi fi
} }
# Download a file and open it in Preview
function prevcurl() {
if [ ! $(uname) = "Darwin" ]
then
echo "This function only works with Mac OS X"
return 1
fi
curl "$*" | open -fa "Preview"
}

View File

@ -26,18 +26,6 @@ export NGINX_PATH='/opt/nginx'
# Don't check mail when opening terminal. # Don't check mail when opening terminal.
unset MAILCHECK unset MAILCHECK
# Change this to the path of your local jekyll root to use the jekyll aliases
export JEKYLL_LOCAL_ROOT="$HOME/Sites/jekyllsite"
# And change this to the remote server and root
export JEKYLL_REMOTE_ROOT="user@server:/path/to/jekyll/root"
# And, for the last of the jekyll variables, this is the formatting you use, eg: markdown,
# textile, etc. Basically whatever you use as the extension for posts, without the preceding dot
export JEKYLL_FORMATTING="markdown"
# Change this to your console based IRC client of choice. # Change this to your console based IRC client of choice.

View File

@ -0,0 +1,21 @@
# This is a space-delimited list of your Jekyll project paths
SITES="$HOME/sites/project_1 $HOME/sites/project_2"
# This is another space-delimited list.
# This one is of the remote user@host:path location of your jekyll site
# NOTE: The locations of these must correspond to the locations
# of the sites in the first list
# For instance, the host for the first Jekyll site
# must be first in this list, the second second, etc.
REMOTES="user@host_1:path user@host_2:path"
# list of markup syntaxes to use for the sites,
# Same rules as above. Can be HTML, textile, or markdown
MARKUPS="markdown textile"
# If you want to use a different editor for Jekyll, change the value of this variable
JEKYLL_EDITOR="$EDITOR"

View File

@ -17,11 +17,12 @@ fi
doubletime_scm_prompt() { doubletime_scm_prompt() {
CHAR=$(scm_char) CHAR=$(scm_char)
if [ $CHAR = $SCM_NONE_CHAR ] if [ $CHAR = $SCM_NONE_CHAR ]; then
then
return return
else elif [ $CHAR = $SCM_GIT_CHAR ]; then
echo "$(git_prompt_status)" echo "$(git_prompt_status)"
else
echo "[$(scm_prompt_info)]"
fi fi
} }

View File

@ -1,7 +1,12 @@
prompt_setter() { #!/usr/bin/env bash
PS1="${cyan}\W${normal} "
SCM_THEME_PROMPT_PREFIX="${cyan}(${green}"
SCM_THEME_PROMPT_SUFFIX="${cyan})"
SCM_THEME_PROMPT_DIRTY=" ${red}"
SCM_THEME_PROMPT_CLEAN=" ${green}"
prompt() {
PS1="$(scm_prompt_info)${reset_color} ${cyan}\W${reset_color} "
} }
PROMPT_COMMAND=prompt_setter PROMPT_COMMAND=prompt
export PS3=">> "

View File

@ -0,0 +1,20 @@
#!/bin/bash
#
# Based on 'bobby' theme with the addition of virtualenv_prompt
#
SCM_THEME_PROMPT_DIRTY=" ${red}"
SCM_THEME_PROMPT_CLEAN=" ${green}"
SCM_THEME_PROMPT_PREFIX=" ${yellow}|${reset_color}"
SCM_THEME_PROMPT_SUFFIX="${yellow}|"
RVM_THEME_PROMPT_PREFIX="|"
RVM_THEME_PROMPT_SUFFIX="|"
VIRTUALENV_THEME_PROMPT_PREFIX='|'
VIRTUALENV_THEME_PROMPT_SUFFIX='|'
function prompt_command() {
PS1="\n${green}$(virtualenv_prompt)${red}$(rvm_version_prompt) ${reset_color}\h ${orange}in ${reset_color}\w\n${yellow}$(scm_char)$(scm_prompt_info) ${yellow}${white} "
}
PROMPT_COMMAND=prompt_command;