#!/usr/bin/env bash ##makedesc: Install nvim + lazyvim set -eo pipefail installed() { command -v "$1" >/dev/null 2>&1; } # https://www.lazyvim.org/installation # https://www.devas.life/effective-neovim-setup-for-web-development-towards-2024/ # TODO https://github.com/rockerBOO/awesome-neovim # TODO https://docs.astronvim.com isMac() { [ "$(uname -s)" = "Darwin" ]; } isLinux() { [ "$(uname -s)" = "Linux" ]; } if isLinux; then url="https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz" nvimDirName="nvim-linux-x86_64" elif isMac; then url="https://github.com/neovim/neovim/releases/latest/download/nvim-macos-x86_64.tar.gz" nvimDirName="nvim-macos-x86_64" fi downloadPath="$HOME/install" downloadTarGz="$downloadPath/nvim.tar.gz" installPath="/opt/nvim" cfgPath="$HOME/.config/nvim" nvimDataPaths=( "$cfgPath" "$HOME/.local/share/nvim" "$HOME/.local/state/nvim" "$HOME/.cache/nvim" ) backup() { echo "Backup configuration files..." t=$(date +'%s') for path in "${nvimDataPaths[@]}"; do [[ -d "$path" ]] && cp -rv "$path" "$path-$t.bak" done echo "Done" } install() { echo echo "===============================================" echo "Installing neovim" echo "===============================================" echo backup if installed wget; then wget -q --show-progress "$url" -O "$downloadTarGz" else curl -fsSL "$url" -o "$downloadTarGz" fi tar -xzf "$downloadTarGz" -C "$downloadPath" sudo rm -rf "$installPath" sudo mv "$downloadPath/$nvimDirName" "$installPath" if [ -d "$cfgPath" ]; then rm -rf "$cfgPath" fi git clone --depth=1 --single-branch https://github.com/LazyVim/starter "$cfgPath" rm -rf "$cfgPath/.git" if command -v update-desktop-database >/dev/null 2>&1; then sudo update-desktop-database fi if command -v xdg-desktop-menu >/dev/null 2>&1; then xdg-desktop-menu forceupdate fi echo echo "Finish!" nvim -v echo } remove() { echo echo "===============================================" echo "Removing neovim" echo "===============================================" echo sudo rm -rf "$installPath" for path in "${nvimDataPaths[@]}"; do rm -rf "$path" done find "$HOME/.config" -type f -path "*/nvim*" -exec rm -rfv {} + 2>/dev/null || true find "$HOME/.local" -type f -path "*/nvim*" -exec rm -rfv {} + 2>/dev/null || true echo echo "Finish!" echo } case "$1" in b|backup) backup ;; r|remove|d|delete|p|purge) remove ;; *) install ;; esac