96 lines
2.9 KiB
Bash
96 lines
2.9 KiB
Bash
# 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"
|
|
|
|
# Extend $PATH
|
|
[ -d ~/bin ] && PATH="~/bin:$PATH"
|
|
PATH="/usr/local/bin:$PATH"
|
|
command -v brew >/dev/null 2>&1 && PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
|
|
export PATH
|
|
|
|
# Load prompt and aliases
|
|
for file in ~/dotfiles/includes/{bash_prompt,bash_aliases,bash_functions}; do
|
|
[ -r "$file.bash" ] && source "$file.bash"
|
|
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
|
|
_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
|
|
|
|
# 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
|
|
[ -r "~/.bashlocal" ] && source "~/.bashlocal"
|