Skip to content

Instantly share code, notes, and snippets.

@s3rgeym
Created November 22, 2024 07:03
Show Gist options
  • Save s3rgeym/eb051cedb8790b0c705cd12c16550249 to your computer and use it in GitHub Desktop.
Save s3rgeym/eb051cedb8790b0c705cd12c16550249 to your computer and use it in GitHub Desktop.
#!/usr/bin/zsh
# Экспортируемые переменные доступны ТОЛЬКО в сессии терминала и, порождаемых
# им процессах. Для приложений, которые запускаются не из терминала, переменные
# прописываются в ~/.zshenv либо /etc/environment для всех пользователей. Так же
# переменные можно задать через ~/.config/environment.d/
export TERM=xterm-256color
# Переменные окружения и алиасы лучше объявлять после инициализации antigen, так как они могут быть переопределены в плагинах. Однако, некоторые переменные окружения используются в плагинах.
export ZDOTDIR=${ZDOTDIR:-$HOME}
export ZSH="${ZDOTDIR}/oh-my-zsh"
# https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/asdf/asdf.plugin.zsh#L3
export ASDF_DATA_DIR="${XDG_DATA_HOME:-$HOME}/.asdf"
# Это костыль который позволяет обойти захардкоженное поведение vim и разместить конфиг в любом месте
export VIMINIT=':so $MYVIMRC'
# В ~/.config лучше не переносить, так много где захардкожен ~/.vim
export MYVIMRC='~/.vim/.vimrc'
# Настройки плагинов должны быть до их подключения
# Настройки для плагина ssh-agent
zstyle :omz:plugins:ssh-agent agent-forwarding on
zstyle :omz:plugins:ssh-agent identities id_rsa id_ed25519
zstyle :omz:plugins:ssh-agent lifetime 4h
# Проверки нужны для избежания вывода ошибок, например, при монтировании home в distrobox
# Альтернатива antigen https://github.com/mattmc3/antidote
# https://getantidote.github.io/
# yay -S zsh-antidote
if [ -f '/usr/share/zsh-antidote/antidote.zsh' ]; then
# Lazy-load antidote and generate the static load file only when needed
zsh_plugins=${ZDOTDIR:-$HOME}/.zsh_plugins
if [[ ! ${zsh_plugins}.zsh -nt ${zsh_plugins}.txt ]]; then
(
source '/usr/share/zsh-antidote/antidote.zsh'
antidote bundle <${zsh_plugins}.txt >${zsh_plugins}.zsh
)
fi
source ${zsh_plugins}.zsh
fi
# Основные Настройки
# Настройки для автодополнения и навигации
setopt auto_cd # Автоматически переходить в директорию по имени
setopt auto_list # Автоматически показывать список вариантов при неоднозначном завершении
setopt auto_menu # Автоматически использовать меню для выбора вариантов
setopt complete_in_word # Дополнять слова внутри команды
# Настройки для исправления ошибок
setopt correct # Исправлять опечатки в командах
setopt correct_all # Исправлять опечатки во всех аргументах команд
export CORRECT_IGNORE='_*' # Игнорировать файлы, начинающиеся с подчеркивания
# Настройки для истории команд
export HISTFILE=$ZDOTDIR/.zsh_history # Указываем файл для хранения истории команд
export HISTSIZE=1000000 # Увеличиваем размер истории команд
export SAVEHIST=1000000 # Увеличиваем размер сохраняемой истории команд
setopt share_history # Синхронизировать историю между сессиями терминала
setopt append_history # Добавлять команды в историю, а не перезаписывать её
setopt hist_ignore_all_dups # Игнорировать дубликаты команд в истории
setopt hist_reduce_blanks # Убирать лишние пробелы в командах перед сохранением
setopt inc_append_history # Добавлять команды в историю по мере их ввода
setopt extended_history # Добавлять метку времени к командам в истории
setopt hist_no_store # Не сохранять команду history в истории
setopt hist_ignore_dups # Игнорировать повторы команд при поиске по истории
# Настройки для комментариев и расширенного глоббинга
setopt interactive_comments # Разрешить комментарии в интерактивных сессиях
setopt extended_glob # Включить ограниченное использование регулярных выражений вместе с '*'
# Улучшение стиля автодополнения
zstyle ':completion:*' menu select # Выбирать варианты с помощью стрелок
zstyle ':completion:*' group-name '' # Группировать результаты по категориям
zstyle ':completion:*' completer _expand _complete _ignored _approximate # Включить приблизительные совпадения для автодополнения
# Автоматически развернуть алиасы
setopt aliases
# Автоматически развернуть переменные окружения
setopt auto_param_keys
# Автоматически добавлять слэш после завершения директории
setopt auto_param_slash
# Автоматически удалять слэш после завершения файла
setopt auto_remove_slash
# Автоматически заменять '~' на домашнюю директорию
setopt auto_name_dirs
# Автоматически заменять '..' на '../..' и т.д.
setopt auto_pushd
# Игнорировать дубликаты в стеке директорий
setopt pushd_ignore_dups
# Не показывать сообщение о том, что директория изменилась
setopt pushd_silent
# Не добавлять символ '%' в вывод
unsetopt prompt_cr prompt_sp
# Отключить магические функции для вставки \ перед ? и т.п.
DISABLE_MAGIC_FUNCTIONS=true
# Стираем с помощью Ctrl-W ссылки целиком
backward-kill-url() {
local WORDCHARS='*?_-.[]~=/&:;!#$%^(){}<>'
zle backward-kill-word
}
zle -N backward-kill-url
bindkey '^W' backward-kill-url
# Создаем директорию
if [ ! -d "$ZDOTDIR/zshrc.d" ]; then
mkdir -p "$ZDOTDIR/zshrc.d"
fi
# Подключаем вспомогательные файлы
for src in $ZDOTDIR/zshrc.d/*.zsh; do
. "$src"
done
# Подсветка синтаксиса в less + возможность с помощью less просматривать архивы
# yay -S lesspipe
if command -v lesspipe.sh &>/dev/null; then
eval "$(lesspipe.sh)"
fi
# Менеджер сниппетов для терминала
# yay -S pet-bin
if command -v pet &>/dev/null; then
function prev() {
PREV=$(fc -lrn | head -n 1)
sh -c "pet new `printf %q "$PREV"`"
}
function pet-select() {
BUFFER=$(pet search --query "$LBUFFER")
CURSOR=$#BUFFER
zle redisplay
}
# Добавляем вызов по Ctrl+S
zle -N pet-select
stty -ixon
bindkey '^s' pet-select
fi
# Проверка эмулятора терминала в котором запускается сессия zsh
if [[ "$(cat /proc/$PPID/comm)" != "yakuake" ]]; then
# Без true промпт будет красным, тк не перехвачена ошибка
[ "$(command -v fastfetch)" ] && fastfetch || true
fi
# TERM_PROGRAM — это программа, запустившая эмулятор, например, vscode
if [ -n "$ALACRITTY_WINDOW_ID" ] && [ "$(command -v zellij)" ]; then
eval "$(zellij setup --generate-auto-start zsh)"
fi
source /home/sergey/.config/broot/launcher/bash/br
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment