|  | @@ -1,272 +1,288 @@
 | 
	
		
			
				|  |  | -#!/bin/sh
 | 
	
		
			
				|  |  | -#Set Variable to master is not set differently
 | 
	
		
			
				|  |  | -LVBRANCH="${LVBRANCH:-master}"
 | 
	
		
			
				|  |  | -USER_BIN_DIR="/usr/local/bin"
 | 
	
		
			
				|  |  | -set -o nounset # error when referencing undefined variable
 | 
	
		
			
				|  |  | -set -o errexit # exit when command fails
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -installnodemac() {
 | 
	
		
			
				|  |  | -  brew install lua
 | 
	
		
			
				|  |  | -  brew install node
 | 
	
		
			
				|  |  | -  brew install yarn
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#!/usr/bin/env bash
 | 
	
		
			
				|  |  | +set -eo pipefail
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installnodeubuntu() {
 | 
	
		
			
				|  |  | -  sudo apt install nodejs
 | 
	
		
			
				|  |  | -  sudo apt install npm
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +#Set branch to master unless specified by the user
 | 
	
		
			
				|  |  | +declare -r LV_BRANCH="${LV_BRANCH:-rolling}"
 | 
	
		
			
				|  |  | +declare -r LV_REMOTE="${LV_REMOTE:-lunarvim/lunarvim.git}"
 | 
	
		
			
				|  |  | +declare -r INSTALL_PREFIX="${INSTALL_PREFIX:-"$HOME/.local"}"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installnodetermux() {
 | 
	
		
			
				|  |  | -  apt install nodejs
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +declare -r XDG_DATA_HOME="${XDG_DATA_HOME:-"$HOME/.local/share"}"
 | 
	
		
			
				|  |  | +declare -r XDG_CACHE_HOME="${XDG_CACHE_HOME:-"$HOME/.cache"}"
 | 
	
		
			
				|  |  | +declare -r XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-"$HOME/.config"}"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -moveoldlvim() {
 | 
	
		
			
				|  |  | -  echo "Not installing LunarVim"
 | 
	
		
			
				|  |  | -  echo "Please move your ~/.local/share/lunarvim folder before installing"
 | 
	
		
			
				|  |  | -  exit
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +# TODO: Use a dedicated cache directory #1256
 | 
	
		
			
				|  |  | +declare -r NEOVIM_CACHE_DIR="$XDG_CACHE_HOME/nvim"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installnodearch() {
 | 
	
		
			
				|  |  | -  sudo pacman -S nodejs
 | 
	
		
			
				|  |  | -  sudo pacman -S npm
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +declare -r LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$XDG_DATA_HOME/lunarvim"}"
 | 
	
		
			
				|  |  | +declare -r LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$XDG_CONFIG_HOME/lvim"}"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installnodefedora() {
 | 
	
		
			
				|  |  | -  sudo dnf install -y nodejs
 | 
	
		
			
				|  |  | -  sudo dnf install -y npm
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +declare -a __lvim_dirs=(
 | 
	
		
			
				|  |  | +  "$LUNARVIM_CONFIG_DIR"
 | 
	
		
			
				|  |  | +  "$LUNARVIM_RUNTIME_DIR"
 | 
	
		
			
				|  |  | +  "$NEOVIM_CACHE_DIR" # for now this is shared with neovim
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installnodegentoo() {
 | 
	
		
			
				|  |  | -  echo "Printing current node status..."
 | 
	
		
			
				|  |  | -  emerge -pqv net-libs/nodejs
 | 
	
		
			
				|  |  | -  echo "Make sure the npm USE flag is enabled for net-libs/nodejs"
 | 
	
		
			
				|  |  | -  echo "If it isn't enabled, would you like to enable it with flaggie? (Y/N)"
 | 
	
		
			
				|  |  | -  read -r answer
 | 
	
		
			
				|  |  | -  [ "$answer" != "${answer#[Yy]}" ] && sudo flaggie net-libs/nodejs +npm
 | 
	
		
			
				|  |  | -  sudo emerge -avnN net-libs/nodejs
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +declare -a __npm_deps=(
 | 
	
		
			
				|  |  | +  "neovim"
 | 
	
		
			
				|  |  | +  "tree-sitter-cli"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installnode() {
 | 
	
		
			
				|  |  | -  echo "Installing node..."
 | 
	
		
			
				|  |  | -  [ "$(uname)" = "Darwin" ] && installnodemac
 | 
	
		
			
				|  |  | -  grep -q Ubuntu /etc/os-release && installnodeubuntu
 | 
	
		
			
				|  |  | -  [ -f "/etc/arch-release" ] && installnodearch
 | 
	
		
			
				|  |  | -  [ -f "/etc/artix-release" ] && installnodearch
 | 
	
		
			
				|  |  | -  [ -f "/etc/fedora-release" ] && installnodefedora
 | 
	
		
			
				|  |  | -  [ -f "/etc/gentoo-release" ] && installnodegentoo
 | 
	
		
			
				|  |  | -  [ -d "/data/data/com.termux" ] && installnodetermux
 | 
	
		
			
				|  |  | -  [ "$(uname -s | cut -c 1-10)" = "MINGW64_NT" ] && echo "Windows not currently supported"
 | 
	
		
			
				|  |  | -  sudo npm i -g neovim
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +declare -a __pip_deps=(
 | 
	
		
			
				|  |  | +  "pynvim"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpiponmac() {
 | 
	
		
			
				|  |  | -  sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
 | 
	
		
			
				|  |  | -  python3 get-pip.py
 | 
	
		
			
				|  |  | -  rm get-pip.py
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +function main() {
 | 
	
		
			
				|  |  | +  cat <<'EOF'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpiponubuntu() {
 | 
	
		
			
				|  |  | -  sudo apt install python3-pip >/dev/null
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +      88\                                                   88\               
 | 
	
		
			
				|  |  | +      88 |                                                  \__|              
 | 
	
		
			
				|  |  | +      88 |88\   88\ 888888$\   888888\   888888\ 88\    88\ 88\ 888888\8888\  
 | 
	
		
			
				|  |  | +      88 |88 |  88 |88  __88\  \____88\ 88  __88\\88\  88  |88 |88  _88  _88\ 
 | 
	
		
			
				|  |  | +      88 |88 |  88 |88 |  88 | 888888$ |88 |  \__|\88\88  / 88 |88 / 88 / 88 |
 | 
	
		
			
				|  |  | +      88 |88 |  88 |88 |  88 |88  __88 |88 |       \88$  /  88 |88 | 88 | 88 |
 | 
	
		
			
				|  |  | +      88 |\888888  |88 |  88 |\888888$ |88 |        \$  /   88 |88 | 88 | 88 |
 | 
	
		
			
				|  |  | +      \__| \______/ \__|  \__| \_______|\__|         \_/    \__|\__| \__| \__|
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpipontermux() {
 | 
	
		
			
				|  |  | -  apt install python
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +EOF
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpiponarch() {
 | 
	
		
			
				|  |  | -  sudo pacman -S python-pip
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  __add_separator "80"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpiponfedora() {
 | 
	
		
			
				|  |  | -  sudo dnf install -y pip >/dev/null
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  echo "Detecting platform for managing any additional neovim dependencies"
 | 
	
		
			
				|  |  | +  detect_platform
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpipongentoo() {
 | 
	
		
			
				|  |  | -  sudo emerge -avn dev-python/pip
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  # skip this in a Github workflow
 | 
	
		
			
				|  |  | +  if [ -z "$GITHUB_ACTIONS" ]; then
 | 
	
		
			
				|  |  | +    check_system_deps
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpip() {
 | 
	
		
			
				|  |  | -  echo "Installing pip..."
 | 
	
		
			
				|  |  | -  [ "$(uname)" = "Darwin" ] && installpiponmac
 | 
	
		
			
				|  |  | -  grep -q Ubuntu /etc/os-release && installpiponubuntu
 | 
	
		
			
				|  |  | -  [ -f "/etc/arch-release" ] && installpiponarch
 | 
	
		
			
				|  |  | -  [ -f "/etc/fedora-release" ] && installpiponfedora
 | 
	
		
			
				|  |  | -  [ -f "/etc/gentoo-release" ] && installpipongentoo
 | 
	
		
			
				|  |  | -  [ -d "/data/data/com.termux" ] && installpipontermux
 | 
	
		
			
				|  |  | -  [ "$(uname -s | cut -c 1-10)" = "MINGW64_NT" ] && echo "Windows not currently supported"
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +    __add_separator "80"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    echo "Would you like to check lunarvim's NodeJS dependencies?"
 | 
	
		
			
				|  |  | +    read -p "[y]es or [n]o (default: no) : " -r answer
 | 
	
		
			
				|  |  | +    [ "$answer" != "${answer#[Yy]}" ] && install_nodejs_deps
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    echo "Would you like to check lunarvim's Python dependencies?"
 | 
	
		
			
				|  |  | +    read -p "[y]es or [n]o (default: no) : " -r answer
 | 
	
		
			
				|  |  | +    [ "$answer" != "${answer#[Yy]}" ] && install_python_deps
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    echo "Would you like to check lunarvim's Rust dependencies?"
 | 
	
		
			
				|  |  | +    read -p "[y]es or [n]o (default: no) : " -r answer
 | 
	
		
			
				|  |  | +    [ "$answer" != "${answer#[Yy]}" ] && install_rust_deps
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpynvim() {
 | 
	
		
			
				|  |  | -  echo "Installing pynvim..."
 | 
	
		
			
				|  |  | -  if [ -f "/etc/gentoo-release" ]; then
 | 
	
		
			
				|  |  | -    echo "Installing using Portage"
 | 
	
		
			
				|  |  | -    sudo emerge -avn dev-python/pynvim
 | 
	
		
			
				|  |  | +    __add_separator "80"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    echo "Backing up old LunarVim configuration"
 | 
	
		
			
				|  |  | +    backup_old_config
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    __add_separator "80"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  case "$@" in
 | 
	
		
			
				|  |  | +    *--overwrite*)
 | 
	
		
			
				|  |  | +      echo "!!Warning!! -> Removing all lunarvim related config \
 | 
	
		
			
				|  |  | +        because of the --overwrite flag"
 | 
	
		
			
				|  |  | +      read -p "Would you like to continue? [y]es or [n]o : " -r answer
 | 
	
		
			
				|  |  | +      [ "$answer" == "${answer#[Yy]}" ] && exit 1
 | 
	
		
			
				|  |  | +      for dir in "${__lvim_dirs[@]}"; do
 | 
	
		
			
				|  |  | +        [ -d "$dir" ] && rm -rf "$dir"
 | 
	
		
			
				|  |  | +      done
 | 
	
		
			
				|  |  | +      ;;
 | 
	
		
			
				|  |  | +  esac
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if [ -e "$LUNARVIM_RUNTIME_DIR/site/pack/packer/start/packer.nvim" ]; then
 | 
	
		
			
				|  |  | +    echo "Packer already installed"
 | 
	
		
			
				|  |  |    else
 | 
	
		
			
				|  |  | -    pip3 install pynvim --user
 | 
	
		
			
				|  |  | +    install_packer
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installpacker() {
 | 
	
		
			
				|  |  | -  git clone https://github.com/wbthomason/packer.nvim ~/.local/share/lunarvim/site/pack/packer/start/packer.nvim
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +  __add_separator "80"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -cloneconfig() {
 | 
	
		
			
				|  |  | -  if [ -d "/data/data/com.termux" ]; then
 | 
	
		
			
				|  |  | -    sudo() {
 | 
	
		
			
				|  |  | -      eval "$@"
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    USER_BIN_DIR="$HOME/../usr/bin"
 | 
	
		
			
				|  |  | +  if [ -e "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" ]; then
 | 
	
		
			
				|  |  | +    echo "Updating LunarVim"
 | 
	
		
			
				|  |  | +    update_lvim
 | 
	
		
			
				|  |  | +  else
 | 
	
		
			
				|  |  | +    clone_lvim
 | 
	
		
			
				|  |  | +    setup_lvim
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  | -  echo "Cloning LunarVim configuration"
 | 
	
		
			
				|  |  | -  mkdir -p ~/.local/share/lunarvim
 | 
	
		
			
				|  |  | -  case "$@" in
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    *--testing*)
 | 
	
		
			
				|  |  | -      cp -r "$(pwd)" ~/.local/share/lunarvim/lvim
 | 
	
		
			
				|  |  | +  __add_separator "80"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function detect_platform() {
 | 
	
		
			
				|  |  | +  OS="$(uname -s)"
 | 
	
		
			
				|  |  | +  case "$OS" in
 | 
	
		
			
				|  |  | +    Linux)
 | 
	
		
			
				|  |  | +      if [ -f "/etc/arch-release" ] || [ -f "/etc/artix-release" ]; then
 | 
	
		
			
				|  |  | +        RECOMMEND_INSTALL="sudo pacman -S"
 | 
	
		
			
				|  |  | +      elif [ -f "/etc/fedora-release" ] || [ -f "/etc/redhat-release" ]; then
 | 
	
		
			
				|  |  | +        RECOMMEND_INSTALL="sudo dnf install -y"
 | 
	
		
			
				|  |  | +      elif [ -f "/etc/gentoo-release" ]; then
 | 
	
		
			
				|  |  | +        RECOMMEND_INSTALL="emerge install -y"
 | 
	
		
			
				|  |  | +      else # assume debian based
 | 
	
		
			
				|  |  | +        RECOMMEND_INSTALL="sudo apt install -y"
 | 
	
		
			
				|  |  | +      fi
 | 
	
		
			
				|  |  | +      ;;
 | 
	
		
			
				|  |  | +    Darwin)
 | 
	
		
			
				|  |  | +      RECOMMEND_INSTALL="brew install"
 | 
	
		
			
				|  |  |        ;;
 | 
	
		
			
				|  |  |      *)
 | 
	
		
			
				|  |  | -      git clone --branch "$LVBRANCH" https://github.com/lunarvim/lunarvim.git ~/.local/share/lunarvim/lvim
 | 
	
		
			
				|  |  | +      echo "OS $OS is not currently supported."
 | 
	
		
			
				|  |  | +      exit 1
 | 
	
		
			
				|  |  |        ;;
 | 
	
		
			
				|  |  |    esac
 | 
	
		
			
				|  |  | -  mkdir -p "$HOME/.config/lvim"
 | 
	
		
			
				|  |  | -  sudo cp "$HOME/.local/share/lunarvim/lvim/utils/bin/lvim" "$USER_BIN_DIR"
 | 
	
		
			
				|  |  | -  sudo chmod a+rx "$USER_BIN_DIR"/lvim
 | 
	
		
			
				|  |  | -  cp "$HOME/.local/share/lunarvim/lvim/utils/installer/config.example-no-ts.lua" "$HOME/.config/lvim/config.lua"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" --headless \
 | 
	
		
			
				|  |  | -    +'autocmd User PackerComplete sleep 100m | qall' \
 | 
	
		
			
				|  |  | -    +PackerInstall
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" --headless \
 | 
	
		
			
				|  |  | -    +'autocmd User PackerComplete sleep 100m | qall' \
 | 
	
		
			
				|  |  | -    +PackerSync
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  printf "\nCompile Complete\n"
 | 
	
		
			
				|  |  | +function print_missing_dep_msg() {
 | 
	
		
			
				|  |  | +  echo "[ERROR]: Unable to find dependency [$1]"
 | 
	
		
			
				|  |  | +  echo "Please install it first and re-run the installer. Try: $RECOMMEND_INSTALL $1"
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if [ -e "$HOME/.local/share/lunarvim/lvim/init.lua" ]; then
 | 
	
		
			
				|  |  | -    echo 'config.lua already present'
 | 
	
		
			
				|  |  | -  else
 | 
	
		
			
				|  |  | -    cp "$HOME/.local/share/lunarvim/lvim/utils/installer/config.example.lua" "$HOME/.config/lvim/config.lua"
 | 
	
		
			
				|  |  | +function check_dep() {
 | 
	
		
			
				|  |  | +  if ! command -v "$1" &>/dev/null; then
 | 
	
		
			
				|  |  | +    print_missing_dep_msg "$1"
 | 
	
		
			
				|  |  | +    exit 1
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -asktoinstallnode() {
 | 
	
		
			
				|  |  | -  echo "node not found"
 | 
	
		
			
				|  |  | -  printf "Would you like to install node now (y/n)? "
 | 
	
		
			
				|  |  | -  read -r answer
 | 
	
		
			
				|  |  | -  [ "$answer" != "${answer#[Yy]}" ] && installnode
 | 
	
		
			
				|  |  | +function check_system_deps() {
 | 
	
		
			
				|  |  | +  if ! command -v git &>/dev/null; then
 | 
	
		
			
				|  |  | +    print_missing_dep_msg "git"
 | 
	
		
			
				|  |  | +    exit 1
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  if ! command -v nvim &>/dev/null; then
 | 
	
		
			
				|  |  | +    print_missing_dep_msg "neovim"
 | 
	
		
			
				|  |  | +    exit 1
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -asktoinstallgit() {
 | 
	
		
			
				|  |  | -  echo "git not found, please install git"
 | 
	
		
			
				|  |  | -  exit
 | 
	
		
			
				|  |  | +function install_nodejs_deps() {
 | 
	
		
			
				|  |  | +  check_dep "npm"
 | 
	
		
			
				|  |  | +  echo "Installing node modules with npm.."
 | 
	
		
			
				|  |  | +  for dep in "${__npm_deps[@]}"; do
 | 
	
		
			
				|  |  | +    if ! npm ls -g "$dep" &>/dev/null; then
 | 
	
		
			
				|  |  | +      printf "installing %s .." "$dep"
 | 
	
		
			
				|  |  | +      npm install -g "$dep"
 | 
	
		
			
				|  |  | +    fi
 | 
	
		
			
				|  |  | +  done
 | 
	
		
			
				|  |  | +  echo "All NodeJS dependencies are succesfully installed"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -asktoinstallpip() {
 | 
	
		
			
				|  |  | -  # echo "pip not found"
 | 
	
		
			
				|  |  | -  # echo -n "Would you like to install pip now (y/n)? "
 | 
	
		
			
				|  |  | -  # read answer
 | 
	
		
			
				|  |  | -  # [ "$answer" != "${answer#[Yy]}" ] && installpip
 | 
	
		
			
				|  |  | -  echo "Please install pip3 before continuing with install"
 | 
	
		
			
				|  |  | -  exit
 | 
	
		
			
				|  |  | +function install_python_deps() {
 | 
	
		
			
				|  |  | +  echo "Verifying that pip is available.."
 | 
	
		
			
				|  |  | +  if ! python3 -m ensurepip &>/dev/null; then
 | 
	
		
			
				|  |  | +    print_missing_dep_msg "pip"
 | 
	
		
			
				|  |  | +    exit 1
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  echo "Installing with pip.."
 | 
	
		
			
				|  |  | +  for dep in "${__pip_deps[@]}"; do
 | 
	
		
			
				|  |  | +    pip3 install --user "$dep"
 | 
	
		
			
				|  |  | +  done
 | 
	
		
			
				|  |  | +  echo "All Python dependencies are succesfully installed"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installonmac() {
 | 
	
		
			
				|  |  | -  brew install ripgrep fzf
 | 
	
		
			
				|  |  | -  npm install -g tree-sitter-cli
 | 
	
		
			
				|  |  | +function __attempt_to_install_with_cargo() {
 | 
	
		
			
				|  |  | +  if ! command -v cargo &>/dev/null; then
 | 
	
		
			
				|  |  | +    echo "Installing missing Rust dependency with cargo"
 | 
	
		
			
				|  |  | +    cargo install "$1"
 | 
	
		
			
				|  |  | +  else
 | 
	
		
			
				|  |  | +    echo "[WARN]: Unable to find fd. Make sure to install it to avoid any problems"
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installonubuntu() {
 | 
	
		
			
				|  |  | -  sudo apt install ripgrep fzf
 | 
	
		
			
				|  |  | -  sudo apt install libjpeg8-dev zlib1g-dev python-dev python3-dev libxtst-dev
 | 
	
		
			
				|  |  | -  pip3 install neovim-remote
 | 
	
		
			
				|  |  | -  npm install -g tree-sitter-cli
 | 
	
		
			
				|  |  | +# we try to install the missing one with cargo even though it's unlikely to be found
 | 
	
		
			
				|  |  | +function install_rust_deps() {
 | 
	
		
			
				|  |  | +  if ! command -v fd &>/dev/null; then
 | 
	
		
			
				|  |  | +    __attempt_to_install_with_cargo "fd-find"
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  if ! command -v rg &>/dev/null; then
 | 
	
		
			
				|  |  | +    __attempt_to_install_with_cargo "ripgrep"
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  echo "All Rust dependencies are succesfully installed"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installtermux() {
 | 
	
		
			
				|  |  | -  apt install ripgrep fzf
 | 
	
		
			
				|  |  | -  pip install neovim-remote
 | 
	
		
			
				|  |  | -  npm install -g tree-sitter-cli
 | 
	
		
			
				|  |  | +function backup_old_config() {
 | 
	
		
			
				|  |  | +  for dir in "${__lvim_dirs[@]}"; do
 | 
	
		
			
				|  |  | +    # we create an empty folder for subsequent commands \
 | 
	
		
			
				|  |  | +    # that require an existing directory
 | 
	
		
			
				|  |  | +    mkdir -p "$dir" "$dir.bak"
 | 
	
		
			
				|  |  | +    if command -v rsync &>/dev/null; then
 | 
	
		
			
				|  |  | +      rsync --archive -hh --partial --info=stats1 --info=progress2 \
 | 
	
		
			
				|  |  | +        --modify-window=1 "$dir" "$dir.bak"
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +      cp -R "$dir/*" "$dir.bak/."
 | 
	
		
			
				|  |  | +    fi
 | 
	
		
			
				|  |  | +  done
 | 
	
		
			
				|  |  | +  echo "Backup operation complete"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installonarch() {
 | 
	
		
			
				|  |  | -  sudo pacman -S ripgrep fzf
 | 
	
		
			
				|  |  | -  pip3 install neovim-remote
 | 
	
		
			
				|  |  | -  npm install -g tree-sitter-cli
 | 
	
		
			
				|  |  | +function install_packer() {
 | 
	
		
			
				|  |  | +  git clone --progress --depth 1 https://github.com/wbthomason/packer.nvim \
 | 
	
		
			
				|  |  | +    "$LUNARVIM_RUNTIME_DIR/site/pack/packer/start/packer.nvim"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installonfedora() {
 | 
	
		
			
				|  |  | -  sudo dnf groupinstall "X Software Development"
 | 
	
		
			
				|  |  | -  sudo dnf install -y fzf ripgrep
 | 
	
		
			
				|  |  | +function clone_lvim() {
 | 
	
		
			
				|  |  | +  echo "Cloning LunarVim configuration"
 | 
	
		
			
				|  |  | +  if ! git clone --progress --branch "$LV_BRANCH" \
 | 
	
		
			
				|  |  | +    --depth 1 "https://github.com/${LV_REMOTE}" "$LUNARVIM_RUNTIME_DIR/lvim"; then
 | 
	
		
			
				|  |  | +    echo "Failed to clone repository. Installation failed."
 | 
	
		
			
				|  |  | +    exit 1
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installongentoo() {
 | 
	
		
			
				|  |  | -  sudo emerge -avn sys-apps/ripgrep app-shells/fzf dev-python/neovim-remote virtual/jpeg sys-libs/zlib
 | 
	
		
			
				|  |  | -  npm install -g tree-sitter-cli
 | 
	
		
			
				|  |  | +function setup_shim() {
 | 
	
		
			
				|  |  | +  if [ ! -d "$INSTALL_PREFIX/bin" ]; then
 | 
	
		
			
				|  |  | +    mkdir -p "$INSTALL_PREFIX/bin"
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +  cat >"$INSTALL_PREFIX/bin/lvim" <<EOF
 | 
	
		
			
				|  |  | +#!/bin/sh
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export LUNARVIM_CONFIG_DIR="\${LUNARVIM_CONFIG_DIR:-$LUNARVIM_CONFIG_DIR}"
 | 
	
		
			
				|  |  | +export LUNARVIM_RUNTIME_DIR="\${LUNARVIM_RUNTIME_DIR:-$LUNARVIM_RUNTIME_DIR}"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +exec nvim -u "\$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "\$@"
 | 
	
		
			
				|  |  | +EOF
 | 
	
		
			
				|  |  | +  chmod +x "$INSTALL_PREFIX/bin/lvim"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -installextrapackages() {
 | 
	
		
			
				|  |  | -  [ "$(uname)" = "Darwin" ] && installonmac
 | 
	
		
			
				|  |  | -  grep -q Ubuntu /etc/os-release && installonubuntu
 | 
	
		
			
				|  |  | -  [ -f "/etc/arch-release" ] && installonarch
 | 
	
		
			
				|  |  | -  [ -f "/etc/artix-release" ] && installonarch
 | 
	
		
			
				|  |  | -  [ -f "/etc/fedora-release" ] && installonfedora
 | 
	
		
			
				|  |  | -  [ -f "/etc/gentoo-release" ] && installongentoo
 | 
	
		
			
				|  |  | -  [ -d "/data/data/com.termux" ] && installtermux
 | 
	
		
			
				|  |  | -  [ "$(uname -s | cut -c 1-10)" = "MINGW64_NT" ] && echo "Windows not currently supported"
 | 
	
		
			
				|  |  | +function setup_lvim() {
 | 
	
		
			
				|  |  | +  echo "Installing LunarVim shim"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  setup_shim
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  echo "Preparing Packer setup"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  cp "$LUNARVIM_RUNTIME_DIR/lvim/utils/installer/config.example-no-ts.lua" \
 | 
	
		
			
				|  |  | +    "$LUNARVIM_CONFIG_DIR/config.lua"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" --headless \
 | 
	
		
			
				|  |  | +    +'autocmd User PackerComplete sleep 100m | qall' \
 | 
	
		
			
				|  |  | +    +PackerInstall
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" --headless \
 | 
	
		
			
				|  |  | +    +'autocmd User PackerComplete sleep 100m | qall' \
 | 
	
		
			
				|  |  | +    +PackerSync
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  echo "Packer setup complete"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  cp "$LUNARVIM_RUNTIME_DIR/lvim/utils/installer/config.example.lua" "$LUNARVIM_CONFIG_DIR/config.lua"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  echo "Thank you for installing LunarVim!!"
 | 
	
		
			
				|  |  | +  echo "You can start it by running: $INSTALL_PREFIX/bin/lvim"
 | 
	
		
			
				|  |  | +  echo "Do not forget to use a font with glyphs (icons) support [https://github.com/ryanoasis/nerd-fonts]"
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -# Welcome
 | 
	
		
			
				|  |  | -echo 'Installing LunarVim'
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -case "$@" in
 | 
	
		
			
				|  |  | -  *--overwrite*)
 | 
	
		
			
				|  |  | -    echo '!!Warning!! -> Removing all lunarvim related config because of the --overwrite flag'
 | 
	
		
			
				|  |  | -    rm -rf "$HOME/.local/share/lunarvim"
 | 
	
		
			
				|  |  | -    rm -rf "$HOME/.cache/nvim"
 | 
	
		
			
				|  |  | -    rm -rf "$HOME/.config/lvim"
 | 
	
		
			
				|  |  | -    ;;
 | 
	
		
			
				|  |  | -esac
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# move old lvim directory if it exists
 | 
	
		
			
				|  |  | -[ -d "$HOME/.local/share/lunarvim" ] && moveoldlvim
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# install node and neovim support
 | 
	
		
			
				|  |  | -(command -v git >/dev/null && echo "git installed, moving on...") || asktoinstallgit
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# install pip
 | 
	
		
			
				|  |  | -(command -v pip3 >/dev/null && echo "pip installed, moving on...") || asktoinstallpip
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# install node and neovim support
 | 
	
		
			
				|  |  | -(command -v node >/dev/null && echo "node installed, moving on...") || asktoinstallnode
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# install pynvim
 | 
	
		
			
				|  |  | -(pip3 list | grep pynvim >/dev/null && echo "pynvim installed, moving on...") || installpynvim
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if [ -e "$HOME/.local/share/lunarvim/site/pack/packer/start/packer.nvim" ]; then
 | 
	
		
			
				|  |  | -  echo 'packer already installed'
 | 
	
		
			
				|  |  | -else
 | 
	
		
			
				|  |  | -  installpacker
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if [ -e "$HOME/.local/share/lunarvim/lvim/init.lua" ]; then
 | 
	
		
			
				|  |  | -  echo 'LunarVim already installed'
 | 
	
		
			
				|  |  | -else
 | 
	
		
			
				|  |  | -  # clone config down
 | 
	
		
			
				|  |  | -  cloneconfig "$@"
 | 
	
		
			
				|  |  | -  # echo 'export PATH=$HOME/.config/nvim/utils/bin:$PATH' >>~/.zshrc
 | 
	
		
			
				|  |  | -  # echo 'export PATH=$HOME/.config/lunarvim/utils/bin:$PATH' >>~/.bashrc
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if [ "$(uname)" != "Darwin" ]; then
 | 
	
		
			
				|  |  | -  if [ -e "$HOME/.local/share/applications/lvim.desktop" ]; then
 | 
	
		
			
				|  |  | -    echo 'Desktop file already available'
 | 
	
		
			
				|  |  | -  else
 | 
	
		
			
				|  |  | -    mkdir -p "$HOME/.local/share/applications"
 | 
	
		
			
				|  |  | -    cp "$HOME/.local/share/lunarvim/lvim/utils/desktop/lvim.desktop" "$HOME/.local/share/applications/lvim.desktop"
 | 
	
		
			
				|  |  | +function update_lvim() {
 | 
	
		
			
				|  |  | +  if ! git -C "$LUNARVIM_RUNTIME_DIR/lvim" status -uno &>/dev/null; then
 | 
	
		
			
				|  |  | +    git -C "$LUNARVIM_RUNTIME_DIR/lvim" pull --ff-only --progress ||
 | 
	
		
			
				|  |  | +      echo "Unable to guarantee data integrity while updating. Please do that manually instead." && exit 1
 | 
	
		
			
				|  |  |    fi
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | +  echo "Your LunarVim installation is now up to date!"
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function __add_separator() {
 | 
	
		
			
				|  |  | +  local DIV_WIDTH="$1"
 | 
	
		
			
				|  |  | +  printf "%${DIV_WIDTH}s\n" ' ' | tr ' ' -
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -echo "I recommend you also install and activate a font from here: https://github.com/ryanoasis/nerd-fonts"
 | 
	
		
			
				|  |  | -# echo 'export PATH=/home/$USER/.config/lunarvim/utils/bin:$PATH appending to zshrc/bashrc'
 | 
	
		
			
				|  |  | +main "$@"
 |