# 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}"
# temporary files directory
export TMPDIR="${HOME}/.TEMP"
# Если эта опция установлена и файл, проверяемый командным интерпретатором
# 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] (curr git branch)
# new line; user@host; prompt
#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
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/home/dimio/.sdkman"
[[ -s "/home/dimio/.sdkman/bin/sdkman-init.sh" ]] && source "/home/dimio/.sdkman/bin/sdkman-init.sh"