diff options
| -rw-r--r-- | README.md | 36 | ||||
| -rw-r--r-- | lua/bootstrap.lua | 11 | ||||
| -rw-r--r-- | lua/core/which-key.lua | 1 | ||||
| -rw-r--r-- | lua/plugin-loader.lua | 20 | ||||
| -rw-r--r-- | lua/utils/init.lua | 26 | ||||
| -rwxr-xr-x | utils/installer/install.sh | 2 | ||||
| -rwxr-xr-x | utils/installer/install_bin.sh | 33 | 
7 files changed, 93 insertions, 36 deletions
| @@ -123,43 +123,25 @@ To update LunarVim:  ```bash  cd ~/.local/share/lunarvim/lvim && git pull -:PackerSync +lvim +LvimCacheReset +PackerUpdate  ```  ## Known Issues +  If you get either of the following errors  - init.lua:6: module 'bootstrap' not found:  - /home/user/.config/nvim/config.lua not found, falling back to /home/user/.config/nvim/lv-config.lua -Try the following: +Try the following methods: +1. clear up the cache files used by the startup processing. You can either pass it as an argument  ```bash -which lvim -# if output is /usr/local/bin/lvim remove it -sudo rm /usr/local/bin/lvim - -which lvim -# if output is ~/.local/bin/lvim, open lvim and run :PackerSync.  That should get you to a working state - -# otherwise if `which lvim` returns `not found`,  -Make sure the `lvim` file exists in `~/.local/bin/lvim`.   -If the file exists,make sure `~/.local/bin` is in your PATH.  If not, [add it](https://www.lunarvim.org/02-after-install.html#add-lvim-to-path) -either reinstall again or manually add the lunarvim launcher - -If the file doesn't exist, create the file -cd ~/.local/bin -touch lvim -chmod 755 lvim +lvim +LvimCacheReset  ``` +or just call it manually when inside LunarVim `:LvimCacheReset` -And then add the following to the lvim file you created.  Replace all `torvalds` with your user name - +2. make sure your `lvim` binary is up-to-date  ```bash -#!/bin/sh - -export LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-/home/torvalds/.config/lvim}" -export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-/home/torvalds/.local/share/lunarvim}" - -exec nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "$@" - +LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-$HOME/.local/share/lunarvim}" +bash "$LUNARVIM_RUNTIME_DIR/utils/installer/install_bin.sh"  ```  ## Resources diff --git a/lua/bootstrap.lua b/lua/bootstrap.lua index 695dacdc..85d39d2d 100644 --- a/lua/bootstrap.lua +++ b/lua/bootstrap.lua @@ -38,6 +38,8 @@ function M:init()    self.cache_path = get_cache_dir()    self.pack_dir = join_paths(self.runtime_dir, "site", "pack") +  self.packer_install_dir = join_paths(self.runtime_dir, "site", "pack", "packer", "start", "packer.nvim") +  self.packer_cache_path = join_paths(self.config_dir, "plugin", "packer_compiled.lua")    if os.getenv "LUNARVIM_RUNTIME_DIR" then      vim.opt.rtp:remove(join_paths(vim.fn.stdpath "data", "site")) @@ -57,6 +59,7 @@ function M:init()    -- FIXME: currently unreliable in unit-tests    if not os.getenv "LVIM_TEST_ENV" then +    vim.fn.mkdir(vim.fn.stdpath "cache", "p")      require("impatient").setup {        path = vim.fn.stdpath "cache" .. "/lvim_cache",        enable_profiling = true, @@ -69,12 +72,8 @@ function M:init()    }    require("plugin-loader"):init { -    cache_path = self.cache_path, -    runtime_dir = self.runtime_dir, -    config_dir = self.config_dir, -    install_path = join_paths(self.runtime_dir, "site", "pack", "packer", "start", "packer.nvim"), -    package_root = join_paths(self.runtime_dir, "site", "pack"), -    compile_path = join_paths(self.config_dir, "plugin", "packer_compiled.lua"), +    package_root = self.pack_dir, +    install_path = self.packer_install_dir,    }    return self diff --git a/lua/core/which-key.lua b/lua/core/which-key.lua index ef74ee51..3379100d 100644 --- a/lua/core/which-key.lua +++ b/lua/core/which-key.lua @@ -209,6 +209,7 @@ M.config = function()            },            P = { "<cmd>edit ~/.cache/nvim/packer.nvim.log<cr>", "Open the Packer logfile" },          }, +        r = { "<cmd>lua require('utils').reload_lv_config()<cr>", "Reload configurations" },        },        s = {          name = "Search", diff --git a/lua/plugin-loader.lua b/lua/plugin-loader.lua index 08f0e5a0..c20dd21a 100644 --- a/lua/plugin-loader.lua +++ b/lua/plugin-loader.lua @@ -1,11 +1,15 @@  local plugin_loader = {} +local utils = require "utils" +local Log = require "core.log" +-- we need to reuse this outside of init() +local compile_path = get_config_dir() .. "/plugin/packer_compiled.lua" +  function plugin_loader:init(opts)    opts = opts or {}    local install_path = opts.install_path or vim.fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"    local package_root = opts.package_root or vim.fn.stdpath "data" .. "/site/pack" -  local compile_path = opts.compile_path or vim.fn.stdpath "config" .. "/plugin/packer_compile.lua"    if vim.fn.empty(vim.fn.glob(install_path)) > 0 then      vim.fn.system { "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path } @@ -32,6 +36,20 @@ function plugin_loader:init(opts)    return self  end +function plugin_loader:cache_clear() +  if vim.fn.delete(compile_path) == 0 then +    Log:debug "deleted packer_compiled.lua" +  end +end + +function plugin_loader:cache_reset() +  self.cache_clear() +  require("packer").compile() +  if utils.is_file(compile_path) then +    Log:debug "generated packer_compiled.lua" +  end +end +  function plugin_loader:load(configurations)    return self.packer.startup(function(use)      for _, plugins in ipairs(configurations) do diff --git a/lua/utils/init.lua b/lua/utils/init.lua index 100ab628..5a5e4ba3 100644 --- a/lua/utils/init.lua +++ b/lua/utils/init.lua @@ -93,9 +93,11 @@ function utils.reload_lv_config()    vim.cmd("source " .. utils.join_paths(get_runtime_dir(), "lvim", "lua", "plugins.lua"))    local plugins = require "plugins"    utils.toggle_autoformat() -  require("plugin-loader"):load { plugins, lvim.plugins } -  vim.cmd ":PackerCompile" +  local plugin_loader = require "plugin-loader" +  plugin_loader:cache_reset() +  plugin_loader:load { plugins, lvim.plugins }    vim.cmd ":PackerInstall" +  vim.cmd ":PackerCompile"    -- vim.cmd ":PackerClean"    local null_ls = require "lsp.null-ls"    null_ls.setup(vim.bo.filetype, { force_reload = true }) @@ -118,6 +120,18 @@ function utils.gsub_args(args)    return args  end +--- Returns a table with the default values that are missing. +--- either paramter can be empty. +--@param config (table) table containing entries that take priority over defaults +--@param default_config (table) table contatining default values if found +function utils.apply_defaults(config, default_config) +  config = config or {} +  default_config = default_config or {} +  local new_config = vim.tbl_deep_extend("keep", vim.empty_dict(), config) +  new_config = vim.tbl_deep_extend("keep", new_config, default_config) +  return new_config +end +  --- Checks whether a given path exists and is a file.  --@param filename (string) path to check  --@returns (bool) @@ -132,6 +146,14 @@ function utils.join_paths(...)    return result  end +function utils.lvim_cache_reset() +  _G.__luacache.clear_cache() +  _G.__luacache.save_cache() +  require("plugin-loader"):cache_reset() +end + +vim.cmd [[ command! LvimCacheReset lua require('utils').lvim_cache_reset() ]] +  return utils  -- TODO: find a new home for these autocommands diff --git a/utils/installer/install.sh b/utils/installer/install.sh index 876e3cd0..d2295079 100755 --- a/utils/installer/install.sh +++ b/utils/installer/install.sh @@ -294,6 +294,8 @@ function update_lvim() {      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 "Clearing up old startup cache" +  "$INSTALL_PREFIX/bin/lvim" --headless +LvimCacheReset +q    echo "Your LunarVim installation is now up to date!"  } diff --git a/utils/installer/install_bin.sh b/utils/installer/install_bin.sh new file mode 100755 index 00000000..2438d5d1 --- /dev/null +++ b/utils/installer/install_bin.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +set -eo pipefail + +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"}" + +declare -r LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$XDG_DATA_HOME/lunarvim"}" +declare -r LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$XDG_CONFIG_HOME/lvim"}" + +# TODO: Use a dedicated cache directory #1256 +declare -r LUNARVIM_CACHE_DIR="$XDG_CACHE_HOME/nvim" + +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}" +export LUNARVIM_CACHE_DIR="\${LUNARVIM_CACHE_DIR:-$LUNARVIM_CACHE_DIR}" + +exec nvim -u "\$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "\$@" +EOF +  chmod +x "$INSTALL_PREFIX/bin/lvim" +} + +setup_shim "$@" +echo "You can start LunarVim by running: $INSTALL_PREFIX/bin/lvim" | 
