diff --git a/15-options.zsh b/15-options.zsh index 111529b..8f07b1c 100644 --- a/15-options.zsh +++ b/15-options.zsh @@ -13,12 +13,14 @@ zle -N edit-command-line autoload -Uz select-word-style select-word-style shell -if is-at-least 5.1; then - autoload -Uz bracketed-paste-magic - zle -N bracketed-paste bracketed-paste-magic +if [ -z ${DISABLE_MAGIC_FUNCTIONS+set} ]; then + if is-at-least 5.1; then + autoload -Uz bracketed-paste-magic + zle -N bracketed-paste bracketed-paste-magic + fi + autoload -Uz url-quote-magic + zle -N self-insert url-quote-magic fi -autoload -Uz url-quote-magic -zle -N self-insert url-quote-magic # Подсветка вывода основных команд [[ -r /etc/grc.zsh ]] && source /etc/grc.zsh diff --git a/42-zinit.zsh b/42-zinit.zsh index 4c5668a..f438cc5 100644 --- a/42-zinit.zsh +++ b/42-zinit.zsh @@ -14,3 +14,9 @@ source "$ZINIT[HOME_DIR]/zinit.zsh" autoload -Uz _zinit (( ${+_comps} )) && _comps[zinit]=_zinit +# Расширение zinit для загрузки файлов +zinit light zdharma-continuum/z-a-patch-dl + +# Расширение zinit для запуска программ и скриптов, расположенных вне $PATH +zinit light zdharma-continuum/z-a-bin-gem-node + diff --git a/45-plugins.zsh b/45-plugins.zsh index e3fee5f..2368f02 100644 --- a/45-plugins.zsh +++ b/45-plugins.zsh @@ -17,7 +17,6 @@ zinit snippet OMZP::autojump zinit snippet OMZP::command-not-found zinit snippet OMZP::common-aliases zinit snippet OMZP::debian -zinit snippet OMZP::fzf zinit snippet OMZP::isodate zinit snippet OMZP::mosh zinit snippet OMZP::nmap @@ -27,7 +26,14 @@ zinit snippet OMZP::vscode zinit snippet OMZP::web-search zinit load brymck/print-alias -zinit ice lucid wait'0' +zinit ice wait'!0' from"gh-r" as"program" +zinit light junegunn/fzf + +zinit ice wait'!0' mv"completion.zsh -> _fzf" pick"_fzf" as"completion" +zinit snippet https://github.com/junegunn/fzf/blob/master/shell/completion.zsh +zinit snippet https://github.com/junegunn/fzf/blob/master/shell/key-bindings.zsh + +zinit ice wait'!0' lucid zinit light joshskidmore/zsh-fzf-history-search if command -v git > /dev/null 2>&1; then diff --git a/55-agents.zsh b/55-agents.zsh index 4176ff3..467d9a2 100644 --- a/55-agents.zsh +++ b/55-agents.zsh @@ -11,7 +11,12 @@ ## # GPG agent ## -# zinit snippet OMZP::gpg-agent +if command -v gpg-agent >/dev/null 2>&1; then + zinit snippet OMZP::gpg-agent +fi +if command -v gpg-conf >/dev/null 2>&1; then + gpgconf --create-socketdir +fi ## # Keychain diff --git a/82-completion.zsh b/82-completion.zsh index 75bbdd3..ad2898d 100644 --- a/82-completion.zsh +++ b/82-completion.zsh @@ -25,7 +25,7 @@ zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^<->.<-> # marlonrichert/zsh-autocomplete -zinit wait lucid for \ +zinit wait'!0' lucid light-mode depth=1 for \ atinit"ZINIT[COMPINIT_OPTS]=-C; zicompinit; zicdreplay" \ zdharma-continuum/fast-syntax-highlighting \ blockf \ @@ -35,6 +35,10 @@ zinit wait lucid for \ zstyle ":history-search-multi-word" page-size "$(($LINES/2))" zstyle ":plugin:history-search-multi-word" clear-on-cancel "yes" -zinit load zdharma-continuum/history-search-multi-word -bindkey "^K" history-search-multi-word +zinit wait'!0' lucid light-mode depth=1 for \ + zdharma-continuum/history-search-multi-word \ + atload"bindkey '^[[A' history-substring-search-up; \ + bindkey '^[[B' history-substring-search-down; \ + bindkey '^K' history-search-multi-word " \ + zsh-users/zsh-history-substring-search diff --git a/85-keybindings.zsh b/85-keybindings.zsh index 70ec07b..610c3e5 100644 --- a/85-keybindings.zsh +++ b/85-keybindings.zsh @@ -1,5 +1,11 @@ # Defined shortcut keys: [Esc] [Esc] -bindkey -M emacs '\e\e' send-break -bindkey -M vicmd '\e\e' send-break -bindkey -M viins '\e\e' send-break +bindkey '\e\e' send-break + +# FZF #{{{ +bindkey "^F" fzf-file-widget # Ctrl+F file search +bindkey "^[[A" fzf-history-widget # Up +bindkey "^[[B" fzf-history-widget # Down +bindkey "${terminfo[kcuu1]}" fzf-history-widget # Up +bindkey "${terminfo[kcud1]}" fzf-history-widget # Down +#}}} diff --git a/README.md b/README.md index b49ba70..f179219 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,7 @@ sudo apt-get install git zsh Установка желательных пакетов: ```sh -sudo apt-get install autojump grc grepcidr keychain kitty-terminfo peco wmctrl xdotool -``` - -Если в системе установлен пакет `fzf`, лучше его удалить, так как устанавливаемый -плагин может с ним конфликтовать: - -```sh -sudo apt-get remove fzf +sudo apt-get install autojump command-not-found grc grepcidr kitty-terminfo wmctrl xdotool ``` Клонирование репозитория в каталог `~/.config/zsh`: @@ -50,12 +43,50 @@ sudo usermod -s /usr/bin/zsh username cp ~/.config/zsh/55-agents.zsh ~/.config/zsh/55-agents.user.zsh ``` -## Настройка GPG агента +## Настройка SSH агента + +Установить необходимые пакеты: + +```sh +sudo apt install openssh-client +``` Раскомментировать в файле ` ~/.config/zsh/55-agents.user.zsh` строки: ```sh -# zinit snippet OMZP::gpg-agent +# if command -v ssh-agent >/dev/null 2>&1; then +# zstyle :omz:plugins:ssh-agent agent-forwarding on +# zstyle :omz:plugins:ssh-agent identities id_rsa +# zstyle :omz:plugins:ssh-agent lifetime 10h +# zinit snippet OMZP::ssh-agent +# fi +``` + +Добавить в конец файла `~/.ssh/config` правило для разрешения агенту сохранять ключи: + +```text +Host * + AddKeysToAgent yes +``` + + +## Настройка GPG агента + +Установить необходимые пакеты: + +```sh +sudo apt install openssh-client gpg-agent gpgconf +``` + +Раскомментировать в файле ` ~/.config/zsh/55-agents.user.zsh` строки: + +```sh +# if command -v gpg-agent >/dev/null 2>&1; then +# zinit snippet OMZP::gpg-agent +# if command -v gpg-conf >/dev/null 2>&1; then +# gpgconf --create-socketdir +# fi +# fi ``` Пример файла настройки GPG агента `~/.config/gnupg/gpg-agent.conf`: @@ -71,27 +102,8 @@ pinentry-program /usr/bin/pinentry-qt ``` Чтобы включить в GPG агенте поддержку SSH, нужно раскомментировать -последнюю строку. - - -## Настройка SSH агента - -Раскомментировать в файле ` ~/.config/zsh/55-agents.user.zsh` строки: - -```sh -# zstyle :omz:plugins:ssh-agent agent-forwarding on -# zstyle :omz:plugins:ssh-agent identities id_rsa -# zstyle :omz:plugins:ssh-agent lifetime 10h -# zinit snippet OMZP::ssh-agent -``` - -Добавить в конец файла `~/.ssh/config` правило для разрешения агенту сохранять ключи: - -```text -Host * - AddKeysToAgent yes - IdentityFile ~/.ssh/id_rsa -``` +последнюю строку и отредактировать файл `~/.ssh/config`, как это описано +в разделе настройки SSH. ## Настройка Keychain @@ -104,13 +116,21 @@ Host * use-ssh-agent ``` +Установить необходимые пакеты: + +```sh +sudo apt install keychain openssh-client gpg-agent gpgconf +``` + Раскомментировать в файле ` ~/.config/zsh/55-agents.user.zsh` строки: ```sh -# zstyle :omz:plugins:keychain identities id_rsa 01234567 -# zstyle :omz:plugins:keychain options --quiet --inherit local-once --noask --nocolor --quick -# zstyle :omz:plugins:keychain agents gpg,ssh -# zinit snippet OMZP::keychain +# if command -v keychain >/dev/null 2>&1; then +# zstyle :omz:plugins:keychain identities id_rsa 01234567 +# zstyle :omz:plugins:keychain options --quiet --inherit any-once --noask --nocolor --absolute --dir ~/.cache/keychain +# zstyle :omz:plugins:keychain agents gpg,ssh +# zinit snippet OMZP::keychain +# fi ``` Отредактировать файлы настроек для агента GPG и SSH, как это описано в разделах выше. diff --git a/fixes.zsh b/fixes.zsh index 0692637..e2162f8 100644 --- a/fixes.zsh +++ b/fixes.zsh @@ -4,7 +4,7 @@ # где отсутствует пакет kitty-terminfo fix-kitty-terminal-support() { mkdir -p $HOME/.terminfo/x - wget -qO - https://github.com/kovidgoyal/kitty/raw/master/terminfo/x/xterm-kitty > ~/.terminfo/x/xterm-kitty + wget -qO - https://github.com/kovidgoyal/kitty/raw/master/terminfo/x/xterm-kitty > $HOME/.terminfo/x/xterm-kitty } # Настройка mc для работы в терминале kitty @@ -12,14 +12,14 @@ fix-kitty-terminal-support() { # При вызове функции с параметром -f текущие настройки клавиш # для работы mc в терминале kitty будут перезаписаны fix-mc-kitty-support() { - local mc_cfg="${HOME}/.config/mc/ini" + local cfg="${HOME}/.config/mc/ini" - [[ "$1" == "-f" ]] && sed -i '/\[terminal:xterm-kitty\]/,/^$/{d}' "${mc_cfg}" - if [ -w "${mc_cfg}" ]; then - if ! grep -qF "[terminal:xterm-kitty]" "${mc_cfg}" ; then - echo >> "${mc_cfg}" - echo "[terminal:xterm-kitty]" >> "${mc_cfg}" - echo "copy=xterm" >> "${mc_cfg}" + [[ "$1" == "-f" ]] && sed -i '/\[terminal:xterm-kitty\]/,/^$/{d}' "${cfg}" + if [ -w "${cfg}" ]; then + if ! grep -qF "[terminal:xterm-kitty]" "${cfg}" ; then + echo >> "${cfg}" + echo "[terminal:xterm-kitty]" >> "${cfg}" + echo "copy=xterm" >> "${cfg}" fi fi }