diff options
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/bin/install-latest-neovim | 9 | ||||
-rw-r--r--[-rwxr-xr-x] | utils/bin/lvim | 5 | ||||
-rw-r--r-- | utils/installer/config.example-no-ts.lua | 30 | ||||
-rw-r--r-- | utils/installer/config.example.lua | 30 | ||||
-rwxr-xr-x | utils/installer/install-neovim-from-release | 83 | ||||
-rwxr-xr-x | utils/installer/install.sh | 471 | ||||
-rwxr-xr-x | utils/installer/install_stylua.sh | 76 | ||||
-rwxr-xr-x | utils/installer/uninstall.sh | 8 |
8 files changed, 431 insertions, 281 deletions
diff --git a/utils/bin/install-latest-neovim b/utils/bin/install-latest-neovim deleted file mode 100755 index 8d1d95fd..00000000 --- a/utils/bin/install-latest-neovim +++ /dev/null @@ -1,9 +0,0 @@ -!#/bin/bash -cd ~ -sudo rm -r neovim -git clone --branch master --depth 1 https://github.com/neovim/neovim -cd neovim -sudo make CMAKE_BUILD_TYPE=Release install -cd ~ -sudo rm -r neovim - diff --git a/utils/bin/lvim b/utils/bin/lvim index b94d544f..2303be3c 100755..100644 --- a/utils/bin/lvim +++ b/utils/bin/lvim @@ -1,3 +1,6 @@ #!/bin/sh -exec nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" "$@" +export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-$HOME/.local/share/lunarvim}" +export LUNARVIM_CONFIG_DIR="${LUNARVIM_RUNTIME_DIR:-$HOME/.config/lvim}" + +exec nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "$@" diff --git a/utils/installer/config.example-no-ts.lua b/utils/installer/config.example-no-ts.lua index 4303d264..aad13fe0 100644 --- a/utils/installer/config.example-no-ts.lua +++ b/utils/installer/config.example-no-ts.lua @@ -14,8 +14,21 @@ lvim.keys.normal_mode["<C-s>"] = ":w<cr>" -- edit a default keymapping -- lvim.keys.normal_mode["<C-q>"] = ":q<cr>" +-- Change Telescope navigation to use j and k for navigation and n and p for history in both input and normal mode. +-- lvim.builtin.telescope.on_config_done = function() +-- local actions = require "telescope.actions" +-- -- for input mode +-- lvim.builtin.telescope.defaults.mappings.i["<C-j>"] = actions.move_selection_next +-- lvim.builtin.telescope.defaults.mappings.i["<C-k>"] = actions.move_selection_previous +-- lvim.builtin.telescope.defaults.mappings.i["<C-n>"] = actions.cycle_history_next +-- lvim.builtin.telescope.defaults.mappings.i["<C-p>"] = actions.cycle_history_prev +-- -- for normal mode +-- lvim.builtin.telescope.defaults.mappings.n["<C-j>"] = actions.move_selection_next +-- lvim.builtin.telescope.defaults.mappings.n["<C-k>"] = actions.move_selection_previous +-- end + -- Use which-key to add extra bindings with the leader-key prefix --- lvim.builtin.which_key.mappings["P"] = { "<cmd>lua require'telescope'.extensions.project.project{}<CR>", "Projects" } +-- lvim.builtin.which_key.mappings["P"] = { "<cmd>Telescope projects<CR>", "Projects" } -- lvim.builtin.which_key.mappings["t"] = { -- name = "+Trouble", -- r = { "<cmd>Trouble lsp_references<cr>", "References" }, @@ -48,6 +61,21 @@ lvim.builtin.treesitter.highlight.enabled = true -- --Enable completion triggered by <c-x><c-o> -- buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") -- end +-- you can overwrite the null_ls setup table (useful for setting the root_dir function) +-- lvim.lsp.null_ls.setup = { +-- root_dir = require("lspconfig").util.root_pattern("Makefile", ".git", "node_modules"), +-- } +-- or if you need something more advanced +-- lvim.lsp.null_ls.setup.root_dir = function(fname) +-- if vim.bo.filetype == "javascript" then +-- return require("lspconfig/util").root_pattern("Makefile", ".git", "node_modules")(fname) +-- or require("lspconfig/util").path.dirname(fname) +-- elseif vim.bo.filetype == "php" then +-- return require("lspconfig/util").root_pattern("Makefile", ".git", "composer.json")(fname) or vim.fn.getcwd() +-- else +-- return require("lspconfig/util").root_pattern("Makefile", ".git")(fname) or require("lspconfig/util").path.dirname(fname) +-- end +-- end -- set a formatter if you want to override the default lsp one (if it exists) -- lvim.lang.python.formatters = { diff --git a/utils/installer/config.example.lua b/utils/installer/config.example.lua index 0aee0275..c2c75fbb 100644 --- a/utils/installer/config.example.lua +++ b/utils/installer/config.example.lua @@ -23,8 +23,21 @@ lvim.keys.normal_mode["<C-s>"] = ":w<cr>" -- edit a default keymapping -- lvim.keys.normal_mode["<C-q>"] = ":q<cr>" +-- Change Telescope navigation to use j and k for navigation and n and p for history in both input and normal mode. +-- lvim.builtin.telescope.on_config_done = function() +-- local actions = require "telescope.actions" +-- -- for input mode +-- lvim.builtin.telescope.defaults.mappings.i["<C-j>"] = actions.move_selection_next +-- lvim.builtin.telescope.defaults.mappings.i["<C-k>"] = actions.move_selection_previous +-- lvim.builtin.telescope.defaults.mappings.i["<C-n>"] = actions.cycle_history_next +-- lvim.builtin.telescope.defaults.mappings.i["<C-p>"] = actions.cycle_history_prev +-- -- for normal mode +-- lvim.builtin.telescope.defaults.mappings.n["<C-j>"] = actions.move_selection_next +-- lvim.builtin.telescope.defaults.mappings.n["<C-k>"] = actions.move_selection_previous +-- end + -- Use which-key to add extra bindings with the leader-key prefix --- lvim.builtin.which_key.mappings["P"] = { "<cmd>lua require'telescope'.extensions.project.project{}<CR>", "Projects" } +-- lvim.builtin.which_key.mappings["P"] = { "<cmd>Telescope projects<CR>", "Projects" } -- lvim.builtin.which_key.mappings["t"] = { -- name = "+Trouble", -- r = { "<cmd>Trouble lsp_references<cr>", "References" }, @@ -57,6 +70,21 @@ lvim.builtin.treesitter.highlight.enabled = true -- --Enable completion triggered by <c-x><c-o> -- buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") -- end +-- you can overwrite the null_ls setup table (useful for setting the root_dir function) +-- lvim.lsp.null_ls.setup = { +-- root_dir = require("lspconfig").util.root_pattern("Makefile", ".git", "node_modules"), +-- } +-- or if you need something more advanced +-- lvim.lsp.null_ls.setup.root_dir = function(fname) +-- if vim.bo.filetype == "javascript" then +-- return require("lspconfig/util").root_pattern("Makefile", ".git", "node_modules")(fname) +-- or require("lspconfig/util").path.dirname(fname) +-- elseif vim.bo.filetype == "php" then +-- return require("lspconfig/util").root_pattern("Makefile", ".git", "composer.json")(fname) or vim.fn.getcwd() +-- else +-- return require("lspconfig/util").root_pattern("Makefile", ".git")(fname) or require("lspconfig/util").path.dirname(fname) +-- end +-- end -- set a formatter if you want to override the default lsp one (if it exists) -- lvim.lang.python.formatters = { diff --git a/utils/installer/install-neovim-from-release b/utils/installer/install-neovim-from-release new file mode 100755 index 00000000..a2ba0513 --- /dev/null +++ b/utils/installer/install-neovim-from-release @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +set -eu pipefall + +declare -r LV_INSTALL_PREFIX="${INSTALL_PREFIX:-"$HOME/.local"}" +declare -r RELEASE_VER="${RELEASE_VER:-latest}" # can be set to nightly + +declare ARCHIVE_NAME +declare RELEASE_NAME +declare OS + +OS="$(uname -s)" + +if [ "$OS" == "Linux" ]; then + ARCHIVE_NAME="nvim-linux64" + RELEASE_NAME="nvim-linux64" +elif [ "$OS" == "Darwin" ]; then + ARCHIVE_NAME="nvim-macos" + # for some reason the archive has a different name + RELEASE_NAME="nvim-osx64" +else + echo "$OS platform is not supported currently" + exit 1 +fi + +declare -r RELEASE_URL="https://github.com/neovim/neovim/releases/$RELEASE_VER/download/$ARCHIVE_NAME.tar.gz" +declare -r CHECKSUM_URL="$RELEASE_URL.sha256sum" + +DOWNLOAD_DIR="$(mktemp -d)" +readonly DOWNLOAD_DIR + +RELEASE_SHA="$(curl -Ls "$CHECKSUM_URL" | awk '{print $1}')" +readonly RELEASE_SHA + +function main() { + if [ ! -d "$LV_INSTALL_PREFIX" ]; then + mkdir -p "$LV_INSTALL_PREFIX" || __invalid__prefix__handler + fi + download_neovim + verify_neovim + install_neovim +} + +function download_neovim() { + echo "Downloading Neovim's binary from $RELEASE_VER release.." + if ! curl --progress-bar --fail -L "$RELEASE_URL" -o "$DOWNLOAD_DIR/$ARCHIVE_NAME.tar.gz"; then + echo "Download failed. Check that the release/filename are correct." + exit 1 + fi + echo "Download complete!" +} + +function verify_neovim() { + echo "Verifying the installation.." + DOWNLOADED_SHA="$(sha256sum "$DOWNLOAD_DIR/$ARCHIVE_NAME.tar.gz" | awk '{print $1}')" + + if [ "$RELEASE_SHA" != "$DOWNLOADED_SHA" ]; then + echo "Error! checksum mis-match." + echo "Expected: $RELEASE_SHA but got: $DOWNLOADED_SHA" + exit 1 + fi + echo "Verification complete!" +} + +function install_neovim() { + + echo "Installing Neovim.." + pushd "$DOWNLOAD_DIR" + tar -xzf "$DOWNLOAD_DIR/$ARCHIVE_NAME.tar.gz" + popd + # https://dev.to/ackshaey/macos-vs-linux-the-cp-command-will-trip-you-up-2p00 + cp -r "$DOWNLOAD_DIR/$RELEASE_NAME/." "$LV_INSTALL_PREFIX" + echo "Installation complete!" + echo "Now you can run $LV_INSTALL_PREFIX/bin/nvim" +} + +function __invalid__prefix__handler() { + echo "Error! Invalid value for LV_INSTALL_PREFIX: [$INSTALL_PREFIX]" + echo "Please verify that the folder exists and re-run the installer!" + exit 1 +} + +main "$@" diff --git a/utils/installer/install.sh b/utils/installer/install.sh index 25b67f12..9e198274 100755 --- a/utils/installer/install.sh +++ b/utils/installer/install.sh @@ -1,272 +1,289 @@ -#!/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"}" + +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"}" -installnodetermux() { - apt install nodejs -} +# TODO: Use a dedicated cache directory #1256 +declare -r NEOVIM_CACHE_DIR="$XDG_CACHE_HOME/nvim" -moveoldlvim() { - echo "Not installing LunarVim" - echo "Please move your ~/.local/share/lunarvim folder before installing" - exit -} +declare -r LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$XDG_DATA_HOME/lunarvim"}" +declare -r LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$XDG_CONFIG_HOME/lvim"}" -installnodearch() { - sudo pacman -S nodejs - sudo pacman -S npm -} +declare -a __lvim_dirs=( + "$LUNARVIM_CONFIG_DIR" + "$LUNARVIM_RUNTIME_DIR" + "$NEOVIM_CACHE_DIR" # for now this is shared with neovim +) + +declare -a __npm_deps=( + "neovim" + "tree-sitter-cli" +) + +declare -a __pip_deps=( + "pynvim" +) + +function main() { + cat <<'EOF' + + 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 | + \__| \______/ \__| \__| \_______|\__| \_/ \__|\__| \__| \__| + +EOF + + __add_separator "80" + + echo "Detecting platform for managing any additional neovim dependencies" + detect_platform + + if [ -n "$GITHUB_ACTIONS" ]; then + install_packer + setup_lvim + exit 0 + fi + + check_system_deps + + __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 + + __add_separator "80" + + echo "Backing up old LunarVim configuration" + backup_old_config + + __add_separator "80" + + 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 + install_packer + fi + + __add_separator "80" + + if [ -e "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" ]; then + echo "Updating LunarVim" + update_lvim + else + clone_lvim + setup_lvim + fi + + __add_separator "80" -installnodefedora() { - sudo dnf install -y nodejs - sudo dnf install -y npm } -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 +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" + ;; + *) + echo "OS $OS is not currently supported." + exit 1 + ;; + esac } -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 +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" } -installpiponmac() { - sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python3 get-pip.py - rm get-pip.py +function check_dep() { + if ! command -v "$1" &>/dev/null; then + print_missing_dep_msg "$1" + exit 1 + fi } -installpiponubuntu() { - sudo apt install python3-pip >/dev/null +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 } -installpipontermux() { - apt install python +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" } -installpiponarch() { - sudo pacman -S python-pip +function install_python_deps() { + echo "Verifying that pip is available.." + if ! python3 -m ensurepip &>/dev/null; then + if ! python3 -m pip --version &>/dev/null; then + print_missing_dep_msg "pip" + exit 1 + fi + fi + echo "Installing with pip.." + for dep in "${__pip_deps[@]}"; do + python3 -m pip install --user "$dep" + done + echo "All Python dependencies are succesfully installed" } -installpiponfedora() { - sudo dnf install -y pip >/dev/null +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 } -installpipongentoo() { - sudo emerge -avn dev-python/pip +# 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" } -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" +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 --progress --cvs-exclude \ + --modify-window=1 "$dir"/ "$dir.bak" + else + cp -R "$dir/*" "$dir.bak/." + fi + done + echo "Backup operation complete" } -installpynvim() { - echo "Installing pynvim..." - if [ -f "/etc/gentoo-release" ]; then - echo "Installing using Portage" - sudo emerge -avn dev-python/pynvim - else - pip3 install pynvim --user - fi +function install_packer() { + git clone --depth 1 https://github.com/wbthomason/packer.nvim \ + "$LUNARVIM_RUNTIME_DIR/site/pack/packer/start/packer.nvim" } -installpacker() { - git clone https://github.com/wbthomason/packer.nvim ~/.local/share/lunarvim/site/pack/packer/start/packer.nvim +function clone_lvim() { + echo "Cloning LunarVim configuration" + if ! git clone --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 } -cloneconfig() { - if [ -d "/data/data/com.termux" ]; then - sudo() { - eval "$@" - } - USER_BIN_DIR="$HOME/../usr/bin" - fi - echo "Cloning LunarVim configuration" - mkdir -p ~/.local/share/lunarvim - case "$@" in - - *--testing*) - cp -r "$(pwd)" ~/.local/share/lunarvim/lvim - ;; - *) - git clone --branch "$LVBRANCH" https://github.com/lunarvim/lunarvim.git ~/.local/share/lunarvim/lvim - ;; - 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" - - 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" - fi +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}" -asktoinstallnode() { - echo "node not found" - printf "Would you like to install node now (y/n)? " - read -r answer - [ "$answer" != "${answer#[Yy]}" ] && installnode +exec nvim -u "\$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "\$@" +EOF + chmod +x "$INSTALL_PREFIX/bin/lvim" } -asktoinstallgit() { - echo "git not found, please install git" - exit -} +function setup_lvim() { + echo "Installing LunarVim shim" -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 -} + setup_shim -installonmac() { - brew install ripgrep fzf - npm install -g tree-sitter-cli -} + echo "Preparing Packer setup" -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 -} + cp "$LUNARVIM_RUNTIME_DIR/lvim/utils/installer/config.example-no-ts.lua" \ + "$LUNARVIM_CONFIG_DIR/config.lua" -installtermux() { - apt install ripgrep fzf - pip install neovim-remote - npm install -g tree-sitter-cli -} + nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" --headless \ + -c 'autocmd User PackerComplete quitall' \ + -c 'PackerSync' -installonarch() { - sudo pacman -S ripgrep fzf - pip3 install neovim-remote - npm install -g tree-sitter-cli -} + echo "Packer setup complete" + + cp "$LUNARVIM_RUNTIME_DIR/lvim/utils/installer/config.example.lua" "$LUNARVIM_CONFIG_DIR/config.lua" -installonfedora() { - sudo dnf groupinstall "X Software Development" - sudo dnf install -y fzf ripgrep + 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]" } -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 update_lvim() { + git -C "$LUNARVIM_RUNTIME_DIR/lvim" fetch --quiet + if ! git -C "$LUNARVIM_RUNTIME_DIR/lvim" diff --quiet "@{upstream}"; then + git -C "$LUNARVIM_RUNTIME_DIR/lvim" merge --ff-only --progress || + echo "Unable to guarantee data integrity while updating. Please do that manually instead." && exit 1 + fi + echo "Your LunarVim installation is now up to date!" } -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 __add_separator() { + local DIV_WIDTH="$1" + printf "%${DIV_WIDTH}s\n" ' ' | tr ' ' - } -# 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" - fi -fi - -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 "$@" diff --git a/utils/installer/install_stylua.sh b/utils/installer/install_stylua.sh index 2a33de7e..963416ea 100755 --- a/utils/installer/install_stylua.sh +++ b/utils/installer/install_stylua.sh @@ -11,53 +11,53 @@ declare -r FILENAME="stylua-$RELEASE-$OS" declare -a __deps=("curl" "unzip") function check_deps() { - for dep in "${__deps[@]}"; do - if ! command -v "$dep" >/dev/null; then - echo "Missing depdendecy!" - echo "The \"$dep\" command was not found!. Please install and try again." - fi - done + for dep in "${__deps[@]}"; do + if ! command -v "$dep" >/dev/null; then + echo "Missing depdendecy!" + echo "The \"$dep\" command was not found!. Please install and try again." + fi + done } function download_stylua() { - local DOWNLOAD_DIR - local URL="https://github.com/JohnnyMorganz/StyLua/releases/download/v$RELEASE/$FILENAME.zip" - - DOWNLOAD_DIR="$(mktemp -d)" - echo "Initiating download for Stylua v$RELEASE" - if ! curl --progress-bar --fail -L "$URL" -o "$DOWNLOAD_DIR/$FILENAME.zip"; then - echo "Download failed. Check that the release/filename are correct." - exit 1 - fi - - echo "Installation in progress.." - unzip -q "$DOWNLOAD_DIR/$FILENAME.zip" -d "$DOWNLOAD_DIR" - - if [ -f "$DOWNLOAD_DIR/stylua" ]; then - mv "$DOWNLOAD_DIR/stylua" "$INSTALL_DIR/stylua" - else - mv "$DOWNLOAD_DIR/$FILENAME/stylua" "$INSTALL_DIR/." - fi - - chmod u+x "$INSTALL_DIR/stylua" + local DOWNLOAD_DIR + local URL="https://github.com/JohnnyMorganz/StyLua/releases/download/v$RELEASE/$FILENAME.zip" + + DOWNLOAD_DIR="$(mktemp -d)" + echo "Initiating download for Stylua v$RELEASE" + if ! curl --progress-bar --fail -L "$URL" -o "$DOWNLOAD_DIR/$FILENAME.zip"; then + echo "Download failed. Check that the release/filename are correct." + exit 1 + fi + + echo "Installation in progress.." + unzip -q "$DOWNLOAD_DIR/$FILENAME.zip" -d "$DOWNLOAD_DIR" + + if [ -f "$DOWNLOAD_DIR/stylua" ]; then + mv "$DOWNLOAD_DIR/stylua" "$INSTALL_DIR/stylua" + else + mv "$DOWNLOAD_DIR/$FILENAME/stylua" "$INSTALL_DIR/." + fi + + chmod u+x "$INSTALL_DIR/stylua" } function verify_install() { - echo "Verifying installation.." - local DOWNLOADED_VER - DOWNLOADED_VER="$("$INSTALL_DIR/stylua" -V | awk '{ print $2 }')" - if [ "$DOWNLOADED_VER" != "$RELEASE" ]; then - echo "Mismatched version!" - echo "Expected: v$RELEASE but got v$DOWNLOADED_VER" - exit 1 - fi - echo "Verification complete!" + echo "Verifying installation.." + local DOWNLOADED_VER + DOWNLOADED_VER="$("$INSTALL_DIR/stylua" -V | awk '{ print $2 }')" + if [ "$DOWNLOADED_VER" != "$RELEASE" ]; then + echo "Mismatched version!" + echo "Expected: v$RELEASE but got v$DOWNLOADED_VER" + exit 1 + fi + echo "Verification complete!" } function main() { - check_deps - download_stylua - verify_install + check_deps + download_stylua + verify_install } main "$@" diff --git a/utils/installer/uninstall.sh b/utils/installer/uninstall.sh index b9a27252..8d9d039a 100755 --- a/utils/installer/uninstall.sh +++ b/utils/installer/uninstall.sh @@ -1,10 +1,10 @@ #!/bin/sh USER_BIN_DIR="/usr/local/bin" if [ -d "/data/data/com.termux" ]; then - sudo() { - eval "$@" - } - USER_BIN_DIR="$HOME/../usr/bin" + sudo() { + eval "$@" + } + USER_BIN_DIR="$HOME/../usr/bin" fi rm -rf ~/.local/share/lunarvim sudo rm "$USER_BIN_DIR"/lvim |