#!/bin/bash set -exu set -o pipefail # Whether python3 has been installed on the system PYTHON_INSTALLED=true # If Python has been installed, then we need to know whether Python is provided # by the system, or you have already installed Python under your HOME. SYSTEM_PYTHON=false # If SYSTEM_PYTHON is false, we need to decide whether to install # Anaconda (INSTALL_ANACONDA=true) or Miniconda (INSTALL_ANACONDA=false) INSTALL_ANACONDA=false # Whether to add the path of the installed executables to system PATH ADD_TO_SYSTEM_PATH=true # select which shell we are using USE_ZSH_SHELL=true USE_BASH_SHELL=false if [[ ! -d "$HOME/packages/" ]]; then mkdir -p "$HOME/packages/" fi if [[ ! -d "$HOME/tools/" ]]; then mkdir -p "$HOME/tools/" fi ####################################################################### # Anaconda or miniconda install # ####################################################################### if [[ "$INSTALL_ANACONDA" = true ]]; then CONDA_DIR=$HOME/tools/anaconda CONDA_NAME=Anaconda.sh CONDA_LINK="https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh" else CONDA_DIR=$HOME/tools/miniconda CONDA_NAME=Miniconda.sh CONDA_LINK="https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh" fi if [[ ! "$PYTHON_INSTALLED" = true ]]; then echo "Installing Python in user HOME" SYSTEM_PYTHON=false echo "Downloading and installing conda" if [[ ! -f "$HOME/packages/$CONDA_NAME" ]]; then curl -Lo "$HOME/packages/$CONDA_NAME" $CONDA_LINK fi # Install conda silently if [[ -d $CONDA_DIR ]]; then rm -rf "$CONDA_DIR" fi bash "$HOME/packages/$CONDA_NAME" -b -p "$CONDA_DIR" # Setting up environment variables if [[ "$ADD_TO_SYSTEM_PATH" = true ]] && [[ "$USE_BASH_SHELL" = true ]]; then echo "export PATH=\"$CONDA_DIR/bin:\$PATH\"" >> "$HOME/.bash_profile" fi else echo "Python is already installed. Skip installing it." fi # Install some Python packages used by Nvim plugins. echo "Installing Python packages" declare -a py_packages=("pynvim" 'python-lsp-server[all]' "black" "vim-vint" "pyls-isort" "pylsp-mypy") if [[ "$SYSTEM_PYTHON" = true ]]; then echo "Using system Python to install $(PY_PACKAGES)" # If we use system Python, we need to install these Python packages under # user HOME, since we do not have permissions to install them under system # directories. for p in "${py_packages[@]}"; do pip install --user "$p" done else echo "Using custom Python to install $(PY_PACKAGES)" for p in "${py_packages[@]}"; do "$CONDA_DIR/bin/pip" install "$p" done fi ####################################################################### # Install node and vim-language-server # ####################################################################### NODE_DIR=$HOME/tools/nodejs NODE_SRC_NAME=$HOME/packages/nodejs.tar.gz # when download speed is slow, we can also use its mirror site: https://mirrors.ustc.edu.cn/node/v15.0.0/ NODE_LINK="https://mirrors.ustc.edu.cn/node/v15.0.0/node-v15.0.0-linux-x64.tar.xz" if [[ -z "$(command -v node)" ]]; then echo "Install Nodejs" if [[ ! -f $NODE_SRC_NAME ]]; then echo "Downloading nodejs and renaming" wget $NODE_LINK -O "$NODE_SRC_NAME" fi if [[ ! -d "$NODE_DIR" ]]; then echo "Creating nodejs directory under tools directory" mkdir -p "$NODE_DIR" echo "Extracting to $HOME/tools/nodejs directory" tar xvf "$NODE_SRC_NAME" -C "$NODE_DIR" --strip-components 1 fi if [[ "$ADD_TO_SYSTEM_PATH" = true ]] && [[ "$USE_BASH_SHELL" = true ]]; then echo "export PATH=\"$NODE_DIR/bin:\$PATH\"" >> "$HOME/.bash_profile" fi else echo "Nodejs is already installed. Skip installing it." fi # Install vim-language-server "$NODE_DIR/bin/npm" install -g vim-language-server ####################################################################### # Ripgrep part # ####################################################################### RIPGREP_DIR=$HOME/tools/ripgrep RIPGREP_SRC_NAME=$HOME/packages/ripgrep.tar.gz RIPGREP_LINK="https://hub.fastgit.org/BurntSushi/ripgrep/releases/download/12.0.0/ripgrep-12.0.0-x86_64-unknown-linux-musl.tar.gz" if [[ -z "$(command -v rg)" ]] && [[ ! -f "$RIPGREP_DIR/rg" ]]; then echo "Install ripgrep" if [[ ! -f $RIPGREP_SRC_NAME ]]; then echo "Downloading ripgrep and renaming" wget $RIPGREP_LINK -O "$RIPGREP_SRC_NAME" fi if [[ ! -d "$RIPGREP_DIR" ]]; then echo "Creating ripgrep directory under tools directory" mkdir -p "$RIPGREP_DIR" echo "Extracting to $HOME/tools/ripgrep directory" tar zxvf "$RIPGREP_SRC_NAME" -C "$RIPGREP_DIR" --strip-components 1 fi if [[ "$ADD_TO_SYSTEM_PATH" = true ]] && [[ "$USE_BASH_SHELL" = true ]]; then echo "export PATH=\"$RIPGREP_DIR:\$PATH\"" >> "$HOME/.bash_profile" fi else echo "ripgrep is already installed. Skip installing it." fi ####################################################################### # Ctags install # ####################################################################### CTAGS_SRC_DIR=$HOME/packages/ctags CTAGS_DIR=$HOME/tools/ctags CTAGS_LINK="https://hub.fastgit.org/universal-ctags/ctags.git" if [[ ! -f "$CTAGS_DIR/bin/ctags" ]]; then echo "Install ctags" if [[ ! -d $CTAGS_SRC_DIR ]]; then mkdir -p "$CTAGS_SRC_DIR" else # Prevent an incomplete download. rm -rf "$CTAGS_SRC_DIR" fi git clone --depth=1 "$CTAGS_LINK" "$CTAGS_SRC_DIR" && cd "$CTAGS_SRC_DIR" ./autogen.sh && ./configure --prefix="$CTAGS_DIR" make -j && make install if [[ "$ADD_TO_SYSTEM_PATH" = true ]] && [[ "$USE_BASH_SHELL" = true ]]; then echo "export PATH=\"$CTAGS_DIR/bin:\$PATH\"" >> "$HOME/.bash_profile" fi else echo "ctags is already installed. Skip installing it." fi ####################################################################### # Nvim install # ####################################################################### NVIM_DIR=$HOME/tools/nvim NVIM_SRC_NAME=$HOME/packages/nvim-linux64.tar.gz NVIM_CONFIG_DIR=$HOME/.config/nvim NVIM_LINK="https://hub.fastgit.org/neovim/neovim/releases/download/nightly/nvim-linux64.tar.gz" if [[ ! -f "$NVIM_DIR/bin/nvim" ]]; then echo "Installing Nvim" echo "Creating nvim directory under tools directory" if [[ ! -d "$NVIM_DIR" ]]; then mkdir -p "$NVIM_DIR" fi if [[ ! -f $NVIM_SRC_NAME ]]; then echo "Downloading Nvim" wget "$NVIM_LINK" -O "$NVIM_SRC_NAME" fi echo "Extracting neovim" tar zxvf "$NVIM_SRC_NAME" --strip-components 1 -C "$NVIM_DIR" if [[ "$ADD_TO_SYSTEM_PATH" = true ]] && [[ "$USE_BASH_SHELL" = true ]]; then echo "export PATH=\"$NVIM_DIR/bin:\$PATH\"" >> "$HOME/.bash_profile" fi else echo "Nvim is already installed. Skip installing it." fi echo "Setting up config and installing plugins" if [[ -d "$NVIM_CONFIG_DIR" ]]; then mv "$NVIM_CONFIG_DIR" "$NVIM_CONFIG_DIR.backup" fi git clone --depth=1 https://hub.fastgit.org/jdhao/nvim-config.git "$NVIM_CONFIG_DIR" echo "Installing packer.nvim" git clone --depth=1 https://hub.fastgit.org/wbthomason/packer.nvim \ ~/.local/share/nvim/site/pack/packer/start/packer.nvim echo "Installing plugins" "$NVIM_DIR/bin/nvim" +PackerSync +qall echo "Finished installing Nvim and its dependencies!"