Explorar o código

feat: enable global installation (#3161)

kylo252 %!s(int64=2) %!d(string=hai) anos
pai
achega
f6402563ab

+ 1 - 0
.github/workflows/format.yaml

@@ -22,6 +22,7 @@ jobs:
         with:
           token: ${{ secrets.GITHUB_TOKEN }}
           # CLI arguments
+          version: 0.15.1
           args: --check .
 
   shfmt-check:

+ 5 - 2
init.lua

@@ -1,5 +1,8 @@
-local init_path = debug.getinfo(1, "S").source:sub(2)
-local base_dir = init_path:match("(.*[/\\])"):sub(1, -2)
+local base_dir = vim.env.LUNARVIM_BASE_DIR
+  or (function()
+    local init_path = debug.getinfo(1, "S").source
+    return init_path:sub(2):match("(.*[/\\])"):sub(1, -2)
+  end)()
 
 if not vim.tbl_contains(vim.opt.rtp:get(), base_dir) then
   vim.opt.rtp:append(base_dir)

+ 5 - 1
lua/lvim/config/init.lua

@@ -118,7 +118,11 @@ function M:load(config_path)
     if utils.is_file(user_config_file) then
       Log:warn("Invalid configuration: " .. err)
     else
-      vim.notify_once(string.format("Unable to find configuration file [%s]", config_path), vim.log.levels.WARN)
+      vim.notify_once(
+        string.format("User-configuration not found. Creating an example configuration in %s", config_path)
+      )
+      local example_config = join_paths(get_lvim_base_dir(), "utils", "installer", "config.example.lua")
+      vim.loop.fs_copyfile(example_config, config_path)
     end
   end
 

+ 14 - 1
lua/lvim/utils/git.lua

@@ -1,6 +1,7 @@
 local M = {}
 
 local Log = require "lvim.core.log"
+local fmt = string.format
 local if_nil = vim.F.if_nil
 
 local function git_cmd(opts)
@@ -43,9 +44,16 @@ local function safe_deep_fetch()
   local fetch_mode = result[1] == "true" and "--unshallow" or "--all"
   ret = git_cmd { args = { "fetch", fetch_mode } }
   if ret ~= 0 then
-    Log:error("Git fetch failed! Please pull the changes manually in " .. get_lvim_base_dir())
+    Log:error(fmt "Git fetch %s failed! Please pull the changes manually in %s", fetch_mode, get_lvim_base_dir())
     return
   end
+  if fetch_mode == "--unshallow" then
+    ret = git_cmd { args = { "remote", "set-branches", "origin", "*" } }
+    if ret ~= 0 then
+      Log:error(fmt "Git fetch %s failed! Please pull the changes manually in %s", fetch_mode, get_lvim_base_dir())
+      return
+    end
+  end
   return true
 end
 
@@ -53,6 +61,11 @@ end
 function M.update_base_lvim()
   Log:info "Checking for updates"
 
+  if not vim.loop.fs_access(get_lvim_base_dir(), "w") then
+    Log:warn(fmt("Lunarvim update aborted! cannot write to %s", get_lvim_base_dir()))
+    return
+  end
+
   if not safe_deep_fetch() then
     return
   end

+ 1 - 1
utils/bin/lvim.ps1

@@ -10,4 +10,4 @@ $env:LUNARVIM_CONFIG_DIR = $env:LUNARVIM_CONFIG_DIR ?? "$env:XDG_CONFIG_HOME\lvi
 $env:LUNARVIM_CACHE_DIR = $env:LUNARVIM_CACHE_DIR ?? "$env:XDG_CACHE_HOME\lvim"
 $env:LUNARVIM_BASE_DIR = $env:LUNARVIM_BASE_DIR ?? "$env:LUNARVIM_RUNTIME_DIR\lvim"
 
-nvim -u "$env:LUNARVIM_RUNTIME_DIR\lvim\init.lua" @args
+nvim -u "$env:LUNARVIM_BASE_DIR\init.lua" @args

+ 4 - 2
utils/bin/lvim.template

@@ -1,7 +1,9 @@
-#!/bin/sh
+#!/usr/bin/env bash
 
 export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-RUNTIME_DIR_VAR}"
 export LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-CONFIG_DIR_VAR}"
 export LUNARVIM_CACHE_DIR="${LUNARVIM_CACHE_DIR:-CACHE_DIR_VAR}"
 
-exec nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "$@"
+export LUNARVIM_BASE_DIR="${LUNARVIM_BASE_DIR:-BASE_DIR_VAR}"
+
+exec -a lvim nvim -u "$LUNARVIM_BASE_DIR/init.lua" "$@"

+ 11 - 11
utils/installer/install.sh

@@ -2,20 +2,20 @@
 set -eo pipefail
 
 #Set branch to master unless specified by the user
-declare LV_BRANCH="${LV_BRANCH:-"master"}"
-declare -r LV_REMOTE="${LV_REMOTE:-lunarvim/lunarvim.git}"
-declare -r INSTALL_PREFIX="${INSTALL_PREFIX:-"$HOME/.local"}"
+declare -x LV_BRANCH="${LV_BRANCH:-"master"}"
+declare -xr LV_REMOTE="${LV_REMOTE:-lunarvim/lunarvim.git}"
+declare -xr 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"}"
+declare -xr XDG_DATA_HOME="${XDG_DATA_HOME:-"$HOME/.local/share"}"
+declare -xr XDG_CACHE_HOME="${XDG_CACHE_HOME:-"$HOME/.cache"}"
+declare -xr XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-"$HOME/.config"}"
 
-declare -r LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$XDG_DATA_HOME/lunarvim"}"
-declare -r LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$XDG_CONFIG_HOME/lvim"}"
-declare -r LUNARVIM_CACHE_DIR="${LUNARVIM_CACHE_DIR:-"$XDG_CACHE_HOME/lvim"}"
-declare -r LUNARVIM_BASE_DIR="${LUNARVIM_BASE_DIR:-"$LUNARVIM_RUNTIME_DIR/lvim"}"
+declare -xr LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$XDG_DATA_HOME/lunarvim"}"
+declare -xr LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$XDG_CONFIG_HOME/lvim"}"
+declare -xr LUNARVIM_CACHE_DIR="${LUNARVIM_CACHE_DIR:-"$XDG_CACHE_HOME/lvim"}"
+declare -xr LUNARVIM_BASE_DIR="${LUNARVIM_BASE_DIR:-"$LUNARVIM_RUNTIME_DIR/lvim"}"
 
-declare -r LUNARVIM_LOG_LEVEL="${LUNARVIM_LOG_LEVEL:-warn}"
+declare -xr LUNARVIM_LOG_LEVEL="${LUNARVIM_LOG_LEVEL:-warn}"
 
 declare BASEDIR
 BASEDIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"

+ 2 - 1
utils/installer/install_bin.sh

@@ -26,7 +26,8 @@ function setup_shim() {
 
   sed -e s"#RUNTIME_DIR_VAR#\"${LUNARVIM_RUNTIME_DIR}\"#"g \
     -e s"#CONFIG_DIR_VAR#\"${LUNARVIM_CONFIG_DIR}\"#"g \
-    -e s"#CACHE_DIR_VAR#\"${LUNARVIM_CACHE_DIR}\"#"g "$src" \
+    -e s"#CACHE_DIR_VAR#\"${LUNARVIM_CACHE_DIR}\"#"g \
+    -e s"#BASE_DIR_VAR#\"${LUNARVIM_BASE_DIR}\"#"g "$src" \
     | tee "$dst" >/dev/null
 
   chmod u+x "$dst"