dotfiles/tilde/bash_profile.bash
2013-10-30 23:33:36 +04:00

139 lines
4.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Don't put duplicate lines in the history
export HISTCONTROL=ignoreboth:erasedups
# Set history length
HISTFILESIZE=1000000000
HISTSIZE=1000000
# Append to the history file, don't overwrite it
shopt -s histappend
# Check the window size after each command and, if necessary, update the values of LINES and COLUMNS
shopt -s checkwinsize
# Autocorrect typos in path names when using `cd`
shopt -s cdspell
# Save all lines of a multiple-line command in the same history entry (allows easy re-editing of multi-line commands)
shopt -s cmdhist
# Do not autocomplete when accidentally pressing Tab on an empty line. (It takes forever and yields "Display all 15 gazillion possibilites?")
shopt -s no_empty_cmd_completion
# Do not overwrite files when redirecting using ">". Note that you can still override this with ">|"
set -o noclobber
# Enable some Bash 4 features when possible:
# * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux`
# * Recursive globbing, e.g. `echo **/*.txt`
for option in autocd globstar; do
shopt -s "$option" 2> /dev/null
done
# Locale
export LC_ALL=en_US.UTF-8
export LANG="en_US"
# Prepend $PATH without duplicates
function _prepend_path() {
if ! $( echo "$PATH" | tr ":" "\n" | grep -qx "$1" ) ; then
PATH="$1:$PATH"
fi
}
# Construct $PATH
PATH='/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'
[ -d /usr/local/bin ] && _prepend_path "/usr/local/bin"
[ -d /usr/local/share/npm/bin ] && _prepend_path "/usr/local/share/npm/bin"
[ -d /usr/local/opt/ruby/bin ] && _prepend_path "/usr/local/opt/ruby/bin"
[ -d /usr/local/share/python ] && _prepend_path "/usr/local/share/python"
command -v brew >/dev/null 2>&1 && _prepend_path "$(brew --prefix coreutils)/libexec/gnubin"
[ -d ~/dotfiles/bin ] && _prepend_path "$HOME/dotfiles/bin"
[ -d ~/bin ] && _prepend_path "$HOME/bin"
export PATH
# Colors
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
YELLOW="$(tput setaf 3)"
BLUE="$(tput setaf 4)"
MAGENTA="$(tput setaf 5)"
CYAN="$(tput setaf 6)"
WHITE="$(tput setaf 7)"
GRAY="$(tput setaf 8)"
BOLD="$(tput bold)"
UNDERLINE="$(tput sgr 0 1)"
INVERT="$(tput sgr 1 0)"
NOCOLOR="$(tput sgr0)"
# Load prompt and aliases
for file in ~/dotfiles/includes/bash_{prompt,aliases,functions,git}.bash; do
[ -r "$file" ] && source "$file"
done
unset file
# If possible, add tab completion for many commands
[ -f /etc/bash_completion ] && source /etc/bash_completion
# Bash completion (installed via Homebrew; source after `brew` is added to PATH)
command -v brew >/dev/null 2>&1 && [ -r "$(brew --prefix)/etc/bash_completion" ] && source "$(brew --prefix)/etc/bash_completion"
# Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards
function _ssh_reload_autocomplete() {
[ -e "~/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2)" scp sftp ssh
}
_ssh_reload_autocomplete
# Grunt completion
command -v grunt >/dev/null 2>&1 && eval "$(grunt --completion=bash)"
# Tamia generator completion
function _tamia_autocomplete() {
# List of subgenerators
local available=$(for file in /usr/local/share/npm/lib/node_modules/generator-tamia/*/index.js; do echo $file | cut -d / -f 9; done)
# The word fragment
local word=${COMP_WORDS[COMP_CWORD]}
# Dont attempt to filter w/`grep` if `$word` is empty
local filtered=$(if [ -z "$word" ]; then echo "$available"; else echo "$available" | grep $word; fi)
COMPREPLY=($filtered)
}
command -v yo >/dev/null 2>&1 && complete -F _tamia_autocomplete tm
# Nano is default editor
export EDITOR='nano'
# Tell ls to be colourful
export CLICOLOR=1
# Tell grep to highlight matches
export GREP_OPTIONS='--color=auto'
# Make less the default pager, and specify some useful defaults.
less_options=(
# If the entire text fits on one screen, just show it and quit. (Be more
# like "cat" and less like "more".)
--quit-if-one-screen
# Do not clear the screen first.
--no-init
# Like "smartcase" in Vim: ignore case unless the search pattern is mixed.
--ignore-case
# Do not automatically wrap long lines.
--chop-long-lines
# Allow ANSI colour escapes, but no other escapes.
--RAW-CONTROL-CHARS
# Do not ring the bell when trying to scroll past the end of the buffer.
--quiet
# Do not complain when we are on a dumb terminal.
--dumb
);
export LESS="${less_options[*]}"
unset less_options
export PAGER='less'
# Load extra (private) settings
[ -f ~/.bashlocal ] && source ~/.bashlocal