# bashrc - основной файл настроек для оболочки bash.
# Функции вынесены в bash_functions,
# а справка по ним - в bash_usage
# dimio (http://dimio.org)
# See more: http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html
# and:
# http://rus-linux.net/nlib.php?name=/MyLDP/BOOKS/Bash-Guide-1.12-ru/bash-guide-03-1.html
# VERSION='1.12'

# если bash запущен в неинтерактивном режиме (напр. вызван
# из скрипта) - не применять настройки, выйти
#[[ "$-" = *i* ]] && return 0 # return work only in functions
[[ -z "${PS1}" ]] && return 0

# set user processes limit
ulimit -u 1000

# Set RU unicode locale (if it exists and nod set previously)
if [[ "${LANG}" != ru_* && $( locale -a | grep 'ru_RU.utf8' ) ]]; then
    export LANG='ru_RU.utf8';
fi

# --> НАСТРОЙКИ ОБОЛОЧКИ BASH
# путь для хранения почты
export MAIL="${HOME}/.Mail/${USER}"
# Если эта опция установлена и файл, проверяемый командным интерпретатором
# bash как почтовый ящик, читался с момента последней проверки,
# выдается сообщение "The mail in имя_файла has been read".
shopt -s mailwarn

# bash будет пытаться исправлять допущенные вами опечатки
# (пропуски и перестановки символов, например /ect/init.d
# вместо /etc/init.d) в пути ТОЛЬКО у команды cd.
shopt -s cdspell
# исправление небольших ошибок в написании имени директории при автодополнении
shopt -s dirspell
# запретить выход из консоли, имеющей активные задания
shopt -s checkjobs
# использовать конструкцию вида **, обозначающую
# все файлы, начиная с текущего каталога, рекурсивно
shopt -s globstar
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
#shopt -s checkwinsize
# поддержка расширеннх возможностей сопоставления с образцом в имени файла
shopt -s extglob

# подключить локальные настройки для хоста,
# функции и справку по ним, доп. пользовательские настройки.
# source может быть записана, как точка (.)
BASH_CONFIG_DIR="${HOME}/.config/bash"
if [[ -d ${BASH_CONFIG_DIR} ]]; then
    if [[ -r "${BASH_CONFIG_DIR}/bash_text-colors" ]]; then
        # "bash" - use bash escape symbols, "tput" - use tput
        BASH_COLOR_MODE="tput"
        source "${BASH_CONFIG_DIR}/bash_text-colors"
        #COLOR_PROMPT=yes
    fi
    source "${BASH_CONFIG_DIR}/bashrc_local"
    source "${BASH_CONFIG_DIR}/bash_functions"
    source "${BASH_CONFIG_DIR}/bash_usage"
    source "${BASH_CONFIG_DIR}/bash_path-expand"
    # or "-x $( /usr/bin/env git )" ?
    # type - built-in analog for "which"
    if [[ -x $( type -p git ) && -r "${BASH_CONFIG_DIR}/bash_git-prompt" ]]; then
        # simple bash git prompt: http://habrahabr.ru/post/248881/#comment_8244107
        # or fast multiple VCS info parser for prompt: https://bitbucket.org/gward/vcprompt
        source "${BASH_CONFIG_DIR}/bash_git-prompt"
        export GIT_PS1_SHOWDIRTYSTATE=1 # mark unstaged/staged changes in PS1
        export GIT_PS1_SHOWUNTRACKEDFILES=1 # mark untracked files in PS1
    fi
fi
# если доступен файл с описаниями для автодополнения команд
# оболочки - подгрузить и использовать его
if [[ -r /etc/bash_completion ]]; then
    source /etc/bash_completion
fi

# Fix SSH auth socket location so agent forwarding works with tmux,
# also see tmux.conf
[[ -z "${SSH_AUTH_SOCK}" ]] && export SSH_AUTH_SOCK="${HOME}/.ssh/ssh-agent_auth_sock"
if [[ ! -S "${SSH_AUTH_SOCK}" ]]; then
    $(ssh-agent -a "${SSH_AUTH_SOCK}") > /dev/null 2>&1
    #echo "${SSH_AGENT_PID}" > "${HOME}/.ssh/ssh-agent_pid"
fi
#if [[ -z "${SSH_AGENT_PID}" ]]; then
    #export SSH_AGENT_PID=$(cat "${HOME}/.ssh/ssh-agent_pid")
#fi
# <-- НАСТРОЙКИ ОБОЛОЧКИ BASH

# --> НАСТРОЙКИ ТЕРМИНАЛА И СТРОКИ ПРИГЛАШЕНИЯ
# устанавливает идентификатор работы в изолированном окружении
#if [ -z "${debian_chroot}" ] && [ -r /etc/debian_chroot ]; then
    #debian_chroot=$(cat /etc/debian_chroot)
#fi

# Show nesting level for shell current instance
#if [[ ${SHLVL} -gt 1 ]]; then
    #SH_NESTING_LVL='['$(( ${SHLVL} - 1 ))'] ' # remove confusion under tmux
#else
    #SH_NESTING_LVL='[0] '
#fi

if [[ -n "${VCSH_REPO_NAME}" ]]; then
    VCSH_PS1='VCSH: "'"${VCSH_REPO_NAME}"'" '
fi

# Prompt line format example:
# new line; [current work dir] <yellow>(curr git branch)</yellow>
# new line; user@<hostcolor>host</hostcolor>; <cyan>prompt</cyan>
#PS1='\n[\w]'${txtylw}'$(__git_ps1)'${txtrst}
PS1='\n[\w]'${txtylw}'$(__git_ps1 " (${VCSH_PS1}%s)")'${txtrst}'\n'
#PS1+=${SH_NESTING_LVL}
PS1+='\u@'${PS1_host_color}'\h'${txtrst}' '${txtcyn}'\$ '${txtrst}
#PS1+='\u@'${PS1_host_color}'\h'${txtrst}' '${txtcyn}'\$ '${txtrst}
# <-- НАСТРОЙКИ ТЕРМИНАЛА И СТРОКИ ПРИГЛАШЕНИЯ

# --> НАСТРОЙКИ СОХРАНЕНИЯ ИСТОРИИ КОМАНД
# файл для хранения истории команд
export HISTFILE="${BASH_CONFIG_DIR}/bash_history"
# принудительное вкл. настроек ignoredups и ignorespace
# ignoredups - не сохранять строки, совпадающие с последней выполненной командой
# ignorespace - не сохранять команды, начинающиеся с пробела
export HISTCONTROL="ignoreboth"
# Не сохранять в истории вызовы перечисленных комманд:
export HISTIGNORE="&:ls:[bf]g:exit:history"
# сохранить все строки многострочной команды в одной записи списка истории
# это позволяет легко редактировать многострочные команды.
shopt -s cmdhist
# настройки длины списка истории команд устанавливаются при
# помощи HISTSIZE и HISTFILESIZE (man bash)
# append to the history file, don't overwrite it
shopt -s histappend
export HISTSIZE=10000
export HISTFILESIZE=10000
# сохранять историю команд мгновенно, а не после завершения текущей сессии
PROMPT_COMMAND='history -a'
# <-- НАСТРОЙКИ СОХРАНЕНИЯ ИСТОРИИ КОМАНД

# --> НАСТРОЙКИ ОКРУЖЕНИЯ И ВЫВОДА КОМАНД
# сделать вывод less для не-текстовых файлов более понятным, см. lesspipe(1)
[[ -x $( type -p lesspipe ) ]] && eval "$(SHELL=/bin/sh lesspipe)"

[[ -x $( type -p most ) ]] && export PAGER=most
# <-- НАСТРОЙКИ ОКРУЖЕНИЯ И ВЫВОДА КОМАНД

# --> ALIAS
# алиасы можно вынести в отдельный файл для удобства
#if [[ -r "${BASH_CONFIG_DIR}/bash_alias" ]]; then
#    source "${BASH_CONFIG_DIR}/bash_alias"
#fi

# включение поддержки цветного вывода некоторых команд
# если она установлена в системе
if [[ -x $( type -p dircolors ) ]]; then
    eval "$( dircolors -b )"
    alias ls='ls --color=auto'
    alias dir='dir --color=auto --format=vertical'
    alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# alias для различных команд
alias ll='ls -lhp'
alias lf='ls -lhF'
alias la='ls -lhap'
alias ping='ping -c 5'
alias pwgen='pwgen -syc'
alias top='htop'
alias rsync='rsync -P'
# df - вывод в человекопонятном виде, выводим типы ФС
alias df='df --human-readable --print-type'

# source bc mathlib extension
# (or use: export BC_ENV_ARGS="-l ${HOME}/.config/bc/extensions.bc" )
alias bc='bc -l "${HOME}/.config/bc/extensions.bc"'

# запуск Midnight Commander с цветовой схемой xoria под 256 цветов
alias mc='mc -S xoria256'

# создать плейлист из файлов в текущем каталоге и его подкаталогах
alias plgen='find "$(pwd)" \( -name "*.mp3" -o  -name "*.ogg" \) | sort > playlist.m3u'

# cpr = копирование через rsync с выводом прогресса
alias cpr='rsync --progress'

# переход по дереву каталогов "влево" и "вправо".
# пример: есть каталоги 1А и 1Б, переход из 1А в 1Б - "вправо"
alias gp='cd $(find .. -maxdepth 1 -type d | grep -C1 `basename $PWD` | head -n1)'
alias gn='cd $(find .. -maxdepth 1 -type d | grep -C1 `basename $PWD` | tail -n1)'

# | xclip или | xsel -b -i
# быстрая вставка вывода команды на сервис pastebin
# используется скрипт pastebinput
# http://dimio.org/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=dev&s=pastebinput.pl&l=pl
alias pbout='pastebinput -u http://pastebin.dimio.org -n dimio -r'
# <-- ALIAS