Merge branch 'master' of git://github.com/revans/bash-it

pull/62/head
Anton Shemerey 2011-06-28 12:22:47 +03:00
commit 692d358f43
17 changed files with 406 additions and 231 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

@ -6,12 +6,19 @@ Includes some autocompletion tools, theming support, aliases, custom functions,
## 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. Check a clone of this repo:
git clone http://github.com/revans/bash-it.git bash_it git clone http://github.com/revans/bash-it.git bash_it
cp ~/.bash_profile ~/.bash_profile_original Then run the `install.sh` file, it will backup your `~/.bash_profile`
cp <path/to/cloned/repo>/template/bash_profile.template.bash ~/.bash_profile file and move the template one into it's place (the template file is at
`~/.bash_it/template/bash_profile.template.bash`). Be sure to edit this
template file in order to customize bash-it.
The install script will also prompt
you asking if you use [Jekyll](https://github.com/mojombo/jekyll). This
is to set up the `.jekyllconfig` file, the file that stores the
information needed to use the Jekyll plugin supplied with bash it.
## Help Screens ## Help Screens
@ -34,13 +41,13 @@ and anything in the custom directory will be ignored with the exception of `cust
## 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, 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).
## 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 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.
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! 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!
## Contributors ## Contributors

View File

@ -1,20 +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"

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 do
source $config_file if [ ! -d "${BASH}/${file_type}/enabled" ]
done then
mkdir "${BASH}/${file_type}/enabled"
# Plugins ln -s ${BASH}/${file_type}/available/* "${BASH}/${file_type}/enabled"
if [ ! -d "${BASH}/plugins/enabled" ] fi
then FILES="${BASH}/${file_type}/enabled/*.bash"
mkdir "${BASH}/plugins/enabled" for config_file in $FILES
ln -s ${BASH}/plugins/available/* "${BASH}/plugins/enabled" do
fi source $config_file
PLUGINS="${BASH}/plugins/enabled/*.bash" done
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
source $config_file
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

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

@ -1,208 +1,346 @@
#!/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
COUNTER=1 for site in ${SITES[@]}
NUMBER="$RANDOM" do
TMPFILE="/tmp/editpost-$NUMBER" if [ "$(basename $site)" = "$1" ]
then
SITE=$site
break
fi
done
for POST in * if [ -z "$SITE" ]
do then
DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"` echo "No such site."
TITLE=`cat $POST | grep -oE "title: (.+)"` return 1
TITLE=`echo $TITLE | sed 's/title: //'` fi
echo "$COUNTER) $DATE $TITLE" >> "$TMPFILE"
POSTS[$COUNTER]=$POST builtin cd "$SITE/_posts"
COUNTER=`expr $COUNTER + 1`
done COUNTER=1
less $TMPFILE NUMBER="$RANDOM"
read -p "Number of post to edit: " POST_TO_EDIT TMPFILE="/tmp/editpost-$NUMBER"
if [ -z "$EDITOR" ]
then for POST in *
nano "${POSTS[$POST_TO_EDIT]}" do
else DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"`
"$EDITOR" "${POSTS[$POST_TO_EDIT]}" TITLE=`cat $POST | grep -oE "title: (.+)"`
fi TITLE=`echo $TITLE | sed 's/title: //'`
echo "$COUNTER) $DATE $TITLE" >> "$TMPFILE"
POSTS[$COUNTER]=$POST
COUNTER=`expr $COUNTER + 1`
done
less $TMPFILE
read -p "Number of post to edit: " POST_TO_EDIT
if [ -z "$EDITOR" ]
then
nano "${POSTS[$POST_TO_EDIT]}"
else
"$EDITOR" "${POSTS[$POST_TO_EDIT]}"
fi
} }
newpost() { 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
# 'builtin cd' into the local jekyll root if [ -z "$SITE" ]
then
echo "No such site."
return 1
fi
builtin cd "$JEKYLL_LOCAL_ROOT/_posts" loc=0
# Get the date for the new post's filename for site in ${SITES[@]}
do
if [ "$(basename $site)" = "$1" ]
then
SITE=$site
JEKYLL_FORMATTING=${MARKUPS[$loc]}
break
fi
loc=$(($loc+1))
done
FNAME_DATE=$(date "+%Y-%m-%d") # 'builtin cd' into the local jekyll root
# If the user is using markdown formatting, let them choose what type of post they want. Sort of like Tumblr. builtin cd "$SITE/_posts"
OPTIONS="Text Quote Image Audio Video Link" # Get the date for the new post's filename
if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
then
select OPTION in $OPTIONS
do
if [[ $OPTION = "Text" ]]
then
POST_TYPE="Text"
break
fi
if [[ $OPTION = "Quote" ]] FNAME_DATE=$(date "+%Y-%m-%d")
then
POST_TYPE="Quote"
break
fi
if [[ $OPTION = "Image" ]]
then
POST_TYPE="Image"
break
fi
if [[ $OPTION = "Audio" ]] # If the user is using markdown or textile formatting, let them choose what type of post they want. Sort of like Tumblr.
then
POST_TYPE="Audio"
break
fi
if [[ $OPTION = "Video" ]] OPTIONS="Text Quote Image Audio Video Link"
then
POST_TYPE="Video"
break
fi
if [[ $OPTION = "Link" ]] if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
then then
POST_TYPE="Link" select OPTION in $OPTIONS
break do
fi if [[ $OPTION = "Text" ]]
done then
fi POST_TYPE="Text"
break
fi
# Get the title for the new post if [[ $OPTION = "Quote" ]]
then
POST_TYPE="Quote"
break
fi
read -p "Enter title of the new post: " POST_TITLE if [[ $OPTION = "Image" ]]
then
POST_TYPE="Image"
break
fi
# Convert the spaces in the title to hyphens for use in the filename if [[ $OPTION = "Audio" ]]
then
POST_TYPE="Audio"
break
fi
FNAME_POST_TITLE=`echo $POST_TITLE | tr ' ' "-"` if [[ $OPTION = "Video" ]]
then
POST_TYPE="Video"
break
fi
# Now, put it all together for the full filename if [[ $OPTION = "Link" ]]
then
POST_TYPE="Link"
break
fi
done
fi
FNAME="$FNAME_DATE-$FNAME_POST_TITLE.$JEKYLL_FORMATTING" # Get the title for the new post
# And, finally, create the actual post file. But we're not done yet... read -p "Enter title of the new post: " POST_TITLE
touch "$FNAME" # Convert the spaces in the title to hyphens for use in the filename
# Write a little stuff to the file for the YAML Front Matter FNAME_POST_TITLE=`echo $POST_TITLE | tr ' ' "-"`
echo "---" >> $FNAME # Now, put it all together for the full filename
# Now we have to get the date, again. But this time for in the header (YAML Front Matter) of FNAME="$FNAME_DATE-$FNAME_POST_TITLE.$JEKYLL_FORMATTING"
# the file
YAML_DATE=$(date "+%B %d %Y %X") # And, finally, create the actual post file. But we're not done yet...
# Echo the YAML Formatted date to the post file touch "$FNAME"
echo "date: $YAML_DATE" >> $FNAME # Write a little stuff to the file for the YAML Front Matter
# Echo the original post title to the YAML Front Matter header echo "---" >> $FNAME
echo "title: $POST_TITLE" >> $FNAME # Now we have to get the date, again. But this time for in the header (YAML Front Matter) of
# the file
# And, now, echo the "post" layout to the YAML Front Matter header YAML_DATE=$(date "+%B %d %Y %X")
echo "layout: post" >> $FNAME # Echo the YAML Formatted date to the post file
# Close the YAML Front Matter Header echo "date: $YAML_DATE" >> $FNAME
echo "---" >> $FNAME # Echo the original post title to the YAML Front Matter header
echo >> $FNAME
# Generate template text based on the post type echo "title: $POST_TITLE" >> $FNAME
if [[ $JEKYLL_FORMATTING = "markdown" ]] # And, now, echo the "post" layout to the YAML Front Matter header
then
if [[ $POST_TYPE = "Text" ]]
then
true
fi
if [[ $POST_TYPE = "Quote" ]] echo "layout: post" >> $FNAME
then
echo "> Quote" >> $FNAME
echo >> $FNAME
echo "&mdash; Author" >> $FNAME
fi
if [[ $POST_TYPE = "Image" ]] # Close the YAML Front Matter Header
then
echo "![Alternate Text](/path/to/image/or/url)" >> $FNAME
fi
if [[ $POST_TYPE = "Audio" ]] echo "---" >> $FNAME
then echo >> $FNAME
echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
fi
if [[ $POST_TYPE = "Video" ]] # Generate template text based on the post type
then
echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
fi
if [[ $POST_TYPE = "Link" ]]
then
echo "[link][1]" >> $FNAME
echo >> $FNAME
echo "> Quote" >> $FNAME
echo >> $FNAME
echo "[1]: url" >> $FNAME
fi
fi
if [[ $JEKYLL_FORMATTING = "textile" ]] if [[ $JEKYLL_FORMATTING = "markdown" ]]
then then
if [[ $POST_TYPE = "Text" ]] if [[ $POST_TYPE = "Text" ]]
then then
true true
fi fi
if [[ $POST_TYPE = "Quote" ]] if [[ $POST_TYPE = "Quote" ]]
then then
echo "bq. Quote" >> $FNAME echo "> Quote" >> $FNAME
echo >> $FNAME echo >> $FNAME
echo "&mdash; Author" >> $FNAME echo "&mdash; Author" >> $FNAME
fi fi
if [[ $POST_TYPE = "Image" ]] if [[ $POST_TYPE = "Image" ]]
then then
echo "!url(alt text)" >> $FNAME echo "![Alternate Text](/path/to/image/or/url)" >> $FNAME
fi fi
if [[ $POST_TYPE = "Audio" ]] if [[ $POST_TYPE = "Audio" ]]
then then
echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
fi fi
if [[ $POST_TYPE = "Video" ]] if [[ $POST_TYPE = "Video" ]]
then then
echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
fi fi
if [[ $POST_TYPE = "Link" ]] if [[ $POST_TYPE = "Link" ]]
then then
echo "\"Site\":url" >> $FNAME echo "[link][1]" >> $FNAME
echo >> $FNAME echo >> $FNAME
echo "bq. Quote" >> $FNAME echo "> Quote" >> $FNAME
fi echo >> $FNAME
fi echo "[1]: url" >> $FNAME
fi
fi
# Open the file in your favorite editor if [[ $JEKYLL_FORMATTING = "textile" ]]
then
if [[ $POST_TYPE = "Text" ]]
then
true
fi
"$EDITOR" $FNAME if [[ $POST_TYPE = "Quote" ]]
then
echo "bq. Quote" >> $FNAME
echo >> $FNAME
echo "&mdash; Author" >> $FNAME
fi
if [[ $POST_TYPE = "Image" ]]
then
echo "!url(alt text)" >> $FNAME
fi
if [[ $POST_TYPE = "Audio" ]]
then
echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
fi
if [[ $POST_TYPE = "Video" ]]
then
echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
fi
if [[ $POST_TYPE = "Link" ]]
then
echo "\"Site\":url" >> $FNAME
echo >> $FNAME
echo "bq. Quote" >> $FNAME
fi
fi
# Open the file in your favorite editor
"$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

@ -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,17 @@
# 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"

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;