#!/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 # }}} ##########################################################################