!Минималистичный менеджер плагинов zsh своими руками
2023-03-29T22:57:48+05:00
linux- Вопрос: Есть oh-my-zsh, чем он не устраивает?
- Ответ: Потому-что всё то что делает omz можно добится 4-мя функциями. И это без навязывания обновлений и рекламой их мерча.
Создаём zsh конфиг файл и вставляем данные функции
nvim functions.zsh
# Функция чтобы выполнять содержимое файла
# в текущей оболочке, если они существуют
function file() {
[ -f "$ZDOTDIR/$1" ] && source "$ZDOTDIR/$1"
}
# Функция для выполнения sparse clone вытягивания плагинов oh-my-zsh
# https://stackoverflow.com/a/13738951
function git_omz_plugins() (
rurl="$1" tmpdir="$ZDOTDIR/tmp" && shift "$4" # Для предотвращения "shift:1: shift count must be <= $#"
mkdir -p "$tmpdir"
cd "$tmpdir"
git init > /dev/null 2>&1
git remote add -f origin "$rurl" > /dev/null 2>&1
git config core.sparseCheckout true
# Loops over remaining args
for i; do
echo "$i" >> .git/info/sparse-checkout
done
git pull origin master > /dev/null 2>&1
echo "Удаляю .git"
rm -rf .git/
echo "Перемещаю плагин в $ZDOTDIR/plugins/"
mv plugins/* $ZDOTDIR/plugins/
echo "Удаляю $tmpdir"
rm -rf $tmpdir
echo "Функция git_omz_plugins завершена"
)
# Вытягивает плагин из репо omz
# https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins
function omz_plug() {
PLUGIN_NAME=$(echo $1 )
if [ -d "$ZDOTDIR/plugins/$PLUGIN_NAME" ]; then
# For plugins
file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.plugin.zsh" || \
file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.zsh"
else
if read -q "choice?Установить плагин $PLUGIN_NAME ?: "; then
echo
echo "Добавляю плагин $PLUGIN_NAME"
git_omz_plugins "http://github.com/ohmyzsh/ohmyzsh/" "plugins/$PLUGIN_NAME"
else
echo
echo "Пропускаю..."
fi
fi
}
# Вытягивает плагин из репо unixorn
# https://github.com/unixorn/awesome-zsh-plugins#plugins
function plug() {
PLUGIN_NAME=$(echo $1 | cut -d "/" -f 2)
if [ -d "$ZDOTDIR/plugins/$PLUGIN_NAME" ]; then
# For plugins
file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.plugin.zsh" || \
file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.zsh"
else
git clone "https://github.com/$1.git" "$ZDOTDIR/plugins/$PLUGIN_NAME"
fi
}
Вставляем в .zprofile
export XDG_CONFIG_HOME="$HOME/.config"
export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" # Папка zsh
export ZPLUGDIR="$ZDOTDIR/plugins" # Папка zsh плагинов
Вставляем в .zshrc
source "$ZDOTDIR/functions.zsh"
# Плагины (Автозагрузка, если отсутствуют)
# (plug) Для большего выбора плагинов: https://github.com/unixorn/awesome-zsh-plugins#plugins
plug "zsh-users/zsh-autosuggestions" # Автозаполнение
plug "zsh-users/zsh-syntax-highlighting" # Подсветка синтаксиса
plug "zsh-users/zsh-history-substring-search"
plug "MichaelAquilina/zsh-you-should-use" # Напоминалка о использовании aliases
plug "MichaelAquilina/zsh-auto-notify" # Уведомления shell
plug "hlissner/zsh-autopair" # Полезно для работы с кавычками
plug "romkatv/powerlevel10k" # Prompt
plug "junegunn/fzf" # Fuzzy finder (fzf_install функция находится в functions.zsh)
# plug "Aloxaf/fzf-tab" # TAB fzf функционал
# (omz_plug) Плагины из репо oh-my-zsh: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins
omz_plug "command-not-found" ; [[ ! -f /bin/pkgfile ]] && sudo pacman -S pkgfile --noconfirm && sudo pkgfile -u # Находит пакет если команда не найдена
omz_plug "dirhistory" # Быстрое перемещение по каталогам зажать alt+[стрелки]
source $ZPLUGDIR/zsh-you-should-use/you-should-use.plugin.zsh
source $ZPLUGDIR/zsh-auto-notify/auto-notify.plugin.zsh
source $ZPLUGDIR/powerlevel10k/powerlevel10k.zsh-theme