feat: managed zsh config + optional installers + version bump action
This commit is contained in:
@@ -5,6 +5,7 @@ set -e
|
||||
ZSH_DIR="${HOME}/.oh-my-zsh"
|
||||
ZDOTDIR="${HOME}"
|
||||
ZSHRC_URL="https://raw.githubusercontent.com/ushst/my-zsh/main/.zshrc"
|
||||
ZSHRC_MANAGED_URL="https://raw.githubusercontent.com/ushst/my-zsh/main/zshrc.managed"
|
||||
PLUGINS_REPO1="https://github.com/zsh-users/zsh-autosuggestions"
|
||||
PLUGINS_REPO2="https://github.com/zsh-users/zsh-syntax-highlighting.git"
|
||||
# =============================
|
||||
@@ -23,22 +24,95 @@ echo "[*] Установка плагинов..."
|
||||
git clone "$PLUGINS_REPO1" ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions || true
|
||||
git clone "$PLUGINS_REPO2" ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting || true
|
||||
|
||||
echo "[*] Загрузка конфигурации .zshrc..."
|
||||
wget -O "${ZDOTDIR}/.zshrc" "$ZSHRC_URL"
|
||||
echo "[*] Установка загрузчика .zshrc (my-zsh)..."
|
||||
# Ставим loader один раз: если он уже установлен, не перезаписываем ~/.zshrc.
|
||||
if [ -f "${ZDOTDIR}/.zshrc" ] && grep -q "my-zsh loader + auto-updater" "${ZDOTDIR}/.zshrc" 2>/dev/null; then
|
||||
echo "[*] ~/.zshrc уже установлен как my-zsh loader — пропускаю."
|
||||
else
|
||||
# Не теряем существующий ~/.zshrc: делаем бэкап, если он есть.
|
||||
if [ -f "${ZDOTDIR}/.zshrc" ]; then
|
||||
cp -f "${ZDOTDIR}/.zshrc" "${ZDOTDIR}/.zshrc.backup.$(date +%Y%m%d-%H%M%S)" || true
|
||||
fi
|
||||
wget -O "${ZDOTDIR}/.zshrc" "$ZSHRC_URL"
|
||||
fi
|
||||
|
||||
# Если установка проходит в Termux — заменим "sudo apt install" на "apt install" в .zshrc
|
||||
echo "[*] Загрузка managed-конфига (auto-updated)..."
|
||||
mkdir -p "${HOME}/.config/my-zsh" || true
|
||||
wget -O "${HOME}/.config/my-zsh/zshrc.managed" "$ZSHRC_MANAGED_URL"
|
||||
|
||||
# Если установка проходит в Termux — заменим "sudo apt install" на "apt install" в managed-конфиге
|
||||
if [ -n "$TERMUX_VERSION" ] || ( [ -n "$PREFIX" ] && [[ "$PREFIX" == *"com.termux"* ]] ); then
|
||||
echo "[*] Обнаружен Termux — адаптирую .zshrc (замена 'sudo apt install' -> 'apt install')..."
|
||||
if grep -q "sudo apt install" "${ZDOTDIR}/.zshrc" 2>/dev/null; then
|
||||
echo "[*] Обнаружен Termux — адаптирую managed-конфиг (замена 'sudo apt install' -> 'apt install')..."
|
||||
if grep -q "sudo apt install" "${HOME}/.config/my-zsh/zshrc.managed" 2>/dev/null; then
|
||||
# делаем inplace замену и удаляем бэкап, если он создастся
|
||||
sed -i.bak 's/sudo apt install/apt install/g' "${ZDOTDIR}/.zshrc" || true
|
||||
rm -f "${ZDOTDIR}/.zshrc.bak" || true
|
||||
sed -i.bak 's/sudo apt install/apt install/g' "${HOME}/.config/my-zsh/zshrc.managed" || true
|
||||
rm -f "${HOME}/.config/my-zsh/zshrc.managed.bak" || true
|
||||
echo "[*] Замена выполнена."
|
||||
else
|
||||
echo "[*] В .zshrc не найдено 'sudo apt install' — ничего менять не нужно."
|
||||
echo "[*] В managed-конфиге не найдено 'sudo apt install' — ничего менять не нужно."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "[*] Создаю файл для пользовательских правок: ~/.zshrc.local (если его нет)..."
|
||||
if [ ! -f "${HOME}/.zshrc.local" ]; then
|
||||
cat > "${HOME}/.zshrc.local" <<'EOF'
|
||||
# Your custom zsh config goes here.
|
||||
# This file will NOT be overwritten by my-zsh updates.
|
||||
EOF
|
||||
fi
|
||||
|
||||
# ========= Optional configs =========
|
||||
ask_yes_no() {
|
||||
# Usage: ask_yes_no "Question" "N|Y"
|
||||
local question default reply
|
||||
question="$1"
|
||||
default="${2:-N}"
|
||||
|
||||
# Non-interactive shell: honor default.
|
||||
if [ ! -t 0 ]; then
|
||||
[ "${default}" = "Y" ] && return 0 || return 1
|
||||
fi
|
||||
|
||||
read -r -p "${question} [y/N]: " reply
|
||||
reply="${reply:-$default}"
|
||||
case "$reply" in
|
||||
y|Y|yes|YES) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
backup_if_exists() {
|
||||
local p ts
|
||||
p="$1"
|
||||
ts="$(date +%Y%m%d-%H%M%S)"
|
||||
if [ -f "$p" ]; then
|
||||
cp -f "$p" "$p.backup.$ts" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
# Micro
|
||||
MICRORC_URL="https://raw.githubusercontent.com/ushst/my-zsh/main/.microrc"
|
||||
MICRO_SHELL_SYNTAX_URL="https://raw.githubusercontent.com/ushst/my-zsh/main/.config/micro/syntax/shell.yaml"
|
||||
|
||||
if [ "${MY_ZSH_INSTALL_MICRO:-}" = "1" ] || ( [ "${MY_ZSH_INSTALL_MICRO:-}" != "0" ] && ask_yes_no "[?] Установить конфиг для micro ( .microrc + syntax )?" "N" ); then
|
||||
echo "[*] Установка конфига micro..."
|
||||
backup_if_exists "${HOME}/.microrc"
|
||||
wget -O "${HOME}/.microrc" "$MICRORC_URL"
|
||||
mkdir -p "${HOME}/.config/micro/syntax" || true
|
||||
backup_if_exists "${HOME}/.config/micro/syntax/shell.yaml"
|
||||
wget -O "${HOME}/.config/micro/syntax/shell.yaml" "$MICRO_SHELL_SYNTAX_URL"
|
||||
fi
|
||||
|
||||
# msfconsole
|
||||
MSFCONSOLE_RC_URL="https://raw.githubusercontent.com/ushst/my-zsh/main/msfconsole.rc"
|
||||
|
||||
if [ "${MY_ZSH_INSTALL_MSFCONSOLE:-}" = "1" ] || ( [ "${MY_ZSH_INSTALL_MSFCONSOLE:-}" != "0" ] && ask_yes_no "[?] Установить конфиг для msfconsole ( alias s -> search )?" "N" ); then
|
||||
echo "[*] Установка конфига msfconsole..."
|
||||
mkdir -p "${HOME}/.msf4" || true
|
||||
backup_if_exists "${HOME}/.msf4/msfconsole.rc"
|
||||
wget -O "${HOME}/.msf4/msfconsole.rc" "$MSFCONSOLE_RC_URL"
|
||||
fi
|
||||
|
||||
echo "[*] Смена стандартной оболочки на zsh..."
|
||||
chsh -s "$(which zsh)" "$USER"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user