diff --git a/installers/install_nvim.sh b/installers/install_nvim.sh index 0ae7736..d69237b 100644 --- a/installers/install_nvim.sh +++ b/installers/install_nvim.sh @@ -1,105 +1,133 @@ #!/usr/bin/env bash + set -euo pipefail -NVIM_VERSION="v0.11.7" -NVIM_URL="https://github.com/neovim/neovim/releases/download/${NVIM_VERSION}/nvim-linux-x86_64.tar.gz" +NVIM_VERSION="0.11.7" +NVIM_URL="https://github.com/neovim/neovim/releases/download/v${NVIM_VERSION}/nvim-linux-x86_64.tar.gz" +CONFIG_REPO="https://git.adityagupta.dev/sortedcord/editor.git" + TMP_DIR="$(mktemp -d)" cleanup() { - rm -rf "$TMP_DIR" +rm -rf "$TMP_DIR" } + trap cleanup EXIT +prompt_yes_no() { +local prompt="$1" +local response + +``` +read -r -p "$prompt [y/N]: " response < /dev/tty || true + +[[ "$response" =~ ^[Yy]$ ]] +``` + +} + install_packages() { - echo "Detecting distribution..." +echo "Detecting distribution..." - if command -v pacman >/dev/null 2>&1; then - echo "Arch Linux detected" - sudo pacman -Sy --needed git wget tar +``` +if command -v pacman >/dev/null 2>&1; then + echo "Arch Linux detected" + sudo pacman -Sy --needed git curl tar - elif command -v apt >/dev/null 2>&1; then - echo "Debian/Ubuntu detected" - sudo apt update - sudo apt install -y git wget tar +elif command -v apt >/dev/null 2>&1; then + echo "Debian/Ubuntu detected" + sudo apt update + sudo apt install -y git curl tar - elif command -v dnf >/dev/null 2>&1; then - echo "Fedora detected" - sudo dnf install -y git wget tar +elif command -v dnf >/dev/null 2>&1; then + echo "Fedora detected" + sudo dnf install -y git curl tar + +else + echo "Unsupported distribution." + exit 1 +fi +``` - else - echo "Unsupported distribution" - exit 1 - fi } install_nvim() { - local current_version="" +local current_version="" - if command -v nvim >/dev/null 2>&1; then - current_version="$(nvim --version | head -n1 | awk '{print $2}')" +``` +if command -v nvim >/dev/null 2>&1; then + current_version="$(nvim --version | head -n1 | awk '{print $2}')" - if [[ "$current_version" == "${NVIM_VERSION#v}" ]]; then - echo "Neovim ${current_version} already installed." - return - fi - - echo "Detected Neovim ${current_version}" - else - echo "Neovim not installed." - fi - - read -rp "Install/upgrade to Neovim ${NVIM_VERSION}? [y/N]: " confirm - - if [[ ! "$confirm" =~ ^[Yy]$ ]]; then - echo "Skipping Neovim installation." + if [[ "$current_version" == "v${NVIM_VERSION}" ]]; then + echo "Neovim ${current_version} already installed." return fi - echo "Downloading Neovim ${NVIM_VERSION}..." + echo "Current Neovim version: ${current_version}" - wget -qO "$TMP_DIR/nvim.tar.gz" "$NVIM_URL" + if ! prompt_yes_no "Upgrade to Neovim v${NVIM_VERSION}?"; then + echo "Skipping Neovim upgrade." + return + fi +else + if ! prompt_yes_no "Install Neovim v${NVIM_VERSION}?"; then + echo "Skipping Neovim installation." + return + fi +fi - tar -xzf "$TMP_DIR/nvim.tar.gz" -C "$TMP_DIR" +echo "Downloading Neovim..." - sudo rm -rf /opt/nvim - sudo mv "$TMP_DIR/nvim-linux-x86_64" /opt/nvim +curl -L "$NVIM_URL" -o "$TMP_DIR/nvim.tar.gz" - sudo ln -sf /opt/nvim/bin/nvim /usr/local/bin/nvim +tar -xzf "$TMP_DIR/nvim.tar.gz" -C "$TMP_DIR" + +sudo rm -rf /opt/nvim +sudo mv "$TMP_DIR/nvim-linux-x86_64" /opt/nvim + +sudo ln -sf /opt/nvim/bin/nvim /usr/local/bin/nvim + +echo "Installed:" +nvim --version | head -n1 +``` - echo "Neovim installed:" - nvim --version | head -n1 } install_config() { - local config_dir="$HOME/.config/nvim" +local config_dir="$HOME/.config/nvim" - if [[ -d "$config_dir" ]]; then - read -rp "~/.config/nvim already exists. Replace it? [y/N]: " confirm +``` +mkdir -p "$HOME/.config" - if [[ "$confirm" =~ ^[Yy]$ ]]; then - rm -rf "$config_dir" - else - echo "Skipping config installation." - return - fi - fi +if [[ -d "$config_dir" ]]; then + local backup="${config_dir}.bak.$(date +%s)" - mkdir -p "$HOME/.config" + echo "Existing config found." + echo "Backing up to: $backup" - git clone \ - https://git.adityagupta.dev/sortedcord/editor.git \ - "$config_dir" + mv "$config_dir" "$backup" +fi + +git clone "$CONFIG_REPO" "$config_dir" + +echo "Neovim configuration installed." +``` - echo "Neovim config installed." } main() { - install_packages - install_nvim - install_config +echo "=== SortedCord Neovim Bootstrap ===" +echo + +``` +install_packages +install_nvim +install_config + +echo +echo "Bootstrap complete." +``` - echo - echo "Done." } -main "$@" \ No newline at end of file +main "$@"