|
|
#!/usr/bin/env bash ############################################################ |
|
|
# |
|
|
# Изменён: Ср 03 ноя 2021 15:56:18 |
|
|
# |
|
|
################################################################################ |
|
|
|
|
|
################################ Общие настройки ############################### |
|
|
# {{{ Переменные окружения |
|
|
################################################################################ |
|
|
|
|
|
export BASH_ENV="$HOME/.bashrc" #Файл настроек интерпретатора |
|
|
export SHELLRC="$HOME/.shellrc" #Путь к директории настроек |
|
|
export BASHRC="$SHELLRC/etc/shell/bash" #Путь к настройкам bash |
|
|
export INPUTRC="$BASHRC/inputrc" #Файл inputrc |
|
|
export PLATFORM="$(uname -s | tr 'A-Z' 'a-z')" #Тип ОС |
|
|
|
|
|
export MANPATH="${MANPATH}:${SHELLRC}/var/man" #Локальные файлы руководства |
|
|
|
|
|
export GTK_IM_MODULE="xim" #Метод ввода Χ |
|
|
export QT_IM_MODULE="xim" #Метод ввода Χ |
|
|
|
|
|
source "${SHELLRC}/etc/wm/xdg/user-dirs.dirs" |
|
|
|
|
|
export HSTR_CONFIG="keywords-matching,blacklist,hicolor" #hstr |
|
|
export HSTR_PROMPT="> " |
|
|
|
|
|
export STARDICT_DATA_DIR=$SHELLRC/etc/soft/sdcv/dictionaries/ |
|
|
export SDCV_HISTSIZE=10000 |
|
|
#export SDCV_PAGER=less |
|
|
|
|
|
# export TERM=xterm |
|
|
export TERM=xterm-256color |
|
|
|
|
|
export GUILE_HISTORY="$SHELLRC/var/shell/guile.history" #История guile |
|
|
export GUILE_AUTO_COMPILE=0 #Запрет на автокомпиляцию |
|
|
|
|
|
export PAGER=less #Страничный просмотрщик |
|
|
export VISUAL="nvim -p" #Стандартный редактор |
|
|
export EDITOR="nvim -p" #Стандартный редактор |
|
|
|
|
|
export HELPSRC=() |
|
|
|
|
|
#Отображать статус прокрутки. |
|
|
#Интерпретировать контрольные последовательности. |
|
|
#Выходить автоматически, если текст помещается на экран. |
|
|
#Не очищать экран при выходе. |
|
|
#Подсвечивать только текущий результат поиска. |
|
|
#Объединять подряд идущие пустые строки. |
|
|
#Игнорировать регистр при поиске. |
|
|
#Подсвечивать новую строку при пролистывании экрана. |
|
|
#Показывать результат поиска в центре. |
|
|
export LESS="-M -R -F -X -g --squeeze-blank-lines --ignore-case -w --jump-target=.5" |
|
|
|
|
|
export LESSOPEN="|/usr/bin/lesspipe.sh %s" |
|
|
export LESSHISTFILE=/dev/null |
|
|
export LESSCOLOR=yes |
|
|
|
|
|
#Цвета ls |
|
|
export LS_COLORS=$(cat $BASHRC/ls_colors_generated) |
|
|
|
|
|
#Системная локаль |
|
|
export LC_ALL=ru_RU.UTF-8 |
|
|
export LC_CTYPE=ru_RU.UTF-8 |
|
|
|
|
|
export IGNOREEOF=3 #Закрывать оболочку по 3м C-d |
|
|
|
|
|
export LOGDIR=$SHELLRC/var/log #Директория журналов скриптов |
|
|
export MD=$SHELLRC/var/mail/ #Директория почты |
|
|
export MAILCAPS=$SHELLRC/etc/mail/mailcap/mailcap #~/.mailcap |
|
|
export CRON=$SHELLRC/etc/cron/crontab #Задания cron |
|
|
export TMP="/tmp" #Директория временных файлов |
|
|
|
|
|
#Настройки nnn |
|
|
export NN_USE_EDITOR=1 |
|
|
|
|
|
#Настройки cw |
|
|
export NOCOLOR_PIPE=1 |
|
|
#export CW_INVERT=1 |
|
|
|
|
|
#Настройки компилятора |
|
|
export CFLAGS="-O2 -pipe" |
|
|
export MAKEOPTS="-j $(getconf _NPROCESSORS_ONLN)" |
|
|
|
|
|
#Формат времени, выводимый командой time |
|
|
# real 0m32.155s |
|
|
# user 0m0.357s |
|
|
# sys 0m0.343s |
|
|
# CPU 2.17% |
|
|
# |
|
|
export TIMEFORMAT=$'real\t%3lR\nuser\t%3lU\nsys\t%3lS\nCPU\t%P%' |
|
|
|
|
|
#Настройка прокси |
|
|
export http_proxy= |
|
|
export HTTP_PROXY= |
|
|
# http_proxy=http://127.0.0.1:8118/ |
|
|
# proxy_address=$http_proxy |
|
|
# HTTP_PROXY=$http_proxy |
|
|
# export http_proxy HTTP_PROXY proxy_address |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Опции подсветки |
|
|
################################################################################ |
|
|
|
|
|
#Настройка цветовых кодов |
|
|
rstc="\033[00m" |
|
|
magenta="\033[0;35m" |
|
|
yellow="\033[1;33m" |
|
|
blue="\033[1;36m" |
|
|
red="\033[1;31m" |
|
|
green="\033[1;32m" |
|
|
grey="\033[0;37m" |
|
|
white="\033[1;1m" |
|
|
|
|
|
#Подсветка результатов grep |
|
|
export GREP_COLOR='1;31' |
|
|
|
|
|
#Настройка подсветки мануалов |
|
|
export LESS_TERMCAP_mb=$'\E[01;31m' |
|
|
export LESS_TERMCAP_md=$'\E[01;31m' |
|
|
export LESS_TERMCAP_me=$'\E[0m' |
|
|
export LESS_TERMCAP_se=$'\E[0m' |
|
|
export LESS_TERMCAP_so=$'\E[01;34;43m' |
|
|
export LESS_TERMCAP_ue=$'\E[0m' |
|
|
export LESS_TERMCAP_us=$'\E[01;32m' |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Настройка путей |
|
|
################################################################################ |
|
|
|
|
|
# removes duplicate paths |
|
|
# NOTE: symlinks aren't dereferenced (e.g., using `readlink`) as they may |
|
|
# exist for compatibility reasons |
|
|
#- Удаление директории(й) из PATH |
|
|
path-- () { |
|
|
local IFS=':' |
|
|
local newpath |
|
|
local i |
|
|
|
|
|
for i in ${!2}; do |
|
|
if [[ "$i" != "$1" ]]; then |
|
|
newpath=${newpath:+$newpath:}$i |
|
|
fi |
|
|
done |
|
|
export $2="$newpath" |
|
|
} |
|
|
|
|
|
#- Добавление директории(й) в PATH. path++ d:i:r:s PATH [before] |
|
|
path++ () { |
|
|
local IFS=':' |
|
|
local oldpath |
|
|
local i |
|
|
|
|
|
for i in $1; do |
|
|
if [[ -d "$i" ]]; then |
|
|
if [ -z "${!2:-}" ]; then |
|
|
export $2="" |
|
|
fi |
|
|
path-- $i $2 |
|
|
if [ "${3:-}" = "before" ]; then |
|
|
export $2="$i:${!2:+${!2}}" |
|
|
else |
|
|
export $2="${!2:+${!2}:}$i" |
|
|
fi |
|
|
#else |
|
|
#echo "$i is not a directory" >&2 |
|
|
fi |
|
|
done |
|
|
} |
|
|
|
|
|
INIT_PATH=$PATH |
|
|
|
|
|
if [ $UID -eq 0 ]; then |
|
|
TMOUT=600 |
|
|
PROMPT_COLOR='\033[1;31m' |
|
|
export HOME=/root |
|
|
|
|
|
# root's inputrc |
|
|
bind -f "$BASHRC/inputrc.root" 2>/dev/null |
|
|
|
|
|
path++ $INIT_PATH PATH |
|
|
path++ /sbin PATH |
|
|
path++ /usr/sbin PATH |
|
|
path++ /usr/local/sbin PATH |
|
|
else |
|
|
PROMPT_COLOR='\033[1;32m' |
|
|
|
|
|
path++ $INIT_PATH PATH |
|
|
#export HOME=$HOME |
|
|
fi |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Подключение псевдонимов |
|
|
################################################################################ |
|
|
|
|
|
if [[ -f "${BASHRC}/aliases" ]]; then |
|
|
ALIASES="${BASHRC}/aliases" |
|
|
HELPSRC+=("$ALIASES") |
|
|
source "$ALIASES" |
|
|
fi |
|
|
|
|
|
if [[ -f "${BASHRC}/aliases_${PLATFORM}" ]]; then |
|
|
PLATFORM_ALIASES="${BASHRC}/aliases_${PLATFORM}" |
|
|
HELPSRC+=("$PLATFORM_ALIASES") |
|
|
source "$PLATFORM_ALIASES" |
|
|
fi |
|
|
|
|
|
#Раскрывать псевдонимы в скриптах |
|
|
# shopt -s expand_aliases |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Загрузка системоспецифичных настроек |
|
|
################################################################################ |
|
|
|
|
|
[[ -f "${BASHRC}/bashrc_${PLATFORM}" ]] && . "${BASHRC}/bashrc_${PLATFORM}" |
|
|
|
|
|
# }}} ########################################################################## |
|
|
|
|
|
[[ "$-" != *i* ]] && return |
|
|
|
|
|
######################## Настройки интерактивного режима ####################### |
|
|
# {{{ Настройка приглашения |
|
|
################################################################################ |
|
|
|
|
|
[ -n "$SSH_CLIENT" ] && PROMPT_SSH="[${red}ssh${PROMPT_COLOR}]" |
|
|
|
|
|
# |
|
|
# ┌─(0)─[hostname]─[~/path] |
|
|
# └─(I)─[17:50:40]$ |
|
|
# |
|
|
PROMPT_COMMAND='__prompt_command; history -a' |
|
|
|
|
|
__prompt_command() { |
|
|
local EXIT="$?" |
|
|
|
|
|
# ┌─(0)─[hostname]─[VIFM: ~/path:git-branch] |
|
|
# └─(I)─[17:50:40]$ |
|
|
|
|
|
local PS1_JOBS="\[${PROMPT_COLOR}\]┌─(\[${yellow}\]\j\[${PROMPT_COLOR}\])" |
|
|
local PS1_HOST="─[\[${yellow}\]\h\[${PROMPT_COLOR}\]]\[${PROMPT_SSH}\]" |
|
|
|
|
|
# Сокращение текущей директории. В отличие от PROMPT_DIRTRIM выводит две директории в начале пути |
|
|
local PS1_PWD=$(pwd | sed 's@'$HOME'@~@; s@^\(\([~/][^/]*\)\{2\}/\).*\(\(/[^/]*\)\{2\}\)$@\1...\3@') |
|
|
|
|
|
local PS1_GIT_USER=$(git branch &> /dev/null && git user 2> /dev/null | sed -e 's/^/ (/' -e 's/$/)/') |
|
|
local PS1_GIT_BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \1/') |
|
|
|
|
|
local PS1_PATH="─[\[${red}\]${VIFM_SHELL}\[${yellow}\]${PS1_PWD}\[${PROMPT_COLOR}\]\[${magenta}\]${PS1_GIT_BRANCH}${PS1_GIT_USER}\[${PROMPT_COLOR}\]]" |
|
|
|
|
|
PS1="${PS1_JOBS}${PS1_HOST}${PS1_PATH}\n\[${PROMPT_COLOR}\]─[\[${PROMPT_COLOR}\]\t]" |
|
|
|
|
|
if [ $EXIT != 0 ]; then |
|
|
PS1+="\[${red}\]\\$ \[${rstc}\]" |
|
|
else |
|
|
PS1+="\[${green}\]\\$ \[${rstc}\]" |
|
|
fi |
|
|
} |
|
|
|
|
|
export PS2="$green-> $rstc" |
|
|
export PS3="$green+> $rstc" |
|
|
|
|
|
# + filename.sh:00NN: function(): command |
|
|
export PS4='$(printf "+ \033[1;32m%s:\033[0;36m%04d: \033[1;35m%s\033[00m" $(basename $BASH_SOURCE) $LINENO ${FUNCNAME[0]:+${FUNCNAME[0]}():\ })' |
|
|
|
|
|
export CDPATH=".:~/FILES:~/FILES/Projects:~/Downloads" |
|
|
export PROMPT_DIRTRIM=3 #В приглашении показывать 3 директории |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Настройка автодополнения |
|
|
################################################################################ |
|
|
|
|
|
export BASH_COMPLETION="$BASHRC/bash_completion" |
|
|
|
|
|
[ -f "${BASHRC}/bash_completion" ] && . "${BASHRC}/bash_completion" |
|
|
[ -f "${BASHRC}/bash_completion_custom" ] && . "${BASHRC}/bash_completion_custom" |
|
|
[ -f "${BASHRC}/bash_completion_${PLATFORM}" ] && . "${BASHRC}/bash_completion_${PLATFORM}" |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Настройка истории команд |
|
|
################################################################################ |
|
|
|
|
|
#Раздельная история для рута и пользователя |
|
|
export HISTFILE=$SHELLRC/var/shell/bash.history-$(whoami | awk '{print $1}';exit) |
|
|
export HISTSIZE=100000 #Размер истории |
|
|
export HISTFILESIZE=900000 #Размер файла истории |
|
|
export HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S ' #Формат записи истории |
|
|
export HISTCONTROL="ignoreboth" #Игнорировать '^ ' и дубликаты |
|
|
export HISTIGNORE="&:[bf]g:h:c:exit:,ww:dirs:~:..:.-:,w,w:,m:ls:\:q:t:\?" #Не записывать в историю |
|
|
|
|
|
# }}} ########################################################################## |
|
|
# {{{ Прочие настройки |
|
|
################################################################################ |
|
|
|
|
|
#Права на создаваемые файлы |
|
|
if [ $UID -eq 0 ]; then |
|
|
# -rw-r--r-- |
|
|
umask 0022 |
|
|
else |
|
|
# -rw------- |
|
|
umask 0077 |
|
|
fi |
|
|
|
|
|
shopt -s progcomp |
|
|
shopt -s histappend #Не добавлять команды, не переписывая историю |
|
|
shopt -s cmdhist #Сохранение многострочной команды в одной строке |
|
|
shopt -s cdable_vars #Аргументы cd могут быть переменными |
|
|
shopt -s cdspell #Исправление ошибок в именах директорий |
|
|
shopt -s checkhash #Проверка на существование команд в хеш-таблице |
|
|
shopt -s lithist #Заменять ';' на '\n' в многострочных командах |
|
|
shopt -s histreedit #Повторное редактирование команды |
|
|
shopt -s promptvars #Раскрывать значения переменных в приглашении |
|
|
shopt -s hostcomplete #Дополнение имен хостов (@...) |
|
|
shopt -s interactive_comments #Игнорирование строк, начинающихся на # |
|
|
shopt -s dotglob #Подстановка скрытых файлов |
|
|
shopt -s nocaseglob #Подстановка без учета регистра |
|
|
shopt -s checkwinsize #Проверять размер окна терминала |
|
|
shopt -s no_empty_cmd_completion #Не дополнять пустую строку |
|
|
shopt -s xpg_echo #echo -e -E |
|
|
shopt -s extglob #Расширенное сопоставление с образцами |
|
|
shopt -s globstar #Включение масок ** и **/ (рекурсивный перебор) |
|
|
shopt -s autocd #Интерпретировать команды как параметры cd |
|
|
shopt -s checkjobs #При выходе проверять фоновые задания |
|
|
shopt -s dirspell #Исправление имен директорий при автодополнении |
|
|
|
|
|
set -o noclobber #Не перезаписывать существующие файлы (для перезаписи использовать >|) |
|
|
|
|
|
# ?(шаблон) Количество появлений указанного шаблона, равное нулю или единице |
|
|
# *(шаблон) Количество появлений указанного шаблона, равное нулю или больше |
|
|
# +(шаблон) Одно или большее количество появлений указанного шаблона |
|
|
# @(шаблон) Одно появление указанного шаблона |
|
|
# !(шаблон) Всё, кроме одного появления указанного шаблона |
|
|
|
|
|
#Привычные комбинации клавиш для режима vi |
|
|
bind -m vi-command ".":insert-last-argument |
|
|
bind -m vi-insert "\C-l.":clear-screen |
|
|
bind -m vi-insert "\C-a.":beginning-of-line |
|
|
bind -m vi-insert "\C-e.":end-of-line |
|
|
bind -m vi-insert "\C-w.":backward-kill-word |
|
|
bind -m vi-insert "\C-o":history-search-backward |
|
|
bind -m vi-insert "\C-k":kill-line |
|
|
# bind -m vi-insert "\C-n":history-search-forward |
|
|
|
|
|
bind '"\e\C-e":shell-expand-line' |
|
|
bind '"\e[Z":shell-expand-line' |
|
|
bind '"\C-x*":glob-expand-word' |
|
|
bind '"\e\C-g":glob-expand-word' |
|
|
|
|
|
bind '"\C-f":"vifm\n"' |
|
|
|
|
|
#hstr |
|
|
bind '"\C-r": "\C-ahh \C-j"' |
|
|
|
|
|
# bind '"\C-r": "\C-aprintf \033c\e]20;;100x100+1000+1000\a \C-j"' |
|
|
|
|
|
#commacd |
|
|
source "$SHELLRC/etc/shell/bash/commacd" |
|
|
|
|
|
# alias grep="/usr/bin/grep $GREP_OPTIONS" |
|
|
unset GREP_OPTIONS |
|
|
|
|
|
#Исправление ошибок с набором акцентов |
|
|
# if [ "$TERM" == "xterm" ]; then |
|
|
printf '\33]701;%s\007' "$LANG" |
|
|
# fi |
|
|
|
|
|
# }}} ########################################################################## |
|
|
|
|
|
|