|
| 1 | +# ~/.bashrc: executed by bash(1) for non-login shells. |
| 2 | +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) |
| 3 | +# for examples |
| 4 | + |
| 5 | +# If not running interactively, don't do anything |
| 6 | +[ -z "$PS1" ] && return |
| 7 | + |
| 8 | +# don't put duplicate lines in the history. See bash(1) for more options |
| 9 | +# ... or force ignoredups and ignorespace |
| 10 | +HISTCONTROL=ignoredups:ignorespace |
| 11 | + |
| 12 | +# append to the history file, don't overwrite it |
| 13 | +shopt -s histappend |
| 14 | + |
| 15 | +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) |
| 16 | +HISTSIZE=1000 |
| 17 | +HISTFILESIZE=2000 |
| 18 | + |
| 19 | +# check the window size after each command and, if necessary, |
| 20 | +# update the values of LINES and COLUMNS. |
| 21 | +shopt -s checkwinsize |
| 22 | + |
| 23 | +# make less more friendly for non-text input files, see lesspipe(1) |
| 24 | +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" |
| 25 | + |
| 26 | +# set variable identifying the chroot you work in (used in the prompt below) |
| 27 | +if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then |
| 28 | + debian_chroot=$(cat /etc/debian_chroot) |
| 29 | +fi |
| 30 | + |
| 31 | +# set a fancy prompt (non-color, unless we know we "want" color) |
| 32 | +case "$TERM" in |
| 33 | + xterm-color|rxvt-unicode) color_prompt=yes;; |
| 34 | +esac |
| 35 | + |
| 36 | +# uncomment for a colored prompt, if the terminal has the capability; turned |
| 37 | +# off by default to not distract the user: the focus in a terminal window |
| 38 | +# should be on the output of commands, not on the prompt |
| 39 | +#force_color_prompt=yes |
| 40 | + |
| 41 | +if [ -n "$force_color_prompt" ]; then |
| 42 | + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then |
| 43 | + # We have color support; assume it's compliant with Ecma-48 |
| 44 | + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such |
| 45 | + # a case would tend to support setf rather than setaf.) |
| 46 | + color_prompt=yes |
| 47 | + else |
| 48 | + color_prompt= |
| 49 | + fi |
| 50 | +fi |
| 51 | + |
| 52 | +if [ "$color_prompt" = yes ]; then |
| 53 | + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' |
| 54 | +else |
| 55 | + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
| 56 | +fi |
| 57 | +unset color_prompt force_color_prompt |
| 58 | + |
| 59 | +# If this is an xterm set the title to user@host:dir |
| 60 | +case "$TERM" in |
| 61 | +xterm*|rxvt-unicode) |
| 62 | + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \W\a\]$PS1" |
| 63 | + ;; |
| 64 | +*) |
| 65 | + ;; |
| 66 | +esac |
| 67 | + |
| 68 | +# enable color support of ls and also add handy aliases |
| 69 | +if [ -x /usr/bin/dircolors ]; then |
| 70 | + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" |
| 71 | + alias ls='ls --color=auto' |
| 72 | + #alias dir='dir --color=auto' |
| 73 | + #alias vdir='vdir --color=auto' |
| 74 | + |
| 75 | + alias grep='grep --color=auto' |
| 76 | + alias fgrep='fgrep --color=auto' |
| 77 | + alias egrep='egrep --color=auto' |
| 78 | +fi |
| 79 | + |
| 80 | +# some more ls aliases |
| 81 | +alias ll='ls -alF' |
| 82 | +alias la='ls -A' |
| 83 | +alias l='ls -CF' |
| 84 | + |
| 85 | +# Add an "alert" alias for long running commands. Use like so: |
| 86 | +# sleep 10; alert |
| 87 | +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo nfs || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' |
| 88 | + |
| 89 | +# Alias definitions. |
| 90 | +# You may want to put all your additions into a separate file like |
| 91 | +# ~/.bash_aliases, instead of adding them here directly. |
| 92 | +# See /usr/share/doc/bash-doc/examples in the bash-doc package. |
| 93 | + |
| 94 | +if [ -f ~/.bash_aliases ]; then |
| 95 | + . ~/.bash_aliases |
| 96 | +fi |
| 97 | + |
| 98 | +# enable programmable completion features (you don't need to enable |
| 99 | +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile |
| 100 | +# sources /etc/bash.bashrc). |
| 101 | +if [ -f /etc/bash_completion ] && ! shopt -oq posix; then |
| 102 | + . /etc/bash_completion |
| 103 | +fi |
| 104 | + |
| 105 | +# wrap_alias takes three arguments: |
| 106 | +# $1: The name of the alias |
| 107 | +# $2: The command used in the alias |
| 108 | +# $3: The arguments in the alias all in one string |
| 109 | +# Generate a wrapper completion function (completer) for an alias |
| 110 | +# based on the command and the given arguments, if there is a |
| 111 | +# completer for the command, and set the wrapper as the completer for |
| 112 | +# the alias. |
| 113 | +function wrap_alias() { |
| 114 | + [[ "$#" == 3 ]] || return 1 |
| 115 | + |
| 116 | + local alias_name="$1" |
| 117 | + local aliased_command="$2" |
| 118 | + local alias_arguments="$3" |
| 119 | + local num_alias_arguments=$(echo "$alias_arguments" | wc -w) |
| 120 | + |
| 121 | + # The completion currently being used for the aliased command. |
| 122 | + local completion=$(complete -p $aliased_command 2> /dev/null) |
| 123 | + |
| 124 | + # Only a completer based on a function can be wrapped so look for -F |
| 125 | + # in the current completion. This check will also catch commands |
| 126 | + # with no completer for which $completion will be empty. |
| 127 | + echo $completion | grep -q -- -F || return 0 |
| 128 | + |
| 129 | + local namespace=alias_completion:: |
| 130 | + |
| 131 | + # Extract the name of the completion function from a string that |
| 132 | + # looks like: something -F function_name something |
| 133 | + # First strip the beginning of the string up to the function name by |
| 134 | + # removing "* -F " from the front. |
| 135 | + local completion_function=${completion##* -F } |
| 136 | + # Then strip " *" from the end, leaving only the function name. |
| 137 | + completion_function=${completion_function%% *} |
| 138 | + |
| 139 | + # Try to prevent an infinite loop by not wrapping a function |
| 140 | + # generated by this function. This can happen when the user runs |
| 141 | + # this twice for an alias like ls='ls --color=auto' or alias l='ls' |
| 142 | + # and alias ls='l foo' |
| 143 | + [[ "${completion_function#$namespace}" != $completion_function ]] && return 0 |
| 144 | + |
| 145 | + local wrapper_name="${namespace}${alias_name}" |
| 146 | + |
| 147 | + eval " |
| 148 | +function ${wrapper_name}() { |
| 149 | + let COMP_CWORD+=$num_alias_arguments |
| 150 | + args=( \"${alias_arguments}\" ) |
| 151 | + COMP_WORDS=( $aliased_command \${args[@]} \${COMP_WORDS[@]:1} ) |
| 152 | + $completion_function |
| 153 | + } |
| 154 | +" |
| 155 | + |
| 156 | + # To create the new completion we use the old one with two |
| 157 | + # replacements: |
| 158 | + # 1) Replace the function with the wrapper. |
| 159 | + local new_completion=${completion/-F * /-F $wrapper_name } |
| 160 | + # 2) Replace the command being completed with the alias. |
| 161 | + new_completion="${new_completion% *} $alias_name" |
| 162 | + |
| 163 | + eval "$new_completion" |
| 164 | +} |
| 165 | + |
| 166 | +# For each defined alias, extract the necessary elements and use them |
| 167 | +# to call wrap_alias. |
| 168 | +eval "$(alias -p | sed -e 's/alias \([^=][^=]*\)='\''\([^ ][^ ]*\) *\(.*\)'\''/wrap_alias \1 \2 '\''\3'\'' /')" |
| 169 | + |
| 170 | +unset wrap_alias |
| 171 | + |
| 172 | +stty -ixon |
| 173 | +export BROWSER=chromium-browser |
| 174 | +export EDITOR="vim" |
| 175 | + |
| 176 | +export VIRTUAL_ENV_DISABLE_PROMPT=1 |
| 177 | + |
| 178 | +export DEBFULLNAME='Jakh Daven' |
| 179 | +export DEBEMAIL= '[email protected]' |
| 180 | +export GIT_PS1_SHOWDIRTYSTATE=true |
| 181 | + |
| 182 | +export PLATFORM='linux' |
| 183 | +export MANPAGER="/bin/sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu noma' -\"" |
| 184 | +export COMMAND_NOT_FOUND_INSTALL_PROMPT=1 |
| 185 | + |
| 186 | +PATH=$PATH:~/.bin/ |
| 187 | +GOPATH=~/Work/go |
| 188 | +PATH=$PATH:$GOPATH/bin |
0 commit comments