dotfiles/tilde/bash_profile.bash

139 lines
4.4 KiB
Bash
Raw Normal View History

2012-10-10 14:05:57 +00:00
# Don't put duplicate lines in the history
2012-10-12 08:53:13 +00:00
export HISTCONTROL=ignoreboth:erasedups
2012-10-10 14:05:57 +00:00
# Set history length
HISTFILESIZE=1000000000
HISTSIZE=1000000
# Append to the history file, don't overwrite it
shopt -s histappend
2012-10-12 08:53:13 +00:00
# Check the window size after each command and, if necessary, update the values of LINES and COLUMNS
2012-10-10 14:05:57 +00:00
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
2012-10-12 08:53:13 +00:00
# Do not autocomplete when accidentally pressing Tab on an empty line. (It takes forever and yields "Display all 15 gazillion possibilites?")
2012-12-12 11:18:25 +00:00
shopt -s no_empty_cmd_completion
2012-10-12 08:53:13 +00:00
# Do not overwrite files when redirecting using ">". Note that you can still override this with ">|"
2012-12-12 11:18:25 +00:00
set -o noclobber
2012-10-10 14:05:57 +00:00
# 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
2012-10-12 08:53:13 +00:00
# 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"
2013-04-25 13:47:58 +00:00
[ -d /usr/local/opt/ruby/bin ] && _prepend_path "/usr/local/opt/ruby/bin"
2013-10-30 19:33:36 +00:00
[ -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"
2012-10-15 11:14:21 +00:00
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)"
2012-10-15 11:14:21 +00:00
# Load prompt and aliases
for file in ~/dotfiles/includes/bash_{prompt,aliases,functions,git}.bash; do
[ -r "$file" ] && source "$file"
2012-10-15 11:00:57 +00:00
done
unset file
2012-10-12 08:53:13 +00:00
# If possible, add tab completion for many commands
2012-10-10 14:05:57 +00:00
[ -f /etc/bash_completion ] && source /etc/bash_completion
2012-10-15 11:00:57 +00:00
# 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"
2012-10-10 14:05:57 +00:00
# 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
2012-10-10 14:05:57 +00:00
2013-10-03 17:20:54 +00:00
# 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
2012-10-12 08:53:13 +00:00
# Nano is default editor
2012-10-16 12:11:28 +00:00
export EDITOR='nano'
2012-10-10 14:05:57 +00:00
# Tell ls to be colourful
export CLICOLOR=1
# Tell grep to highlight matches
export GREP_OPTIONS='--color=auto'
2012-10-12 08:53:13 +00:00
# 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'
2012-10-19 11:54:20 +00:00
# Load extra (private) settings
2013-02-04 10:32:58 +00:00
[ -f ~/.bashlocal ] && source ~/.bashlocal