summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/lsp-issue-form.yaml4
-rw-r--r--.github/workflows/install.yaml3
-rw-r--r--.luacheckrc38
-rw-r--r--CONTRIBUTING.md6
-rw-r--r--README.md92
-rw-r--r--ftdetect/plaintex.lua1
-rw-r--r--ftplugin/elixir.lua2
-rw-r--r--ftplugin/euphoria3.lua2
-rw-r--r--ftplugin/gdscript.lua1
-rw-r--r--ftplugin/haskell.lua1
-rw-r--r--ftplugin/ps1.lua3
-rw-r--r--ftplugin/toml.lua1
-rw-r--r--init.lua32
-rw-r--r--lua/core/autocmds.lua16
-rw-r--r--lua/core/autopairs.lua5
-rw-r--r--lua/core/bufferline.lua22
-rw-r--r--lua/core/commands.lua2
-rw-r--r--lua/core/compe.lua65
-rw-r--r--lua/core/dap.lua4
-rw-r--r--lua/core/dashboard.lua9
-rw-r--r--lua/core/galaxyline.lua12
-rw-r--r--lua/core/gitsigns.lua3
-rw-r--r--lua/core/info.lua222
-rw-r--r--lua/core/log.lua29
-rw-r--r--lua/core/nvimtree.lua54
-rw-r--r--lua/core/rooter.lua15
-rw-r--r--lua/core/telescope.lua10
-rw-r--r--lua/core/terminal.lua50
-rw-r--r--lua/core/treesitter.lua2
-rw-r--r--lua/core/which-key.lua40
-rw-r--r--lua/default-config.lua679
-rw-r--r--lua/keymappings.lua261
-rw-r--r--lua/lsp/handlers.lua44
-rw-r--r--lua/lsp/init.lua160
-rw-r--r--lua/lsp/keybinds.lua27
-rw-r--r--lua/lsp/kind.lua33
-rw-r--r--lua/lsp/null-ls.lua162
-rw-r--r--lua/lsp/peek.lua140
-rw-r--r--lua/lsp/service.lua122
-rw-r--r--lua/lsp/signs.lua20
-rw-r--r--lua/plugins.lua13
-rw-r--r--lua/spacegray/LSP.lua25
-rw-r--r--lua/spacegray/Treesitter.lua32
-rw-r--r--lua/spacegray/Whichkey.lua4
-rw-r--r--lua/spacegray/highlights.lua58
-rw-r--r--lua/spacegray/init.lua13
-rw-r--r--lua/spacegray/palette.lua43
-rw-r--r--lua/utils/ft.lua47
-rw-r--r--lua/utils/init.lua80
-rwxr-xr-xutils/bin/lvim2
-rw-r--r--utils/docker/Dockerfile11
-rwxr-xr-xutils/docker/script.sh23
-rw-r--r--utils/installer/config.example-no-ts.lua (renamed from utils/installer/lv-config.example-no-ts.lua)52
-rw-r--r--utils/installer/config.example.lua (renamed from utils/installer/lv-config.example.lua)65
-rwxr-xr-xutils/installer/install.sh43
-rwxr-xr-xutils/installer/install_stylua.sh4
-rwxr-xr-xutils/installer/uninstall.sh10
-rw-r--r--utils/lush-template/lua/lush_theme/lush_template.lua1
58 files changed, 2030 insertions, 890 deletions
diff --git a/.github/ISSUE_TEMPLATE/lsp-issue-form.yaml b/.github/ISSUE_TEMPLATE/lsp-issue-form.yaml
index 6597ec2a..2fabeee6 100644
--- a/.github/ISSUE_TEMPLATE/lsp-issue-form.yaml
+++ b/.github/ISSUE_TEMPLATE/lsp-issue-form.yaml
@@ -31,9 +31,9 @@ body:
required: true
- label: I restarted Neovim after running :LspInstall
required: true
- - label: I have a valid language configuration (~/.config/nvim/ftplugin/)
+ - label: I have a valid language configuration (~/.config/lvim/ftplugin/)
required: true
- - label: I checked the options (~/.config/nvim/lv-config.lua)
+ - label: I checked the options (~/.config/lvim/config.lua)
required: true
- label: The programs specified by the config are installed
- type: input
diff --git a/.github/workflows/install.yaml b/.github/workflows/install.yaml
index e31607fe..08801f1b 100644
--- a/.github/workflows/install.yaml
+++ b/.github/workflows/install.yaml
@@ -30,13 +30,14 @@ jobs:
sudo apt-get update
sudo apt-get install neovim -y
- - name: Installl dependencies for OSX
+ - name: Install dependencies for OSX
if: matrix.os == 'osx'
run: |
brew update >/dev/null
brew install neovim
- name: Install LunarVim
+ timeout-minutes: 4
run: |
bash ./utils/installer/install.sh --testing
diff --git a/.luacheckrc b/.luacheckrc
index b55bbb23..a3875f91 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -1,31 +1,31 @@
-- vim: ft=lua tw=80
stds.nvim = {
- globals = {
- "lvim",
- vim = { fields = { "g" } },
- "CONFIG_PATH",
- "CACHE_PATH",
- "DATA_PATH",
- "TERMINAL",
- "USER",
+ globals = {
+ "lvim",
+ vim = { fields = { "g" } },
+ "CONFIG_PATH",
+ "CACHE_PATH",
+ "DATA_PATH",
+ "TERMINAL",
+ "USER",
"C",
"Config",
"WORKSPACE_PATH",
"JAVA_LS_EXECUTABLE",
"MUtils",
- os = {fields = {"capture"}}
- },
- read_globals = {
- "jit",
- "os",
- "vim",
- -- vim = { fields = { "cmd", "api", "fn", "o" } },
- },
+ "USER_CONFIG_PATH",
+ os = { fields = { "capture" } },
+ },
+ read_globals = {
+ "jit",
+ "os",
+ "vim",
+ -- vim = { fields = { "cmd", "api", "fn", "o" } },
+ },
}
std = "lua51+nvim"
-
-- Don't report unused self arguments of methods.
self = false
@@ -33,6 +33,6 @@ self = false
cache = true
ignore = {
- "631", -- max_line_length
- "212/_.*", -- unused argument, for vars with "_" prefix
+ "631", -- max_line_length
+ "212/_.*", -- unused argument, for vars with "_" prefix
}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f1a8ea57..7606fe46 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
# Contributing to LunarVim
-Welcome to the LunarVim contributing guide. We are excited about the prospect of you joining our [community](https://github.com/ChristianChiarulli/LunarVim/graphs/contributors)!
+Welcome to the LunarVim contributing guide. We are excited about the prospect of you joining our [community](https://github.com/lunarvim/LunarVim/graphs/contributors)!
There are many opportunities to contributing to the project at any level. Every contribution is highly valued and no contribution is too small.
@@ -11,8 +11,8 @@ One of the best ways to begin contributing in a meaningful way is by helping fin
## Getting Started
1. Backup your ~/.config/nvim
-2. Follow the [Installation](https://github.com/ChristianChiarulli/LunarVim/wiki/Installation) guide
-3. Link your fork with the repository `git remote add upstream https://github.com/ChristianChiarulli/LunarVim.git`
+2. Follow the [Installation](https://github.com/lunarvim/LunarVim/wiki/Installation) guide
+3. Link your fork with the repository `git remote add upstream https://github.com/lunarvim/LunarVim.git`
4. That's it ! You can now `git fetch upstream` and `git rebase [-i] upstream/rolling` to update your branches with the latest contributions.
## Setting up development tools
diff --git a/README.md b/README.md
index 122a09f8..edadcd37 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
![LunarVim Demo](./utils/media/lunarvim_logo_dark.png)
<div align="center"><p>
- <a href="https://github.com/ChristianChiarulli/LunarVim/releases/latest">
- <img alt="Latest release" src="https://img.shields.io/github/v/release/ChristianChiarulli/LunarVim" />
+ <a href="https://github.com/lunarvim/LunarVim/releases/latest">
+ <img alt="Latest release" src="https://img.shields.io/github/v/release/lunarvim/LunarVim" />
</a>
- <a href="https://github.com/ChristianChiarulli/LunarVim/pulse">
- <img alt="Last commit" src="https://img.shields.io/github/last-commit/ChristianChiarulli/LunarVim"/>
+ <a href="https://github.com/lunarvim/LunarVim/pulse">
+ <img alt="Last commit" src="https://img.shields.io/github/last-commit/lunarvim/LunarVim"/>
</a>
- <a href="https://github.com/ChristianChiarulli/LunarVim/blob/main/LICENSE">
- <img src="https://img.shields.io/github/license/siduck76/NvChad?style=flat-square&logo=GNU&label=License" alt="License"
+ <a href="https://github.com/lunarvim/LunarVim/blob/main/LICENSE">
+ <img src="https://img.shields.io/github/license/lunarvim/lunarvim?style=flat-square&logo=GNU&label=License" alt="License"
/>
<a href="https://patreon.com/chrisatmachine" title="Donate to this project using Patreon">
<img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" />
@@ -25,22 +25,26 @@
Make sure you have the newest version of Neovim (0.5).
``` bash
-bash <(curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/master/utils/installer/install.sh)
+bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh)
```
### Installing
The following command installs LunarVim. Change `LVBRANCH` to the branch you'd like to install. `master` for the stable branch and `rolling` for the latest changes.
``` bash
-LVBRANCH=rolling bash <(curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/rolling/utils/installer/install.sh)
+LVBRANCH=rolling bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/rolling/utils/installer/install.sh)
```
### BREAKING CHANGE on rolling and master branches
-* The latest changes to LunarVim require you to [remove it completely](https://github.com/ChristianChiarulli/LunarVim/wiki/Uninstalling-LunarVim) before upgrading
+* The latest changes to LunarVim require you to [remove it completely](https://github.com/lunarvim/LunarVim/wiki/Uninstalling-LunarVim) before upgrading
* Going forward LunarVim will no longer reside in the nvim configuration folder. LunarVim has been moved to `~/.local/share/lunarvim`.
* To launch Lunarvim use the new `lvim` command. `nvim` will only launch standard neovim.
-* Your personal configuration file (`lv-config.lua`) can now be found in `~/.config/lvim`. You can initialize this folder as a git repository to track changes to your configuration files.
+* Your personal configuration file (`config.lua`) can now be found in `~/.config/lvim`. You can initialize this folder as a git repository to track changes to your configuration files.
* If you want to keep launching LunarVim with the `nvim` command, add an alias entry to your shell's config file: `alias nvim=lvim`. To temporarily revert to the default `nvim` prefix it with a backslash `\nvim`.
-* Many options formerly available in `lv-config.lua` have been renamed. For details [look here](https://github.com/ChristianChiarulli/LunarVim/wiki/Breaking-changes-in-rolling)
+* Many options formerly available in `config.lua` have been renamed. For details [look here](https://github.com/lunarvim/LunarVim/wiki/Breaking-changes-in-rolling)
+
+### Debugging LunarVim's configuration
+* To turn on debugging add these settings `lvim.log.level = debug` and use `<leader>Ll` to see the options of viewing the logfiles
+* You can also use install [lnav](https://github.com/tstack/lnav) and use it in a floating terminal. Make sure to set `lvim.builtin.terminal.active = true`.
### Fixing installation problems
If your installation is stuck on `Ok to remove? [y/N]`, it means there are some leftovers, \
@@ -51,7 +55,7 @@ you can run the script with `--overwrite` but be warned this will remove the fol
- `~/.local/share/lunarvim` #Removed only on Rolling Branch
- `~/.config/lvim` #Removed only on Rolling Branch
```bash
-curl -s https://raw.githubusercontent.com/ChristianChiarulli/lunarvim/rolling/utils/installer/install.sh | LVBRANCH=rolling bash -s -- --overwrite
+curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/rolling/utils/installer/install.sh | LVBRANCH=rolling bash -s -- --overwrite
```
then run nvim and wait for treesitter to finish the installation
@@ -60,13 +64,13 @@ then run nvim and wait for treesitter to finish the installation
Just enter `:LspInstall` followed by `<TAB>` to see your options
-**NOTE** I recommend installing `lua` for autocomplete in `lv-config.lua`
+**NOTE** I recommend installing `lua` for autocomplete in `config.lua`
-For the julia language server look [here](https://github.com/ChristianChiarulli/LunarVim/wiki/Enabling-a-language-server#julia-support)
+For the julia language server look [here](https://github.com/lunarvim/LunarVim/wiki/Enabling-a-language-server#julia-support)
## Configuration file
-To activate other plugins and language features use the `lv-config.lua` file provided in the `nvim` folder (`~/.config/nvim/lv-config.lua`) in the master branch or (`~/.config/lvim/lv-config.lua`) on rolling
+To activate other plugins and language features use the `lv-config.lua` file provided in the `nvim` folder (`~/.config/nvim/lv-config.lua`) in the master branch or (`~/.config/lvim/config.lua`) on rolling
Example:
@@ -78,8 +82,28 @@ lvim.colorscheme = "spacegray"
lvim.builtin.compe.autocomplete = true
--- keymappings
+-- keymappings [view all the defaults by pressing <leader>Lk]
lvim.leader = "space"
+-- add your own keymapping
+lvim.keys.normal_mode["<C-s>"] = ":w<cr>"
+-- unmap a default keymapping
+-- lvim.keys.normal_mode["<C-Up>"] = ""
+-- edit a default keymapping
+-- lvim.keys.normal_mode["<C-q>"] = ":q<cr>"
+-- set keymap with custom opts
+-- lvim.keys.insert_mode["po"] = {'<ESC>', { noremap = true }}
+
+-- 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["t"] = {
+-- name = "+Trouble",
+-- r = { "<cmd>Trouble lsp_references<cr>", "References" },
+-- f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
+-- d = { "<cmd>Trouble lsp_document_diagnostics<cr>", "Diagnosticss" },
+-- q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
+-- l = { "<cmd>Trouble loclist<cr>", "LocationList" },
+-- w = { "<cmd>Trouble lsp_workspace_diagnostics<cr>", "Diagnosticss" },
+-- }
-- After changing plugin config exit and reopen LunarVim, Run :PackerInstall :PackerCompile
lvim.builtin.dashboard.active = true
@@ -90,11 +114,24 @@ lvim.builtin.treesitter.ensure_installed = "maintained"
lvim.builtin.treesitter.ignore_install = { "haskell" }
lvim.builtin.treesitter.highlight.enabled = true
-lvim.lang.python.formatter.exe = "black"
-lvim.lang.python.linters = ""
-
lvim.lsp.diagnostics.virtual_text = false
+-- set a formatter if you want to override the default lsp one (if it exists)
+lvim.lang.python.formatters = {
+ {
+ exe = "black",
+ args = {}
+ }
+}
+-- set an additional linter
+lvim.lang.python.linters = {
+ {
+ exe = "flake8",
+ args = {}
+ }
+}
+
+
-- Additional Plugins
lvim.plugins = {
{"lunarvim/colorschemes"},
@@ -110,17 +147,6 @@ lvim.plugins = {
-- { "BufWinEnter", "*.lua", "setlocal ts=8 sw=8" },
-- }
--- Additional Leader bindings for WhichKey
--- lvim.builtin.which_key.mappings["P"] = { "<cmd>lua require'telescope'.extensions.project.project{}<CR>", "Projects" }
--- lvim.builtin.which_key.mappings["t"] = {
--- name = "+Trouble",
--- r = { "<cmd>Trouble lsp_references<cr>", "References" },
--- f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
--- d = { "<cmd>Trouble lsp_document_diagnostics<cr>", "Diagnosticss" },
--- q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
--- l = { "<cmd>Trouble loclist<cr>", "LocationList" },
--- w = { "<cmd>Trouble lsp_workspace_diagnostics<cr>", "Diagnosticss" },
--- }
```
@@ -149,7 +175,7 @@ cd ~/.local/share/lunarvim/lvim && git pull
:PackerSync
```
-To update Neovim use your package manager or [compile from source](https://github.com/ChristianChiarulli/LunarVim/wiki/Installation#get-the-latest-version-of-neovim)
+To update Neovim use your package manager or [compile from source](https://github.com/lunarvim/LunarVim/wiki/Installation#get-the-latest-version-of-neovim)
## Project Goals
@@ -165,7 +191,7 @@ To update Neovim use your package manager or [compile from source](https://githu
- User configurable lang/feature enable/disable
3. Provide a [simple and easy](https://github.com/LunarVim/LunarVimCommunity) way for users to share their own configuration or use others.
4. Hot reload of configurations
- - Hot install of lsp/treesitter/formatter required upon openning a filetype for the first time
+ - Hot install of lsp/treesitter/formatter required upon opening a filetype for the first time
5. Provide a stable & maintainable error free configuration layer over neovim
- With the help of the community behind it
- Github workflow testing
@@ -178,7 +204,7 @@ To update Neovim use your package manager or [compile from source](https://githu
- [YouTube](https://www.youtube.com/channel/UCS97tchJDq17Qms3cux8wcA)
-- [Wiki](https://github.com/ChristianChiarulli/LunarVim/wiki)
+- [Documentation](https://www.lunarvim.org)
- [Discord](https://discord.gg/Xb9B4Ny)
diff --git a/ftdetect/plaintex.lua b/ftdetect/plaintex.lua
new file mode 100644
index 00000000..aa01dec8
--- /dev/null
+++ b/ftdetect/plaintex.lua
@@ -0,0 +1 @@
+vim.cmd [[ au BufRead,BufNewFile *.tex set filetype=tex ]]
diff --git a/ftplugin/elixir.lua b/ftplugin/elixir.lua
index f16f71fa..f8ae8b64 100644
--- a/ftplugin/elixir.lua
+++ b/ftplugin/elixir.lua
@@ -1,7 +1,7 @@
require("lsp").setup "elixir"
-- TODO: do we need this?
--- needed for the LSP to recognize elixir files (alternativly just use elixir-editors/vim-elixir)
+-- needed for the LSP to recognize elixir files (alternatively just use elixir-editors/vim-elixir)
-- vim.cmd [[
-- au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
-- au BufRead,BufNewFile *.eex,*.leex,*.sface set filetype=eelixir
diff --git a/ftplugin/euphoria3.lua b/ftplugin/euphoria3.lua
index 391c51ad..168af22b 100644
--- a/ftplugin/euphoria3.lua
+++ b/ftplugin/euphoria3.lua
@@ -1,7 +1,7 @@
require("lsp").setup "erlang"
-- TODO: do we need this?
--- needed for the LSP to recognize elixir files (alternativly just use elixir-editors/vim-elixir)
+-- needed for the LSP to recognize elixir files (alternatively just use elixir-editors/vim-elixir)
-- vim.cmd [[
-- au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
-- au BufRead,BufNewFile *.eex,*.leex,*.sface set filetype=eelixir
diff --git a/ftplugin/gdscript.lua b/ftplugin/gdscript.lua
new file mode 100644
index 00000000..b23a20e2
--- /dev/null
+++ b/ftplugin/gdscript.lua
@@ -0,0 +1 @@
+require("lsp").setup "gdscript"
diff --git a/ftplugin/haskell.lua b/ftplugin/haskell.lua
new file mode 100644
index 00000000..374bed1a
--- /dev/null
+++ b/ftplugin/haskell.lua
@@ -0,0 +1 @@
+require("lsp").setup "haskell"
diff --git a/ftplugin/ps1.lua b/ftplugin/ps1.lua
new file mode 100644
index 00000000..6d388496
--- /dev/null
+++ b/ftplugin/ps1.lua
@@ -0,0 +1,3 @@
+require("lsp").setup "ps1"
+
+vim.cmd [[setlocal ts=4 sw=4]]
diff --git a/ftplugin/toml.lua b/ftplugin/toml.lua
new file mode 100644
index 00000000..701685a4
--- /dev/null
+++ b/ftplugin/toml.lua
@@ -0,0 +1 @@
+vim.cmd [[setlocal commentstring=#%s]]
diff --git a/init.lua b/init.lua
index 7f06285d..0224a383 100644
--- a/init.lua
+++ b/init.lua
@@ -11,18 +11,36 @@ vim.cmd [[
set runtimepath^=~/.local/share/lunarvim/lvim/after
]]
-- vim.opt.rtp:append() instead of vim.cmd ?
+
+local function file_exists(name)
+ local f = io.open(name, "r")
+ if f ~= nil then
+ io.close(f)
+ return true
+ else
+ return false
+ end
+end
+
+local lvim_path = os.getenv "HOME" .. "/.config/lvim/"
+USER_CONFIG_PATH = lvim_path .. "config.lua"
+local config_exist = file_exists(USER_CONFIG_PATH)
+if not config_exist then
+ USER_CONFIG_PATH = lvim_path .. "lv-config.lua"
+ print "Rename ~/.config/lvim/lv-config.lua to config.lua"
+end
+
require "default-config"
+local autocmds = require "core.autocmds"
require("settings").load_options()
-local status_ok, error = pcall(vim.cmd, "luafile ~/.config/lvim/lv-config.lua")
+
+local status_ok, error = pcall(vim.cmd, "luafile " .. USER_CONFIG_PATH)
if not status_ok then
- print "something is wrong with your lv-config"
+ print("something is wrong with your " .. USER_CONFIG_PATH)
print(error)
end
require("settings").load_commands()
-require("core.autocmds").define_augroups(lvim.autocommands)
-
-require "keymappings"
--- require("lsp").setup_default_bindings()
+autocmds.define_augroups(lvim.autocommands)
local plugins = require "plugins"
local plugin_loader = require("plugin-loader").init()
@@ -50,6 +68,8 @@ if lsp_settings_status_ok then
}
end
+require("keymappings").setup()
+
-- TODO: these guys need to be in language files
-- if lvim.lang.emmet.active then
-- require "lsp.emmet-ls"
diff --git a/lua/core/autocmds.lua b/lua/core/autocmds.lua
index 89590454..91278544 100644
--- a/lua/core/autocmds.lua
+++ b/lua/core/autocmds.lua
@@ -3,6 +3,11 @@ local autocommands = {}
lvim.autocommands = {
_general_settings = {
{
+ "Filetype",
+ "*",
+ "lua require('utils.ft').do_filetype(vim.fn.expand(\"<amatch>\"))",
+ },
+ {
"TextYankPost",
"*",
"lua require('vim.highlight').on_yank({higroup = 'Search', timeout = 200})",
@@ -27,7 +32,7 @@ lvim.autocommands = {
"*",
"setlocal formatoptions-=c formatoptions-=r formatoptions-=o",
},
- { "BufWritePost", "lv-config.lua", "lua require('utils').reload_lv_config()" },
+ { "BufWritePost", USER_CONFIG_PATH, "lua require('utils').reload_lv_config()" },
{
"FileType",
"qf",
@@ -51,13 +56,14 @@ lvim.autocommands = {
-- {'BufWinEnter', '.gmi', 'setlocal filetype=markdown'}, {'BufRead', '*.gmi', 'setlocal filetype=markdown'},
-- {'BufNewFile', '*.gmi', 'setlocal filetype=markdown'}
-- },
+ _git = {
+ { "FileType", "gitcommit", "setlocal wrap" },
+ { "FileType", "gitcommit", "setlocal spell" },
+ },
_markdown = {
{ "FileType", "markdown", "setlocal wrap" },
{ "FileType", "markdown", "setlocal spell" },
},
- _tab_bindings = {
- { "FileType", "*", "lua require'core.compe'.set_tab_keybindings()" },
- },
_buffer_bindings = {
{ "FileType", "floaterm", "nnoremap <silent> <buffer> q :q<CR>" },
},
@@ -66,7 +72,7 @@ lvim.autocommands = {
{ "VimResized", "*", "wincmd =" },
},
_packer_compile = {
- -- will cause split windows to be resized evenly if main window is resized
+ -- will run PackerCompile after writing plugins.lua
{ "BufWritePost", "plugins.lua", "PackerCompile" },
},
_general_lsp = {
diff --git a/lua/core/autopairs.lua b/lua/core/autopairs.lua
index f0111db6..a5f21a1b 100644
--- a/lua/core/autopairs.lua
+++ b/lua/core/autopairs.lua
@@ -1,8 +1,10 @@
-- if not package.loaded['nvim-autopairs'] then
-- return
-- end
+local Log = require "core.log"
local status_ok, _ = pcall(require, "nvim-autopairs")
if not status_ok then
+ Log:get_default().error "Failed to load autopairs"
return
end
local npairs = require "nvim-autopairs"
@@ -25,9 +27,10 @@ MUtils.completion_confirm = function()
end
if package.loaded["compe"] then
+ local map_complete_optional = vim.bo.filetype ~= "tex"
require("nvim-autopairs.completion.compe").setup {
map_cr = true, -- map <CR> on insert mode
- map_complete = true, -- it will auto insert `(` after select function or method item
+ map_complete = map_complete_optional, -- it will auto insert `(` after select function or method item
}
end
diff --git a/lua/core/bufferline.lua b/lua/core/bufferline.lua
index c5677580..8989ce21 100644
--- a/lua/core/bufferline.lua
+++ b/lua/core/bufferline.lua
@@ -1,2 +1,20 @@
-vim.api.nvim_set_keymap("n", "<S-l>", ":BufferNext<CR>", { noremap = true, silent = true })
-vim.api.nvim_set_keymap("n", "<S-h>", ":BufferPrevious<CR>", { noremap = true, silent = true })
+local M = {}
+
+M.config = function()
+ lvim.builtin.bufferline = {
+ active = true,
+ keymap = {
+ normal_mode = {
+ ["<S-l>"] = ":BufferNext<CR>",
+ ["<S-h>"] = ":BufferPrevious<CR>",
+ },
+ },
+ }
+end
+
+M.setup = function()
+ local keymap = require "keymappings"
+ keymap.append_to_defaults(lvim.builtin.bufferline.keymap)
+end
+
+return M
diff --git a/lua/core/commands.lua b/lua/core/commands.lua
index c42b385d..22170c85 100644
--- a/lua/core/commands.lua
+++ b/lua/core/commands.lua
@@ -10,6 +10,8 @@ M.defaults = {
endif
endfunction
]],
+ -- :LvimInfo
+ [[command! LvimInfo lua require('core.info').toggle_popup(vim.bo.filetype)]],
}
M.load = function(commands)
diff --git a/lua/core/compe.lua b/lua/core/compe.lua
index 801e2dd8..c2f97e27 100644
--- a/lua/core/compe.lua
+++ b/lua/core/compe.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
M.config = function()
lvim.builtin.compe = {
enabled = true,
@@ -12,7 +13,15 @@ M.config = function()
max_abbr_width = 100,
max_kind_width = 100,
max_menu_width = 100,
- documentation = true,
+ documentation = {
+ border = "single",
+ winhighlight = "NormalFloat:CompeDocumentation,FloatBorder:CompeDocumentationBorder",
+ max_width = 120,
+ min_width = 60,
+ max_height = math.floor(vim.o.lines * 0.3),
+ min_height = 1,
+ },
+ -- documentation = true,
source = {
path = { kind = "  (Path)" },
@@ -30,8 +39,22 @@ M.config = function()
emoji = { kind = " ﲃ (Emoji)", filetypes = { "markdown", "text" } },
-- for emoji press : (idk if that in compe tho)
},
- -- FileTypes in this list won't trigger auto-complete when TAB is pressed. Hitting TAB will insert a tab character
- exclude_filetypes = { "md", "markdown", "mdown", "mkd", "mkdn", "mdwn", "text", "txt" },
+
+ keymap = {
+ values = {
+ insert_mode = {
+ -- ["<Tab>"] = { 'pumvisible() ? "<C-n>" : "<Tab>"', { silent = true, noremap = true, expr = true } },
+ -- ["<S-Tab>"] = { 'pumvisible() ? "<C-p>" : "<S-Tab>"', { silent = true, noremap = true, expr = true } },
+ ["<C-Space>"] = { "compe#complete()", { silent = true, noremap = true, expr = true } },
+ ["<C-e>"] = { "compe#close('<C-e>')", { silent = true, noremap = true, expr = true } },
+ ["<C-f>"] = { "compe#scroll({ 'delta': +4 })", { silent = true, noremap = true, expr = true } },
+ ["<C-d>"] = { "compe#scroll({ 'delta': -4 })", { silent = true, noremap = true, expr = true } },
+ },
+ },
+ opts = {
+ insert_mode = { noremap = true, silent = true, expr = true },
+ },
+ },
}
end
@@ -40,6 +63,7 @@ M.setup = function()
local status_ok, compe = pcall(require, "compe")
if not status_ok then
+ Log:get_default().error "Failed to load compe"
return
end
@@ -64,12 +88,13 @@ M.setup = function()
_G.tab_complete = function()
if vim.fn.pumvisible() == 1 then
return t "<C-n>"
- elseif vim.fn.call("vsnip#available", { 1 }) == 1 then
- return t "<Plug>(vsnip-expand-or-jump)"
+ elseif vim.fn.call("vsnip#jumpable", { 1 }) == 1 then
+ return t "<Plug>(vsnip-jump-next)"
elseif check_back_space() then
return t "<Tab>"
else
- return vim.fn["compe#complete"]()
+ -- return vim.fn["compe#complete"]() -- < use this if you want <tab> to always offer completion
+ return t "<Tab>"
end
end
@@ -83,29 +108,13 @@ M.setup = function()
end
end
- vim.api.nvim_set_keymap("i", "<C-Space>", "compe#complete()", { noremap = true, silent = true, expr = true })
- -- vim.api.nvim_set_keymap("i", "<CR>", "compe#confirm('<CR>')", { noremap = true, silent = true, expr = true })
- vim.api.nvim_set_keymap("i", "<C-e>", "compe#close('<C-e>')", { noremap = true, silent = true, expr = true })
- vim.api.nvim_set_keymap("i", "<C-f>", "compe#scroll({ 'delta': +4 })", { noremap = true, silent = true, expr = true })
- vim.api.nvim_set_keymap("i", "<C-d>", "compe#scroll({ 'delta': -4 })", { noremap = true, silent = true, expr = true })
-end
+ local keymap = require "keymappings"
+ keymap.load(lvim.builtin.compe.keymap.values, lvim.builtin.compe.keymap.opts)
-local is_excluded = function(file_type)
- for _, type in ipairs(lvim.builtin.compe.exclude_filetypes) do
- if type == file_type then
- return true
- end
- end
- return false
+ vim.api.nvim_set_keymap("i", "<Tab>", "v:lua.tab_complete()", { expr = true })
+ vim.api.nvim_set_keymap("s", "<Tab>", "v:lua.tab_complete()", { expr = true })
+ vim.api.nvim_set_keymap("i", "<S-Tab>", "v:lua.s_tab_complete()", { expr = true })
+ vim.api.nvim_set_keymap("s", "<S-Tab>", "v:lua.s_tab_complete()", { expr = true })
end
-M.set_tab_keybindings = function()
- local file_type = vim.fn.expand "%:e"
- if is_excluded(file_type) == false then
- vim.api.nvim_buf_set_keymap(0, "i", "<Tab>", "v:lua.tab_complete()", { expr = true })
- vim.api.nvim_buf_set_keymap(0, "s", "<Tab>", "v:lua.tab_complete()", { expr = true })
- vim.api.nvim_buf_set_keymap(0, "i", "<S-Tab>", "v:lua.s_tab_complete()", { expr = true })
- vim.api.nvim_buf_set_keymap(0, "s", "<S-Tab>", "v:lua.s_tab_complete()", { expr = true })
- end
-end
return M
diff --git a/lua/core/dap.lua b/lua/core/dap.lua
index 30e3aef9..4e21cc4c 100644
--- a/lua/core/dap.lua
+++ b/lua/core/dap.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
M.config = function()
lvim.builtin.dap = {
active = false,
@@ -14,6 +15,7 @@ end
M.setup = function()
local status_ok, dap = pcall(require, "dap")
if not status_ok then
+ Log:get_default().error "Failed to load dap"
return
end
@@ -34,7 +36,7 @@ M.setup = function()
p = { "<cmd>lua require'dap'.pause.toggle()<cr>", "Pause" },
r = { "<cmd>lua require'dap'.repl.toggle()<cr>", "Toggle Repl" },
s = { "<cmd>lua require'dap'.continue()<cr>", "Start" },
- q = { "<cmd>lua require'dap'.stop()<cr>", "Quit" },
+ q = { "<cmd>lua require'dap'.close()<cr>", "Quit" },
}
end
diff --git a/lua/core/dashboard.lua b/lua/core/dashboard.lua
index 8d196458..d5e5bfe9 100644
--- a/lua/core/dashboard.lua
+++ b/lua/core/dashboard.lua
@@ -43,12 +43,11 @@ M.config = function()
},
d = {
description = { " Settings " },
- -- command = ":e " .. CONFIG_PATH .. "/lv-config.lua",
- command = ":e ~/.config/lvim/lv-config.lua",
+ command = ":e " .. USER_CONFIG_PATH,
},
},
- footer = { "chrisatmachine.com" },
+ footer = { "lunarvim.org" },
}
end
@@ -73,7 +72,7 @@ M.setup = function()
vim.api.nvim_exec(
[[
- let g:dashboard_custom_footer = ['LunarVim loaded '..packages..' plugins ']
+ let g:dashboard_custom_footer = ['LunarVim loaded '..packages..' plugins  ']
]],
false
)
@@ -85,7 +84,7 @@ M.setup = function()
require("core.autocmds").define_augroups {
_dashboard = {
- -- seems to be nobuflisted that makes my stuff disapear will do more testing
+ -- seems to be nobuflisted that makes my stuff disappear will do more testing
{
"FileType",
"dashboard",
diff --git a/lua/core/galaxyline.lua b/lua/core/galaxyline.lua
index aafe99bc..ee0a317d 100644
--- a/lua/core/galaxyline.lua
+++ b/lua/core/galaxyline.lua
@@ -1,8 +1,10 @@
-- if not package.loaded['galaxyline'] then
-- return
-- end
+local Log = require "core.log"
local status_ok, gl = pcall(require, "galaxyline")
if not status_ok then
+ Log:get_default().error "Failed to load galaxyline"
return
end
@@ -202,21 +204,19 @@ table.insert(gls.right, {
local function get_attached_provider_name(msg)
msg = msg or "LSP Inactive"
-
- local buf_ft = vim.bo.filetype
local buf_clients = vim.lsp.buf_get_clients()
if next(buf_clients) == nil then
return msg
end
+ local buf_ft = vim.bo.filetype
local buf_client_names = {}
+ local null_ls_providers = require("lsp.null-ls").get_registered_providers_by_filetype(buf_ft)
for _, client in pairs(buf_clients) do
- if client.name == "null-ls" then
- table.insert(buf_client_names, lvim.lang[buf_ft].linters[1])
- table.insert(buf_client_names, lvim.lang[buf_ft].formatter.exe)
- else
+ if client.name ~= "null-ls" then
table.insert(buf_client_names, client.name)
end
end
+ vim.list_extend(buf_client_names, null_ls_providers)
return table.concat(buf_client_names, ", ")
end
diff --git a/lua/core/gitsigns.lua b/lua/core/gitsigns.lua
index 2a5060be..9e023762 100644
--- a/lua/core/gitsigns.lua
+++ b/lua/core/gitsigns.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
M.config = function()
lvim.builtin.gitsigns = {
signs = {
@@ -44,13 +45,13 @@ M.config = function()
sign_priority = 6,
update_debounce = 200,
status_formatter = nil, -- Use default
- use_decoration_api = false,
}
end
M.setup = function()
local status_ok, gitsigns = pcall(require, "gitsigns")
if not status_ok then
+ Log:get_default().error "Failed to load gitsigns"
return
end
gitsigns.setup(lvim.builtin.gitsigns)
diff --git a/lua/core/info.lua b/lua/core/info.lua
new file mode 100644
index 00000000..56fc3ca2
--- /dev/null
+++ b/lua/core/info.lua
@@ -0,0 +1,222 @@
+local M = {}
+local u = require "utils"
+local null_ls_handler = require "lsp.null-ls"
+local indent = " "
+
+M.banner = {
+ " ",
+ indent
+ .. "⠀⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀ ⠀⠀⠀ ⠀⠀ ⣺⡿⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀",
+ indent
+ .. "⠀⣿⠇⠀⠀⠀⠀⠀⣤⡄⠀⠀⢠⣤⡄⠀.⣠⣤⣤⣤⡀⠀⠀⢀⣤⣤⣤⣤⡄⠀⠀⠀⣤⣄⣤⣤⣤⠀⠀ ⣿⣯ ⣿⡟⠀ ⣤⣤⠀⠀⠀⠀⣠⣤⣤⣤⣄⣤⣤",
+ indent
+ .. "⢠⣿⠀⠀⠀⠀⠀⠀⣿⠃⠀⠀⣸⣿⠁⠀⣿⣿⠉⠀⠈⣿⡇⠀⠀⠛⠋⠀⠀⢹⣿⠀⠀⠀⣿⠏⠀⠸⠿⠃⠀⣿⣿⠀⣰⡟⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡟⢸⣿⡇⢀⣿",
+ indent
+ .. "⣸⡇⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⣿⡟⠀⢠⣿⡇⠀⠀⢰⣿⡇⠀⣰⣾⠟⠛⠛⣻⡇⠀⠀⢸⡿⠀⠀⠀⠀⠀⠀⢻⣿⢰⣿⠀⠀⠀⠀⠀⠀⣾⡇⠀⠀⠀⢸⣿⠇⢸⣿⠀⢸⡏",
+ indent
+ .. "⣿⣧⣤⣤⣤⡄⠀⠘⣿⣤⣤⡤⣿⠇⠀⢸⣿⠁⠀⠀⣼⣿⠀⠀⢿⣿⣤⣤⠔⣿⠃⠀⠀⣾⡇⠀⠀⠀⠀⠀⠀⢸⣿⣿⠋⠀⠀⠀⢠⣤⣤⣿⣥⣤⡄⠀⣼⣿⠀⣸⡏⠀⣿⠃",
+ indent
+ .. "⠉⠉⠉⠉⠉⠁⠀⠀⠈⠉⠉⠀⠉⠀⠀⠈⠉⠀⠀⠀⠉⠉⠀⠀⠀⠉⠉⠁⠈⠉⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠁⠀⠉⠁⠀⠉⠁⠀⠉⠀",
+ "",
+}
+
+local function str_list(list)
+ return "[ " .. table.concat(list, ", ") .. " ]"
+end
+
+local function get_formatter_suggestion_msg(ft)
+ local supported_formatters = u.get_supported_formatters_by_filetype(ft)
+ return {
+ indent
+ .. "───────────────────────────────────────────────────────────────────",
+ "",
+ indent .. " HINT ",
+ "",
+ indent .. "* List of supported formatters: " .. str_list(supported_formatters),
+ indent .. "* Configured formatter needs to be installed and executable.",
+ indent .. "* Enable installed formatter(s) with following config in ~/.config/lvim/config.lua",
+ "",
+ indent .. " lvim.lang." .. tostring(ft) .. [[.formatting = { { exe = ']] .. table.concat(
+ supported_formatters,
+ "│"
+ ) .. [[' } }]],
+ "",
+ }
+end
+
+local function get_linter_suggestion_msg(ft)
+ local supported_linters = u.get_supported_linters_by_filetype(ft)
+ return {
+ indent
+ .. "───────────────────────────────────────────────────────────────────",
+ "",
+ indent .. " HINT ",
+ "",
+ indent .. "* List of supported linters: " .. str_list(supported_linters),
+ indent .. "* Configured linter needs to be installed and executable.",
+ indent .. "* Enable installed linter(s) with following config in ~/.config/lvim/config.lua",
+ "",
+ indent
+ .. " lvim.lang."
+ .. tostring(ft)
+ .. [[.linters = { { exe = ']]
+ .. table.concat(supported_linters, "│")
+ .. [[' } }]],
+ "",
+ }
+end
+
+---creates an average size popup
+---@param buf_lines a list of lines to print
+---@param callback could be used to set syntax highlighting rules for example
+---@return bufnr buffer number of the created buffer
+---@return win_id window ID of the created popup
+function M.create_simple_popup(buf_lines, callback)
+ -- runtime/lua/vim/lsp/util.lua
+ local bufnr = vim.api.nvim_create_buf(false, true)
+ local height_percentage = 0.9
+ local width_percentage = 0.8
+ local row_start_percentage = (1 - height_percentage) / 2
+ local col_start_percentage = (1 - width_percentage) / 2
+ local opts = {}
+ opts.relative = "editor"
+ opts.height = math.min(math.ceil(vim.o.lines * height_percentage), #buf_lines)
+ opts.row = math.ceil(vim.o.lines * row_start_percentage)
+ opts.col = math.floor(vim.o.columns * col_start_percentage)
+ opts.width = math.floor(vim.o.columns * width_percentage)
+ opts.style = "minimal"
+ opts.border = "rounded"
+ --[[
+ opts.border = {
+ lvim.builtin.telescope.defaults.borderchars[5], -- "┌",
+ lvim.builtin.telescope.defaults.borderchars[3], -- "-",
+ lvim.builtin.telescope.defaults.borderchars[6], -- "┐",
+ lvim.builtin.telescope.defaults.borderchars[2], -- "|",
+ lvim.builtin.telescope.defaults.borderchars[7], -- "┘",
+ lvim.builtin.telescope.defaults.borderchars[3], -- "-",
+ lvim.builtin.telescope.defaults.borderchars[8], -- "└",
+ lvim.builtin.telescope.defaults.borderchars[4], -- "|",
+ }
+ --]]
+
+ local win_id = vim.api.nvim_open_win(bufnr, true, opts)
+
+ vim.api.nvim_win_set_buf(win_id, bufnr)
+ -- this needs to be window option!
+ vim.api.nvim_win_set_option(win_id, "number", false)
+ vim.cmd "setlocal nocursorcolumn"
+ vim.cmd "setlocal wrap"
+ -- set buffer options
+ vim.api.nvim_buf_set_option(bufnr, "filetype", "lspinfo")
+ vim.lsp.util.close_preview_autocmd({ "BufHidden", "BufLeave" }, win_id)
+ buf_lines = vim.lsp.util._trim(buf_lines, {})
+ vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, buf_lines)
+ vim.api.nvim_buf_set_option(bufnr, "modifiable", false)
+ if type(callback) == "function" then
+ callback()
+ end
+ return bufnr, win_id
+end
+
+local function tbl_set_highlight(terms, highlight_group)
+ if type(terms) ~= "table" then
+ return
+ end
+
+ for _, v in pairs(terms) do
+ vim.cmd('let m=matchadd("' .. highlight_group .. '", "' .. v .. '")')
+ end
+end
+
+function M.toggle_popup(ft)
+ local client = u.get_active_client_by_ft(ft)
+ local is_client_active = false
+ local client_enabled_caps = {}
+ local client_name = ""
+ local client_id = 0
+ local document_formatting = false
+ local missing_linters = {}
+ local missing_formatters = {}
+ local num_caps = 0
+ local null_ls_providers = null_ls_handler.get_registered_providers_by_filetype(ft)
+ if client ~= nil then
+ is_client_active = not client.is_stopped()
+ client_enabled_caps = require("lsp").get_ls_capabilities(client.id)
+ num_caps = vim.tbl_count(client_enabled_caps)
+ client_name = client.name
+ client_id = client.id
+ document_formatting = client.resolved_capabilities.document_formatting
+ end
+ if lvim.lang[ft] ~= nil then
+ missing_linters = lvim.lang[ft].linters._failed_requests or {}
+ missing_formatters = lvim.lang[ft].formatters._failed_requests or {}
+ end
+
+ local buf_lines = {}
+ vim.list_extend(buf_lines, M.banner)
+
+ local header = {
+ indent .. "Detected filetype: " .. tostring(ft),
+ indent .. "Treesitter active: " .. tostring(next(vim.treesitter.highlighter.active) ~= nil),
+ "",
+ }
+ vim.list_extend(buf_lines, header)
+
+ local lsp_info = {
+ indent .. "Language Server Protocol (LSP) info",
+ indent .. "* Associated server: " .. client_name,
+ indent .. "* Active: " .. tostring(is_client_active) .. " (id: " .. tostring(client_id) .. ")",
+ indent .. "* Supports formatting: " .. tostring(document_formatting),
+ indent .. "* Capabilities list: " .. table.concat(vim.list_slice(client_enabled_caps, 1, num_caps / 2), ", "),
+ indent .. indent .. indent .. table.concat(vim.list_slice(client_enabled_caps, ((num_caps / 2) + 1)), ", "),
+ "",
+ }
+ vim.list_extend(buf_lines, lsp_info)
+
+ local null_ls_info = {
+ indent .. "Formatters and linters",
+ indent .. "* Configured providers: " .. table.concat(null_ls_providers, "  , ") .. "  ",
+ }
+ vim.list_extend(buf_lines, null_ls_info)
+
+ local missing_formatters_status
+ if vim.tbl_count(missing_formatters) > 0 then
+ missing_formatters_status = {
+ indent .. "* Missing formatters: " .. table.concat(missing_formatters, "  , ") .. "  ",
+ }
+ vim.list_extend(buf_lines, missing_formatters_status)
+ end
+
+ local missing_linters_status
+ if vim.tbl_count(missing_linters) > 0 then
+ missing_linters_status = {
+ indent .. "* Missing linters: " .. table.concat(missing_linters, "  , ") .. "  ",
+ }
+ vim.list_extend(buf_lines, missing_linters_status)
+ end
+
+ vim.list_extend(buf_lines, { "" })
+
+ vim.list_extend(buf_lines, get_formatter_suggestion_msg(ft))
+
+ vim.list_extend(buf_lines, get_linter_suggestion_msg(ft))
+
+ local function set_syntax_hl()
+ vim.cmd [[highlight LvimInfoIdentifier gui=bold]]
+ vim.cmd [[highlight link LvimInfoHeader Type]]
+ vim.cmd [[let m=matchadd("DashboardHeader", "Language Server Protocol (LSP) info")]]
+ vim.cmd [[let m=matchadd("DashboardHeader", "Formatters and linters")]]
+ vim.cmd('let m=matchadd("LvimInfoIdentifier", " ' .. ft .. '$")')
+ vim.cmd 'let m=matchadd("string", "true")'
+ vim.cmd 'let m=matchadd("error", "false")'
+ tbl_set_highlight(null_ls_providers, "LvimInfoIdentifier")
+ tbl_set_highlight(missing_formatters, "LvimInfoIdentifier")
+ tbl_set_highlight(missing_linters, "LvimInfoIdentifier")
+ -- tbl_set_highlight(u.get_supported_formatters_by_filetype(ft), "LvimInfoIdentifier")
+ -- tbl_set_highlight(u.get_supported_linters_by_filetype(ft), "LvimInfoIdentifier")
+ vim.cmd('let m=matchadd("LvimInfoIdentifier", "' .. client_name .. '")')
+ end
+
+ return M.create_simple_popup(buf_lines, set_syntax_hl)
+end
+return M
diff --git a/lua/core/log.lua b/lua/core/log.lua
new file mode 100644
index 00000000..5dd5622e
--- /dev/null
+++ b/lua/core/log.lua
@@ -0,0 +1,29 @@
+local Log = {}
+
+--- Creates a log handle based on Plenary.log
+---@param opts these are passed verbatim to Plenary.log
+---@return log handle
+function Log:new(opts)
+ local status_ok, _ = pcall(require, "plenary.log")
+ if not status_ok then
+ return nil
+ end
+
+ local obj = require("plenary.log").new(opts)
+ local path = string.format("%s/%s.log", vim.api.nvim_call_function("stdpath", { "cache" }), opts.plugin)
+
+ obj.get_path = function()
+ return path
+ end
+
+ return obj
+end
+
+--- Creates or retrieves a log handle for the default logfile
+--- based on Plenary.log
+---@return log handle
+function Log:get_default()
+ return Log:new { plugin = "lunarvim", level = lvim.log.level }
+end
+
+return Log
diff --git a/lua/core/nvimtree.lua b/lua/core/nvimtree.lua
index dd1f4f36..4d15b1b5 100644
--- a/lua/core/nvimtree.lua
+++ b/lua/core/nvimtree.lua
@@ -1,8 +1,10 @@
local M = {}
+local Log = require "core.log"
--
M.config = function()
lvim.builtin.nvimtree = {
side = "left",
+ width = 30,
show_icons = {
git = 1,
folders = 1,
@@ -48,6 +50,7 @@ end
M.setup = function()
local status_ok, nvim_tree_config = pcall(require, "nvim-tree.config")
if not status_ok then
+ Log:get_default().error "Failed to load nvim-tree.config"
return
end
local g = vim.g
@@ -58,13 +61,44 @@ M.setup = function()
local tree_cb = nvim_tree_config.nvim_tree_callback
- g.nvim_tree_bindings = {
- { key = { "l", "<CR>", "o" }, cb = tree_cb "edit" },
- { key = "h", cb = tree_cb "close_node" },
- { key = "v", cb = tree_cb "vsplit" },
- }
+ if not g.nvim_tree_bindings then
+ g.nvim_tree_bindings = {
+ { key = { "l", "<CR>", "o" }, cb = tree_cb "edit" },
+ { key = "h", cb = tree_cb "close_node" },
+ { key = "v", cb = tree_cb "vsplit" },
+ }
+ end
end
--
+M.focus_or_close = function()
+ local view_status_ok, view = pcall(require, "nvim-tree.view")
+ if not view_status_ok then
+ return
+ end
+ local a = vim.api
+
+ local curwin = a.nvim_get_current_win()
+ local curbuf = a.nvim_win_get_buf(curwin)
+ local bufnr = view.View.bufnr
+ local winnr = view.get_winnr()
+
+ if view.win_open() then
+ if curwin == winnr and curbuf == bufnr then
+ view.close()
+ if package.loaded["bufferline.state"] then
+ require("bufferline.state").set_offset(0)
+ end
+ else
+ view.focus()
+ end
+ else
+ view.open()
+ if package.loaded["bufferline.state"] and lvim.builtin.nvimtree.side == "left" then
+ -- require'bufferline.state'.set_offset(lvim.builtin.nvimtree.width + 1, 'File Explorer')
+ require("bufferline.state").set_offset(lvim.builtin.nvimtree.width + 1, "")
+ end
+ end
+end
--
M.toggle_tree = function()
local view_status_ok, view = pcall(require, "nvim-tree.view")
@@ -78,11 +112,17 @@ M.toggle_tree = function()
end
else
if package.loaded["bufferline.state"] and lvim.builtin.nvimtree.side == "left" then
- -- require'bufferline.state'.set_offset(31, 'File Explorer')
- require("bufferline.state").set_offset(31, "")
+ -- require'bufferline.state'.set_offset(lvim.builtin.nvimtree.width + 1, 'File Explorer')
+ require("bufferline.state").set_offset(lvim.builtin.nvimtree.width + 1, "")
end
require("nvim-tree").toggle()
end
end
--
+function M.change_tree_dir(dir)
+ if vim.g.loaded_tree then
+ require("nvim-tree.lib").change_dir(dir)
+ end
+end
+--
return M
diff --git a/lua/core/rooter.lua b/lua/core/rooter.lua
new file mode 100644
index 00000000..8ebdf7cc
--- /dev/null
+++ b/lua/core/rooter.lua
@@ -0,0 +1,15 @@
+local M = {}
+function M.config()
+ lvim.builtin.rooter = {
+ --- This is on by default since it's currently the expected behavior.
+ ---@usage set to false to disable vim-rooter.
+ active = true,
+ silent_chdir = 1,
+ manual_only = 0,
+ }
+end
+function M.setup()
+ vim.g.rooter_silent_chdir = lvim.builtin.rooter.silent_chdir
+ vim.g.rooter_manual_only = lvim.builtin.rooter.manual_only
+end
+return M
diff --git a/lua/core/telescope.lua b/lua/core/telescope.lua
index 65760d6c..f4d154b0 100644
--- a/lua/core/telescope.lua
+++ b/lua/core/telescope.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
M.config = function()
local status_ok, actions = pcall(require, "telescope.actions")
if not status_ok then
@@ -40,11 +41,11 @@ M.config = function()
-- buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker,
mappings = {
i = {
- ["<C-n>"] = actions.cycle_history_next,
- ["<C-p>"] = actions.cycle_history_prev,
+ ["<C-n>"] = actions.move_selection_next,
+ ["<C-p>"] = actions.move_selection_previous,
["<C-c>"] = actions.close,
- ["<C-j>"] = actions.move_selection_next,
- ["<C-k>"] = actions.move_selection_previous,
+ ["<C-j>"] = actions.cycle_history_next,
+ ["<C-k>"] = actions.cycle_history_prev,
["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist,
["<CR>"] = actions.select_default + actions.center,
-- To disable a keymap, put [map] = false
@@ -79,6 +80,7 @@ end
M.setup = function()
local status_ok, telescope = pcall(require, "telescope")
if not status_ok then
+ Log:get_default().error "Failed to load telescope"
return
end
telescope.setup(lvim.builtin.telescope)
diff --git a/lua/core/terminal.lua b/lua/core/terminal.lua
index 015341df..818038fd 100644
--- a/lua/core/terminal.lua
+++ b/lua/core/terminal.lua
@@ -1,8 +1,11 @@
local M = {}
+local Log = require "core.log"
+local utils = require "utils"
+
M.config = function()
lvim.builtin["terminal"] = {
-- size can be a number or function which is passed the current terminal
- size = 5,
+ size = 20,
-- open_mapping = [[<c-\>]],
open_mapping = [[<c-t>]],
hide_numbers = true, -- hide the number column in toggleterm buffers
@@ -11,7 +14,7 @@ M.config = function()
shading_factor = 2, -- the degree by which to darken to terminal colour, default: 1 for dark backgrounds, 3 for light
start_in_insert = true,
insert_mappings = true, -- whether or not the open mapping applies in insert mode
- persist_size = true,
+ persist_size = false,
-- direction = 'vertical' | 'horizontal' | 'window' | 'float',
direction = "float",
close_on_exit = true, -- close the terminal window when the process exits
@@ -32,17 +35,20 @@ M.config = function()
background = "Normal",
},
},
- -- Add executables on the lv-config file
+ -- Add executables on the config.lua
-- { exec, keymap, name}
-- lvim.builtin.terminal.execs = {{}} to overwrite
-- lvim.builtin.terminal.execs[#lvim.builtin.terminal.execs+1] = {"gdb", "tg", "GNU Debugger"}
- execs = { { "lazygit", "gg", "LazyGit" } },
+ execs = {
+ { "lazygit", "gg", "LazyGit" },
+ },
}
end
M.setup = function()
local status_ok, terminal = pcall(require, "toggleterm")
if not status_ok then
+ Log:get_default().error "Failed to load toggleterm"
print(terminal)
return
end
@@ -88,4 +94,40 @@ M._exec_toggle = function(exec)
exec_term:toggle()
end
+local function get_log_path(name)
+ --handle custom paths not managed by Plenary.log
+ local logger = require "core.log"
+ local file
+ if name == "nvim" then
+ file = CACHE_PATH .. "/log"
+ else
+ file = logger:new({ plugin = name }):get_path()
+ end
+ if utils.is_file(file) then
+ return file
+ end
+end
+
+---Toggles a log viewer according to log.viewer.layout_config
+---@param name can be the name of any of the managed logs, e,g. "lunarvim" or the default ones {"nvim", "lsp", "packer.nvim"}
+M.toggle_log_view = function(name)
+ local logfile = get_log_path(name)
+ if not logfile then
+ return
+ end
+ local term_opts = vim.tbl_deep_extend("force", lvim.builtin.terminal, {
+ cmd = lvim.log.viewer.cmd .. " " .. logfile,
+ open_mapping = lvim.log.viewer.layout_config.open_mapping,
+ direction = lvim.log.viewer.layout_config.direction,
+ -- TODO: this might not be working as expected
+ size = lvim.log.viewer.layout_config.size,
+ float_opts = lvim.log.viewer.layout_config.float_opts,
+ })
+
+ local Terminal = require("toggleterm.terminal").Terminal
+ local log_view = Terminal:new(term_opts)
+ -- require("core.log"):get_default().debug("term", vim.inspect(term_opts))
+ log_view:toggle()
+end
+
return M
diff --git a/lua/core/treesitter.lua b/lua/core/treesitter.lua
index cfc58bb7..0a8a2ff2 100644
--- a/lua/core/treesitter.lua
+++ b/lua/core/treesitter.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
M.config = function()
lvim.builtin.treesitter = {
ensure_installed = {}, -- one of "all", "maintained" (parsers with maintainers), or a list of languages
@@ -64,6 +65,7 @@ end
M.setup = function()
local status_ok, treesitter_configs = pcall(require, "nvim-treesitter.configs")
if not status_ok then
+ Log:get_default().error "Failed to load nvim-treesitter.configs"
return
end
diff --git a/lua/core/which-key.lua b/lua/core/which-key.lua
index 9d4e7744..96f3a8f7 100644
--- a/lua/core/which-key.lua
+++ b/lua/core/which-key.lua
@@ -1,4 +1,5 @@
local M = {}
+local Log = require "core.log"
M.config = function()
lvim.builtin.which_key = {
active = false,
@@ -67,7 +68,7 @@ M.config = function()
["c"] = { "<cmd>BufferClose!<CR>", "Close Buffer" },
["e"] = { "<cmd>lua require'core.nvimtree'.toggle_tree()<CR>", "Explorer" },
["f"] = { "<cmd>Telescope find_files<CR>", "Find File" },
- ["h"] = { '<cmd>let @/=""<CR>', "No Highlight" },
+ ["h"] = { "<cmd>nohlsearch<CR>", "No Highlight" },
b = {
name = "Buffers",
j = { "<cmd>BufferPick<cr>", "jump to buffer" },
@@ -97,6 +98,7 @@ M.config = function()
i = { "<cmd>PackerInstall<cr>", "Install" },
r = { "<cmd>lua require('utils').reload_lv_config()<cr>", "Reload" },
s = { "<cmd>PackerSync<cr>", "Sync" },
+ S = { "<cmd>PackerStatus<cr>", "Status" },
u = { "<cmd>PackerUpdate<cr>", "Update" },
},
@@ -151,8 +153,13 @@ M.config = function()
"<cmd>lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = lvim.lsp.popup_border}})<cr>",
"Prev Diagnostic",
},
- l = { "<cmd>silent lua require('lint').try_lint()<cr>", "Lint" },
- q = { "<cmd>Telescope quickfix<cr>", "Quickfix" },
+ p = {
+ name = "Peek",
+ d = { "<cmd>lua require('lsp.peek').Peek('definition')<cr>", "Definition" },
+ t = { "<cmd>lua require('lsp.peek').Peek('typeDefinition')<cr>", "Type Definition" },
+ i = { "<cmd>lua require('lsp.peek').Peek('implementation')<cr>", "Implementation" },
+ },
+ q = { "<cmd>lua vim.lsp.diagnostic.set_loclist()<cr>", "Quickfix" },
r = { "<cmd>lua vim.lsp.buf.rename()<cr>", "Rename" },
s = { "<cmd>Telescope lsp_document_symbols<cr>", "Document Symbols" },
S = {
@@ -160,7 +167,31 @@ M.config = function()
"Workspace Symbols",
},
},
-
+ L = {
+ name = "+LunarVim",
+ k = { "<cmd>lua require('keymappings').print()<cr>", "View LunarVim's default keymappings" },
+ i = {
+ "<cmd>lua require('core.info').toggle_popup(vim.bo.filetype)<cr>",
+ "Toggle LunarVim Info",
+ },
+ l = {
+ name = "+logs",
+ d = {
+ "<cmd>lua require('core.terminal').toggle_log_view('lunarvim')<cr>",
+ "view default log",
+ },
+ D = { "<cmd>edit ~/.cache/nvim/lunarvim.log<cr>", "Open the default logfile" },
+ n = { "<cmd>lua require('core.terminal').toggle_log_view('lsp')<cr>", "view lsp log" },
+ N = { "<cmd>edit ~/.cache/nvim/log<cr>", "Open the Neovim logfile" },
+ l = { "<cmd>lua require('core.terminal').toggle_log_view('nvim')<cr>", "view neovim log" },
+ L = { "<cmd>edit ~/.cache/nvim/lsp.log<cr>", "Open the LSP logfile" },
+ p = {
+ "<cmd>lua require('core.terminal').toggle_log_view('packer.nvim')<cr>",
+ "view packer log",
+ },
+ P = { "<cmd>edit ~/.cache/nvim/packer.nvim.log<cr>", "Open the Packer logfile" },
+ },
+ },
s = {
name = "Search",
b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
@@ -192,6 +223,7 @@ M.setup = function()
-- end
local status_ok, which_key = pcall(require, "which-key")
if not status_ok then
+ Log:get_default "Failed to load whichkey"
return
end
diff --git a/lua/default-config.lua b/lua/default-config.lua
index 25c6dcef..bba21206 100644
--- a/lua/default-config.lua
+++ b/lua/default-config.lua
@@ -3,6 +3,7 @@ DATA_PATH = vim.fn.stdpath "data"
CACHE_PATH = vim.fn.stdpath "cache"
TERMINAL = vim.fn.expand "$TERMINAL"
USER = vim.fn.expand "$USER"
+vim.cmd [[ set spellfile=~/.config/lvim/spell/en.utf-8.add ]]
lvim = {
leader = "space",
@@ -33,32 +34,90 @@ lvim = {
terminal = {},
},
+ log = {
+ ---@usage can be { "trace", "debug", "info", "warn", "error", "fatal" },
+ level = "warn",
+ viewer = {
+ ---@usage this will fallback on "less +F" if not found
+ cmd = "lnav",
+ layout_config = {
+ ---@usage direction = 'vertical' | 'horizontal' | 'window' | 'float',
+ direction = "horizontal",
+ open_mapping = "",
+ size = 40,
+ float_opts = {},
+ },
+ },
+ },
+
lsp = {
+ completion = {
+ item_kind = {
+ "  (Text) ",
+ "  (Method)",
+ "  (Function)",
+ "  (Constructor)",
+ " ﴲ (Field)",
+ "[] (Variable)",
+ "  (Class)",
+ " ﰮ (Interface)",
+ "  (Module)",
+ " 襁 (Property)",
+ "  (Unit)",
+ "  (Value)",
+ " 練 (Enum)",
+ "  (Keyword)",
+ "  (Snippet)",
+ "  (Color)",
+ "  (File)",
+ "  (Reference)",
+ "  (Folder)",
+ "  (EnumMember)",
+ " ﲀ (Constant)",
+ " ﳤ (Struct)",
+ "  (Event)",
+ "  (Operator)",
+ "  (TypeParameter)",
+ },
+ },
diagnostics = {
+ signs = {
+ active = true,
+ values = {
+ { name = "LspDiagnosticsSignError", text = "" },
+ { name = "LspDiagnosticsSignWarning", text = "" },
+ { name = "LspDiagnosticsSignHint", text = "" },
+ { name = "LspDiagnosticsSignInformation", text = "" },
+ },
+ },
virtual_text = {
prefix = "",
spacing = 0,
},
- signs = true,
underline = true,
+ severity_sort = true,
},
override = {},
document_highlight = true,
popup_border = "single",
- default_keybinds = true,
on_attach_callback = nil,
+ on_init_callback = nil,
+ ---@usage query the project directory from the language server and use it to set the CWD
+ smart_cwd = true,
},
plugins = {
- -- use lv-config.lua for this not put here
+ -- use config.lua for this not put here
},
autocommands = {},
}
local schemas = nil
-local common_on_attach = require("lsp.service").common_on_attach
-local common_capabilities = require("lsp.service").common_capabilities()
+local lsp = require "lsp"
+local common_on_attach = lsp.common_on_attach
+local common_capabilities = lsp.common_capabilities()
+local common_on_init = lsp.common_on_init
local status_ok, jsonls_settings = pcall(require, "nlspsettings.jsonls")
if status_ok then
schemas = jsonls_settings.get_default_schemas()
@@ -67,9 +126,12 @@ end
-- TODO move all of this into lang specific files, only require when using
lvim.lang = {
asm = {
- formatter = {
- exe = "asmfmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be asmfmt
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -78,9 +140,12 @@ lvim.lang = {
},
},
beancount = {
- formatter = {
- exe = "bean_format",
- args = {},
+ formatters = {
+ {
+ -- @usage can be bean_format
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -88,19 +153,21 @@ lvim.lang = {
setup = {
cmd = { "beancount-langserver" },
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
c = {
- formatter = {
- exe = "clang_format",
- args = {},
- stdin = true,
- },
- linters = {
- "clangtidy",
+ formatters = {
+ {
+ -- @usage can be clang_format or uncrustify
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
+ linters = {},
lsp = {
provider = "clangd",
setup = {
@@ -113,20 +180,21 @@ lvim.lang = {
"--clang-tidy-checks=-*,llvm-*,clang-analyzer-*",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
cpp = {
- formatter = {
- exe = "clang_format",
- args = {},
- stdin = true,
- },
- linters = {
- "cppcheck",
- "clangtidy",
+ formatters = {
+ {
+ -- @usage can be clang_format or uncrustify
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
+ linters = {},
lsp = {
provider = "clangd",
setup = {
@@ -139,14 +207,18 @@ lvim.lang = {
"--clang-tidy-checks=-*,llvm-*,clang-analyzer-*",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
crystal = {
- formatter = {
- exe = "crystal_format",
- args = {},
+ formatters = {
+ {
+ -- @usage can be crystal_format
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -154,14 +226,18 @@ lvim.lang = {
setup = {
cmd = { "crystalline" },
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
cs = {
- formatter = {
- exe = "clang_format",
- args = {},
+ formatters = {
+ {
+ -- @usage can be clang_format or uncrustify
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -174,14 +250,18 @@ lvim.lang = {
tostring(vim.fn.getpid()),
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
cmake = {
- formatter = {
- exe = "cmake_format",
- args = {},
+ formatters = {
+ {
+ -- @usage can be cmake_format
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -189,18 +269,18 @@ lvim.lang = {
setup = {
cmd = {
DATA_PATH .. "/lspinstall/cmake/venv/bin/cmake-language-server",
- "--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
clojure = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
- },
+ } },
linters = {},
lsp = {
provider = "clojure_lsp",
@@ -210,14 +290,41 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
css = {
- formatter = {
- exe = "prettier",
- args = {},
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd
+ exe = "",
+ args = {},
+ },
+ },
+ linters = {},
+ lsp = {
+ provider = "cssls",
+ setup = {
+ cmd = {
+ "node",
+ DATA_PATH .. "/lspinstall/css/vscode-css/css-language-features/server/dist/node/cssServerMain.js",
+ "--stdio",
+ },
+ on_attach = common_on_attach,
+ on_init = common_on_init,
+ capabilities = common_capabilities,
+ },
+ },
+ },
+ less = {
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -229,14 +336,18 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
d = {
- formatter = {
- exe = "dfmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be dfmt
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -244,15 +355,19 @@ lvim.lang = {
setup = {
cmd = { "serve-d" },
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
dart = {
- formatter = {
- exe = "dart_format",
- args = {},
- stdin = true,
+ formatters = {
+ {
+ -- @usage can be dart_format
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
linters = {},
lsp = {
@@ -264,14 +379,18 @@ lvim.lang = {
"--lsp",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
docker = {
- formatter = {
- exe = "",
- args = {},
+ formatters = {
+ {
+ exe = "",
+ args = {},
+ },
+ -- @usage can be {"hadolint"}
},
linters = {},
lsp = {
@@ -282,15 +401,19 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
elixir = {
- formatter = {
- exe = "mix",
- args = {},
- stdin = true,
+ formatters = {
+ {
+ -- @usage can be mix
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
linters = {},
lsp = {
@@ -300,15 +423,19 @@ lvim.lang = {
DATA_PATH .. "/lspinstall/elixir/elixir-ls/language_server.sh",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
elm = {
- formatter = {
- exe = "elm_format",
- args = {},
- stdin = true,
+ formatters = {
+ {
+ -- @usage can be elm_format
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
linters = {},
lsp = {
@@ -318,19 +445,23 @@ lvim.lang = {
DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-language-server",
},
on_attach = common_on_attach,
- init_options = {
- elmAnalyseTrigger = "change",
- elmFormatPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-format",
- elmPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/",
- elmTestPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-test",
- },
+ on_init = common_on_init,
+ -- init_options = {
+ -- elmAnalyseTrigger = "change",
+ -- elmFormatPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-format",
+ -- elmPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/",
+ -- elmTestPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-test",
+ -- },
},
},
},
erlang = {
- formatter = {
- exe = "erlfmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be erlfmt
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -340,35 +471,40 @@ lvim.lang = {
"erlang_ls",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
emmet = { active = false },
fish = {
- formatter = {
- exe = "fish_indent",
- args = {},
+ formatters = {
+ {
+ -- @usage can be fish_indent
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
provider = "",
setup = {
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
go = {
- formatter = {
- exe = "gofmt",
- args = {},
- stdin = true,
- },
- linters = {
- "golangcilint",
- "revive",
+ formatters = {
+ {
+ -- @usage can be gofmt or goimports or gofumpt
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
+ linters = {},
lsp = {
provider = "gopls",
setup = {
@@ -376,15 +512,16 @@ lvim.lang = {
DATA_PATH .. "/lspinstall/go/gopls",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
graphql = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
- },
+ } },
linters = {},
lsp = {
provider = "graphql",
@@ -396,20 +533,36 @@ lvim.lang = {
"stream",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
- html = {
- formatter = {
- exe = "prettier",
+ haskell = {
+ formatters = { {
+ exe = "",
args = {},
+ } },
+ linters = {},
+ lsp = {
+ provider = "hls",
+ setup = {
+ cmd = { DATA_PATH .. "/lspinstall/haskell/hls" },
+ on_attach = common_on_attach,
+ on_init = common_on_init,
+ capabilities = common_capabilities,
+ },
},
- linters = {
- "tidy",
- -- https://docs.errata.ai/vale/scoping#html
- "vale",
+ },
+ html = {
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd
+ exe = "",
+ args = {},
+ },
},
+ linters = {},
lsp = {
provider = "html",
setup = {
@@ -419,14 +572,18 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
java = {
- formatter = {
- exe = "prettier",
- args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
+ formatters = {
+ {
+ -- @usage can be clang_format or uncrustify
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -434,15 +591,19 @@ lvim.lang = {
setup = {
cmd = { DATA_PATH .. "/lspinstall/java/jdtls.sh" },
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
json = {
- formatter = {
- exe = "json_tool",
- args = {},
- stdin = true,
+ formatters = {
+ {
+ -- @usage can be json_tool or prettier or prettierd
+ exe = "",
+ args = {},
+ stdin = true,
+ },
},
linters = {},
lsp = {
@@ -454,6 +615,7 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
settings = {
json = {
@@ -477,10 +639,10 @@ lvim.lang = {
},
},
julia = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
- },
+ } },
linters = {},
lsp = {
provider = "julials",
@@ -493,15 +655,16 @@ lvim.lang = {
CONFIG_PATH .. "/utils/julia/run.jl",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
kotlin = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
- },
+ } },
linters = {},
lsp = {
provider = "kotlin_language_server",
@@ -510,6 +673,7 @@ lvim.lang = {
DATA_PATH .. "/lspinstall/kotlin/server/bin/kotlin-language-server",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
root_dir = function(fname)
local util = require "lspconfig/util"
@@ -530,11 +694,14 @@ lvim.lang = {
},
},
lua = {
- formatter = {
- exe = "stylua",
- args = {},
+ formatters = {
+ {
+ -- @usage can be stylua or lua_format
+ exe = "",
+ args = {},
+ },
},
- linters = { "luacheck" },
+ linters = {},
lsp = {
provider = "sumneko_lua",
setup = {
@@ -543,7 +710,9 @@ lvim.lang = {
"-E",
DATA_PATH .. "/lspinstall/lua/main.lua",
},
+ capabilities = common_capabilities,
on_attach = common_on_attach,
+ on_init = common_on_init,
settings = {
Lua = {
runtime = {
@@ -572,20 +741,26 @@ lvim.lang = {
},
},
nginx = {
- formatter = {
- exe = "nginx_beautifier",
- args = {
- provider = "",
- setup = {},
+ formatters = {
+ {
+ -- @usage can be nginx_beautifier
+ exe = "",
+ args = {
+ provider = "",
+ setup = {},
+ },
},
},
linters = {},
lsp = {},
},
perl = {
- formatter = {
- exe = "perltidy",
- args = {},
+ formatters = {
+ {
+ -- @usage can be perltidy
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -594,9 +769,12 @@ lvim.lang = {
},
},
sql = {
- formatter = {
- exe = "sqlformat",
- args = {},
+ formatters = {
+ {
+ -- @usage can be sqlformat
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -607,9 +785,12 @@ lvim.lang = {
},
},
php = {
- formatter = {
- exe = "phpcbf",
- args = {},
+ formatters = {
+ {
+ -- @usage can be phpcbf
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -620,6 +801,7 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
filetypes = { "php", "phtml" },
settings = {
intelephense = {
@@ -632,28 +814,30 @@ lvim.lang = {
},
},
puppet = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
- },
+ } },
linters = {},
lsp = {
provider = "puppet",
setup = {
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
javascript = {
- -- @usage can be prettier or eslint
- formatter = {
- exe = "prettier",
- args = {},
- },
- linters = {
- "eslint",
+ -- @usage can be prettier or prettier_d_slim or prettierd
+ formatters = {
+ {
+ exe = "",
+ args = {},
+ },
},
+ -- @usage can be {"eslint"} or {"eslint_d"}
+ linters = {},
lsp = {
provider = "tsserver",
setup = {
@@ -663,19 +847,21 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
javascriptreact = {
- -- @usage can be prettier or eslint
- formatter = {
- exe = "prettier",
- args = {},
- },
- linters = {
- "eslint",
+ formatters = {
+ {
+ -- @usage can be prettier or prettier_d_slim or prettierd
+ exe = "",
+ args = {},
+ },
},
+ -- @usage can be {"eslint"} or {"eslint_d"}
+ linters = {},
lsp = {
provider = "tsserver",
setup = {
@@ -685,21 +871,20 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
python = {
- -- @usage can be flake8 or yapf
- formatter = {
- exe = "black",
- args = {},
- },
- linters = {
- "flake8",
- "pylint",
- "mypy",
+ formatters = {
+ {
+ -- @usage can be black or yapf or isort
+ exe = "",
+ args = {},
+ },
},
+ linters = {},
lsp = {
provider = "pyright",
setup = {
@@ -708,6 +893,7 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
@@ -715,9 +901,12 @@ lvim.lang = {
-- R -e 'install.packages("formatR",repos = "http://cran.us.r-project.org")'
-- R -e 'install.packages("readr",repos = "http://cran.us.r-project.org")'
r = {
- formatter = {
- exe = "format_r",
- args = {},
+ formatters = {
+ {
+ -- @usage can be format_r
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -730,16 +919,20 @@ lvim.lang = {
"languageserver::run()",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
ruby = {
- formatter = {
- exe = "rufo",
- args = {},
+ formatters = {
+ {
+ -- @usage can be rufo
+ exe = "",
+ args = {},
+ },
},
- linters = { "ruby" },
+ linters = {},
lsp = {
provider = "solargraph",
setup = {
@@ -748,14 +941,31 @@ lvim.lang = {
"stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
+ filetypes = { "ruby" },
+ init_options = {
+ formatting = true,
+ },
+ root_dir = function(fname)
+ local util = require("lspconfig").util
+ return util.root_pattern("Gemfile", ".git")(fname)
+ end,
+ settings = {
+ solargraph = {
+ diagnostics = true,
+ },
+ },
},
},
},
rust = {
- formatter = {
- exe = "rustfmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be rustfmt
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -765,32 +975,38 @@ lvim.lang = {
DATA_PATH .. "/lspinstall/rust/rust-analyzer",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
scala = {
- formatter = {
- exe = "scalafmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be scalafmt
+ exe = "",
+ args = {},
+ },
},
linters = { "" },
lsp = {
provider = "metals",
setup = {
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
sh = {
- -- @usage can be 'shfmt'
- formatter = {
- exe = "shfmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be shfmt
+ exe = "",
+ args = {},
+ },
},
- -- @usage can be 'shellcheck'
- linters = { "shellcheck" },
+ linters = {},
lsp = {
provider = "bashls",
setup = {
@@ -799,15 +1015,16 @@ lvim.lang = {
"start",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
svelte = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
- },
+ } },
linters = {},
lsp = {
provider = "svelte",
@@ -817,14 +1034,18 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
swift = {
- formatter = {
- exe = "swiftformat",
- args = {},
+ formatters = {
+ {
+ -- @usage can be swiftformat
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -835,6 +1056,7 @@ lvim.lang = {
"sourcekit-lsp",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
@@ -852,9 +1074,12 @@ lvim.lang = {
},
},
terraform = {
- formatter = {
- exe = "terraform_fmt",
- args = {},
+ formatters = {
+ {
+ -- @usage can be terraform_fmt
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -865,35 +1090,41 @@ lvim.lang = {
"serve",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
tex = {
- formatter = {
- exe = "latexindent",
- args = {},
- stdin = false,
+ formatters = {
+ {
+ exe = "",
+ args = {},
+ stdin = false,
+ },
+ -- @usage can be chktex or vale
},
- linters = { "chktex" },
+ linters = {},
lsp = {
provider = "texlab",
setup = {
cmd = { DATA_PATH .. "/lspinstall/latex/texlab" },
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
typescript = {
- -- @usage can be prettier or eslint
- formatter = {
- exe = "prettier",
- args = {},
- },
- linters = {
- "eslint",
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd or prettier_d_slim
+ exe = "",
+ args = {},
+ },
+ -- @usage can be {"eslint"} or {"eslint_d"}
},
+ linters = {},
lsp = {
provider = "tsserver",
setup = {
@@ -903,19 +1134,21 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
typescriptreact = {
- -- @usage can be prettier or eslint
- formatter = {
- exe = "prettier",
- args = {},
- },
- linters = {
- "eslint",
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd or prettier_d_slim
+ exe = "",
+ args = {},
+ },
},
+ -- @usage can be {"eslint"} or {"eslint_d"}
+ linters = {},
lsp = {
provider = "tsserver",
setup = {
@@ -925,15 +1158,19 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
vim = {
- formatter = {
- exe = "",
- args = {},
+ formatters = {
+ {
+ exe = "",
+ args = {},
+ },
},
+ -- @usage can be {"vint"}
linters = { "" },
lsp = {
provider = "vimls",
@@ -943,15 +1180,20 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
vue = {
- formatter = {
- exe = "prettier",
- args = {},
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd or prettier_d_slim
+ exe = "",
+ args = {},
+ },
},
+ -- @usage can be {"eslint"} or {"eslint_d"}
linters = {},
lsp = {
provider = "vuels",
@@ -960,14 +1202,18 @@ lvim.lang = {
DATA_PATH .. "/lspinstall/vue/node_modules/.bin/vls",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
yaml = {
- formatter = {
- exe = "prettier",
- args = {},
+ formatters = {
+ {
+ -- @usage can be prettier or prettierd
+ exe = "",
+ args = {},
+ },
},
linters = {},
lsp = {
@@ -978,16 +1224,17 @@ lvim.lang = {
"--stdio",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
zig = {
- formatter = {
+ formatters = { {
exe = "",
args = {},
stdin = false,
- },
+ } },
linters = {},
lsp = {
provider = "zls",
@@ -996,12 +1243,44 @@ lvim.lang = {
"zls",
},
on_attach = common_on_attach,
+ on_init = common_on_init,
+ capabilities = common_capabilities,
+ },
+ },
+ },
+ gdscript = {
+ formatters = {},
+ linters = {},
+ lsp = {
+ provider = "gdscript",
+ setup = {
+ cmd = {
+ "nc",
+ "localhost",
+ "6008",
+ },
+ on_attach = common_on_attach,
+ on_init = common_on_init,
+ capabilities = common_capabilities,
+ },
+ },
+ },
+ ps1 = {
+ formatters = {},
+ linters = {},
+ lsp = {
+ provider = "powershell_es",
+ setup = {
+ bundle_path = "",
+ on_attach = common_on_attach,
+ on_init = common_on_init,
capabilities = common_capabilities,
},
},
},
}
+require("keymappings").config()
require("core.which-key").config()
require "core.status_colors"
require("core.gitsigns").config()
@@ -1012,3 +1291,5 @@ require("core.terminal").config()
require("core.telescope").config()
require("core.treesitter").config()
require("core.nvimtree").config()
+require("core.rooter").config()
+require("core.bufferline").config()
diff --git a/lua/keymappings.lua b/lua/keymappings.lua
index 9c0ad217..e82df5ae 100644
--- a/lua/keymappings.lua
+++ b/lua/keymappings.lua
@@ -1,115 +1,172 @@
-local utils = require "utils"
-
-local opts = {
- nnoremap = { noremap = true, silent = true },
- inoremap = { noremap = true, silent = true },
- vnoremap = { noremap = true, silent = true },
- xnoremap = { noremap = true, silent = true },
- generic = { silent = true },
+local M = {}
+local Log = require "core.log"
+
+local generic_opts_any = { noremap = true, silent = true }
+
+local generic_opts = {
+ insert_mode = generic_opts_any,
+ normal_mode = generic_opts_any,
+ visual_mode = generic_opts_any,
+ visual_block_mode = generic_opts_any,
+ term_mode = { silent = true },
}
-local default_keys = {
- insert_mode = {
- -- I hate escape
- { "jk", "<ESC>" },
- { "kj", "<ESC>" },
- { "jj", "<ESC>" },
- -- Move current line / block with Alt-j/k ala vscode.
- { "<A-j>", "<Esc>:m .+1<CR>==gi" },
- { "<A-k>", "<Esc>:m .-2<CR>==gi" },
- -- navigation
- { "<A-Up>", "<C-\\><C-N><C-w>k" },
- { "<A-Down>", "<C-\\><C-N><C-w>j" },
- { "<A-Left>", "<C-\\><C-N><C-w>h" },
- { "<A-Right>", "<C-\\><C-N><C-w>l" },
- },
-
- normal_mode = {
- -- Better window movement
- { "<C-h>", "<C-w>h" },
- { "<C-j>", "<C-w>j" },
- { "<C-k>", "<C-w>k" },
- { "<C-l>", "<C-w>l" },
-
- -- Resize with arrows
- { "<C-Up>", ":resize -2<CR>" },
- { "<C-Down>", ":resize +2<CR>" },
- { "<C-Left>", ":vertical resize -2<CR>" },
- { "<C-Right>", ":vertical resize +2<CR>" },
-
- -- Tab switch buffer
- -- { "<TAB>", ":bnext<CR>" },
- -- { "<S-TAB>", ":bprevious<CR>" },
-
- -- Move current line / block with Alt-j/k a la vscode.
- { "<A-j>", ":m .+1<CR>==" },
- { "<A-k>", ":m .-2<CR>==" },
-
- -- QuickFix
- { "]q", ":cnext<CR>" },
- { "[q", ":cprev<CR>" },
- { "<C-q>", ":call QuickFixToggle()<CR>" },
-
- -- {'<C-TAB>', 'compe#complete()', {noremap = true, silent = true, expr = true}},
- },
-
- term_mode = {
- -- Terminal window navigation
- { "<C-h>", "<C-\\><C-N><C-w>h" },
- { "<C-j>", "<C-\\><C-N><C-w>j" },
- { "<C-k>", "<C-\\><C-N><C-w>k" },
- { "<C-l>", "<C-\\><C-N><C-w>l" },
- },
-
- visual_mode = {
- -- Better indenting
- { "<", "<gv" },
- { ">", ">gv" },
-
- -- { "p", '"0p', { silent = true } },
- -- { "P", '"0P', { silent = true } },
- },
-
- visual_block_mode = {
- -- Move selected line / block of text in visual mode
- { "K", ":move '<-2<CR>gv-gv" },
- { "J", ":move '>+1<CR>gv-gv" },
-
- -- Move current line / block with Alt-j/k ala vscode.
- { "<A-j>", ":m '>+1<CR>gv-gv" },
- { "<A-k>", ":m '<-2<CR>gv-gv" },
- },
+local mode_adapters = {
+ insert_mode = "i",
+ normal_mode = "n",
+ term_mode = "t",
+ visual_mode = "v",
+ visual_block_mode = "x",
}
-if vim.fn.has "mac" == 1 then
- -- TODO: fix this
- default_keys.normal_mode[5][1] = "<A-Up>"
- default_keys.normal_mode[6][1] = "<A-Down>"
- default_keys.normal_mode[7][1] = "<A-Left>"
- default_keys.normal_mode[8][1] = "<A-Right>"
+-- Append key mappings to lunarvim's defaults for a given mode
+-- @param keymaps The table of key mappings containing a list per mode (normal_mode, insert_mode, ..)
+function M.append_to_defaults(keymaps)
+ for mode, mappings in pairs(keymaps) do
+ for k, v in ipairs(mappings) do
+ lvim.keys[mode][k] = v
+ end
+ end
+end
+
+-- Set key mappings individually
+-- @param mode The keymap mode, can be one of the keys of mode_adapters
+-- @param key The key of keymap
+-- @param val Can be form as a mapping or tuple of mapping and user defined opt
+function M.set_keymaps(mode, key, val)
+ local opt = generic_opts[mode] and generic_opts[mode] or generic_opts_any
+ if type(val) == "table" then
+ opt = val[2]
+ val = val[1]
+ end
+ vim.api.nvim_set_keymap(mode, key, val, opt)
+end
+
+-- Load key mappings for a given mode
+-- @param mode The keymap mode, can be one of the keys of mode_adapters
+-- @param keymaps The list of key mappings
+function M.load_mode(mode, keymaps)
+ mode = mode_adapters[mode] and mode_adapters[mode] or mode
+ for k, v in pairs(keymaps) do
+ M.set_keymaps(mode, k, v)
+ end
end
-if lvim.leader == " " or lvim.leader == "space" then
- vim.g.mapleader = " "
-else
- vim.g.mapleader = lvim.leader
+-- Load key mappings for all provided modes
+-- @param keymaps A list of key mappings for each mode
+function M.load(keymaps)
+ for mode, mapping in pairs(keymaps) do
+ M.load_mode(mode, mapping)
+ end
end
-local function get_user_keys(mode)
- if lvim.keys[mode] == nil then
- return default_keys[mode]
+function M.config()
+ lvim.keys = {
+ ---@usage change or add keymappings for insert mode
+ insert_mode = {
+ -- 'jk' for quitting insert mode
+ ["jk"] = "<ESC>",
+ -- 'kj' for quitting insert mode
+ ["kj"] = "<ESC>",
+ -- 'jj' for quitting insert mode
+ ["jj"] = "<ESC>",
+ -- Move current line / block with Alt-j/k ala vscode.
+ ["<A-j>"] = "<Esc>:m .+1<CR>==gi",
+ -- Move current line / block with Alt-j/k ala vscode.
+ ["<A-k>"] = "<Esc>:m .-2<CR>==gi",
+ -- navigation
+ ["<A-Up>"] = "<C-\\><C-N><C-w>k",
+ ["<A-Down>"] = "<C-\\><C-N><C-w>j",
+ ["<A-Left>"] = "<C-\\><C-N><C-w>h",
+ ["<A-Right>"] = "<C-\\><C-N><C-w>l",
+ -- navigate tab completion with <c-j> and <c-k>
+ -- runs conditionally
+ ["<C-j>"] = { 'pumvisible() ? "\\<C-n>" : "\\<C-j>"', { expr = true, noremap = true } },
+ ["<C-k>"] = { 'pumvisible() ? "\\<C-p>" : "\\<C-k>"', { expr = true, noremap = true } },
+ },
+
+ ---@usage change or add keymappings for normal mode
+ normal_mode = {
+ -- Better window movement
+ ["<C-h>"] = "<C-w>h",
+ ["<C-j>"] = "<C-w>j",
+ ["<C-k>"] = "<C-w>k",
+ ["<C-l>"] = "<C-w>l",
+
+ -- Resize with arrows
+ ["<C-Up>"] = ":resize -2<CR>",
+ ["<C-Down>"] = ":resize +2<CR>",
+ ["<C-Left>"] = ":vertical resize -2<CR>",
+ ["<C-Right>"] = ":vertical resize +2<CR>",
+
+ -- Tab switch buffer
+ ["<S-l>"] = ":BufferNext<CR>",
+ ["<S-h>"] = ":BufferPrevious<CR>",
+
+ -- Move current line / block with Alt-j/k a la vscode.
+ ["<A-j>"] = ":m .+1<CR>==",
+ ["<A-k>"] = ":m .-2<CR>==",
+
+ -- QuickFix
+ ["]q"] = ":cnext<CR>",
+ ["[q"] = ":cprev<CR>",
+ ["<C-q>"] = ":call QuickFixToggle()<CR>",
+ },
+
+ ---@usage change or add keymappings for terminal mode
+ term_mode = {
+ -- Terminal window navigation
+ ["<C-h>"] = "<C-\\><C-N><C-w>h",
+ ["<C-j>"] = "<C-\\><C-N><C-w>j",
+ ["<C-k>"] = "<C-\\><C-N><C-w>k",
+ ["<C-l>"] = "<C-\\><C-N><C-w>l",
+ },
+
+ ---@usage change or add keymappings for visual mode
+ visual_mode = {
+ -- Better indenting
+ ["<"] = "<gv",
+ [">"] = ">gv",
+
+ -- ["p"] = '"0p',
+ -- ["P"] = '"0P',
+ },
+
+ ---@usage change or add keymappings for visual block mode
+ visual_block_mode = {
+ -- Move selected line / block of text in visual mode
+ ["K"] = ":move '<-2<CR>gv-gv",
+ ["J"] = ":move '>+1<CR>gv-gv",
+
+ -- Move current line / block with Alt-j/k ala vscode.
+ ["<A-j>"] = ":m '>+1<CR>gv-gv",
+ ["<A-k>"] = ":m '<-2<CR>gv-gv",
+ },
+ }
+
+ if vim.fn.has "mac" == 1 then
+ lvim.keys.normal_mode["<A-Up>"] = lvim.keys.normal_mode["<C-Up>"]
+ lvim.keys.normal_mode["<A-Down>"] = lvim.keys.normal_mode["<C-Down>"]
+ lvim.keys.normal_mode["<A-Left>"] = lvim.keys.normal_mode["<C-Left>"]
+ lvim.keys.normal_mode["<A-Right>"] = lvim.keys.normal_mode["<C-Right>"]
+ if Log:get_default() then
+ Log:get_default().info "Activated mac keymappings"
+ end
+ end
+end
+
+function M.print(mode)
+ print "List of LunarVim's default keymappings (not including which-key)"
+ if mode then
+ print(vim.inspect(lvim.keys[mode]))
else
- return lvim.keys[mode]
+ print(vim.inspect(lvim.keys))
end
end
-utils.add_keymap_normal_mode(opts.nnoremap, get_user_keys "normal_mode")
-utils.add_keymap_insert_mode(opts.inoremap, get_user_keys "insert_mode")
-utils.add_keymap_visual_mode(opts.vnoremap, get_user_keys "visual_mode")
-utils.add_keymap_visual_block_mode(opts.xnoremap, get_user_keys "visual_block_mode")
-utils.add_keymap_term_mode(opts.generic, get_user_keys "term_mode")
+function M.setup()
+ vim.g.mapleader = (lvim.leader == "space" and " ") or lvim.leader
+ M.load(lvim.keys)
+end
--- navigate tab completion with <c-j> and <c-k>
--- runs conditionally
-vim.cmd 'inoremap <expr> <C-j> pumvisible() ? "\\<C-n>" : "\\<C-j>"'
-vim.cmd 'inoremap <expr> <C-k> pumvisible() ? "\\<C-p>" : "\\<C-k>"'
+return M
diff --git a/lua/lsp/handlers.lua b/lua/lsp/handlers.lua
index d3a487ae..2322e76a 100644
--- a/lua/lsp/handlers.lua
+++ b/lua/lsp/handlers.lua
@@ -5,10 +5,52 @@ local M = {}
function M.setup()
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
virtual_text = lvim.lsp.diagnostics.virtual_text,
- signs = lvim.lsp.diagnostics.signs,
+ signs = lvim.lsp.diagnostics.signs.active,
underline = lvim.lsp.document_highlight,
})
+ vim.lsp.handlers["textDocument/publishDiagnostics"] = function(_, _, params, client_id, _)
+ local config = { -- your config
+ virtual_text = lvim.lsp.diagnostics.virtual_text,
+ signs = lvim.lsp.diagnostics.signs,
+ underline = lvim.lsp.diagnostics.underline,
+ update_in_insert = lvim.lsp.diagnostics.update_in_insert,
+ severity_sort = lvim.lsp.diagnostics.severity_sort,
+ }
+ local uri = params.uri
+ local bufnr = vim.uri_to_bufnr(uri)
+
+ if not bufnr then
+ return
+ end
+
+ local diagnostics = params.diagnostics
+
+ for i, v in ipairs(diagnostics) do
+ local source = v.source
+ if source then
+ if string.find(source, "/") then
+ source = string.sub(v.source, string.find(v.source, "([%w-_]+)$"))
+ end
+ diagnostics[i].message = string.format("%s: %s", source, v.message)
+ else
+ diagnostics[i].message = string.format("%s", v.message)
+ end
+
+ if vim.tbl_contains(vim.tbl_keys(v), "code") then
+ diagnostics[i].message = diagnostics[i].message .. string.format(" [%s]", v.code)
+ end
+ end
+
+ vim.lsp.diagnostic.save(diagnostics, bufnr, client_id)
+
+ if not vim.api.nvim_buf_is_loaded(bufnr) then
+ return
+ end
+
+ vim.lsp.diagnostic.display(diagnostics, bufnr, client_id, config)
+ end
+
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
border = lvim.lsp.popup_border,
})
diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua
index 62c42fd8..e4ea02db 100644
--- a/lua/lsp/init.lua
+++ b/lua/lsp/init.lua
@@ -1,59 +1,149 @@
-local utils = require "utils"
-local service = require "lsp.service"
-local null_ls = require "lsp.null-ls"
local M = {}
-
+local Log = require "core.log"
function M.config()
- require("lsp.kind").setup()
+ vim.lsp.protocol.CompletionItemKind = lvim.lsp.completion.item_kind
+
+ for _, sign in ipairs(lvim.lsp.diagnostics.signs.values) do
+ vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = sign.name })
+ end
+
require("lsp.handlers").setup()
- require("lsp.signs").setup()
- require("lsp.keybinds").setup()
end
-function M.setup(lang)
- local lang_server = lvim.lang[lang].lsp
- local provider = lang_server.provider
- if utils.check_lsp_client_active(provider) then
- return
+local function lsp_highlight_document(client)
+ if lvim.lsp.document_highlight == false then
+ return -- we don't need further
+ end
+ -- Set autocommands conditional on server_capabilities
+ if client.resolved_capabilities.document_highlight then
+ vim.api.nvim_exec(
+ [[
+ hi LspReferenceRead cterm=bold ctermbg=red guibg=#464646
+ hi LspReferenceText cterm=bold ctermbg=red guibg=#464646
+ hi LspReferenceWrite cterm=bold ctermbg=red guibg=#464646
+ augroup lsp_document_highlight
+ autocmd! * <buffer>
+ autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
+ autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
+ augroup END
+ ]],
+ false
+ )
end
+end
- local overrides = lvim.lsp.override
+local function add_lsp_buffer_keybindings(bufnr)
+ local wk = require "which-key"
+ local keys = {
+ ["K"] = { "<cmd>lua vim.lsp.buf.hover()<CR>", "Show hover" },
+ ["gd"] = { "<cmd>lua vim.lsp.buf.definition()<CR>", "Goto Definition" },
+ ["gD"] = { "<cmd>lua vim.lsp.buf.declaration()<CR>", "Goto declaration" },
+ ["gr"] = { "<cmd>lua vim.lsp.buf.references()<CR>", "Goto references" },
+ ["gi"] = { "<cmd>lua vim.lsp.buf.implementation()<CR>", "Goto implementation" },
+ ["gs"] = { "<cmd>lua vim.lsp.buf.signature_help()<CR>", "show signature help" },
+ ["gp"] = { "<cmd>lua require'lsp.peek'.Peek('definition')<CR>", "Peek definition" },
+ ["gl"] = {
+ "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics({ show_header = false, border = 'single' })<CR>",
+ "Show line diagnostics",
+ },
+ }
+ wk.register(keys, { mode = "n", buffer = bufnr })
+end
- if utils.is_table(overrides) then
- if utils.has_value(overrides, lang) then
- return
- end
+local function set_smart_cwd(client)
+ local proj_dir = client.config.root_dir
+ if lvim.lsp.smart_cwd and proj_dir ~= "/" then
+ vim.api.nvim_set_current_dir(proj_dir)
+ require("core.nvimtree").change_tree_dir(proj_dir)
end
+end
- if utils.is_string(overrides) then
- if overrides == lang then
- return
+function M.common_capabilities()
+ local capabilities = vim.lsp.protocol.make_client_capabilities()
+ capabilities.textDocument.completion.completionItem.snippetSupport = true
+ capabilities.textDocument.completion.completionItem.resolveSupport = {
+ properties = {
+ "documentation",
+ "detail",
+ "additionalTextEdits",
+ },
+ }
+ return capabilities
+end
+
+function M.get_ls_capabilities(client_id)
+ local client
+ if not client_id then
+ local buf_clients = vim.lsp.buf_get_clients()
+ for _, buf_client in ipairs(buf_clients) do
+ if buf_client.name ~= "null-ls" then
+ client_id = buf_client.id
+ break
+ end
end
end
- local sources = null_ls.setup(lang)
+ if not client_id then
+ error "Unable to determine client_id"
+ end
- for _, source in pairs(sources) do
- local method = source.method
- local format_method = "NULL_LS_FORMATTING"
+ client = vim.lsp.get_client_by_id(tonumber(client_id))
- if utils.is_table(method) then
- if utils.has_value(method, format_method) then
- lang_server.setup.on_attach = service.no_formatter_on_attach
- end
- end
+ local enabled_caps = {}
- if utils.is_string(method) then
- if method == format_method then
- lang_server.setup.on_attach = service.no_formatter_on_attach
- end
+ for k, v in pairs(client.resolved_capabilities) do
+ if v == true then
+ table.insert(enabled_caps, k)
end
end
- if provider == "" or provider == nil then
+ return enabled_caps
+end
+
+function M.common_on_init(client, bufnr)
+ if lvim.lsp.on_init_callback then
+ lvim.lsp.on_init_callback(client, bufnr)
+ Log:get_default().info "Called lsp.on_init_callback"
+ return
+ end
+
+ local formatters = lvim.lang[vim.bo.filetype].formatters
+ if not vim.tbl_isempty(formatters) and formatters[1]["exe"] ~= nil and formatters[1].exe ~= "" then
+ client.resolved_capabilities.document_formatting = false
+ Log:get_default().info(
+ string.format("Overriding language server [%s] with format provider [%s]", client.name, formatters[1].exe)
+ )
+ end
+end
+
+function M.common_on_attach(client, bufnr)
+ if lvim.lsp.on_attach_callback then
+ lvim.lsp.on_attach_callback(client, bufnr)
+ Log:get_default().info "Called lsp.on_init_callback"
+ end
+ lsp_highlight_document(client)
+ add_lsp_buffer_keybindings(bufnr)
+ set_smart_cwd(client)
+ require("lsp.null-ls").setup(vim.bo.filetype)
+end
+
+function M.setup(lang)
+ local lsp = lvim.lang[lang].lsp
+ if require("utils").check_lsp_client_active(lsp.provider) then
return
end
- require("lspconfig")[provider].setup(lang_server.setup)
+ local overrides = lvim.lsp.override
+
+ if type(overrides) == "table" then
+ if vim.tbl_contains(overrides, lang) then
+ return
+ end
+ end
+
+ if lsp.provider ~= nil and lsp.provider ~= "" then
+ local lspconfig = require "lspconfig"
+ lspconfig[lsp.provider].setup(lsp.setup)
+ end
end
return M
diff --git a/lua/lsp/keybinds.lua b/lua/lsp/keybinds.lua
deleted file mode 100644
index 5722dab7..00000000
--- a/lua/lsp/keybinds.lua
+++ /dev/null
@@ -1,27 +0,0 @@
-local M = {}
-
-function M.setup()
- if lvim.lsp.default_keybinds then
- vim.cmd "nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>"
- vim.cmd "nnoremap <silent> gD <cmd>lua vim.lsp.buf.declaration()<CR>"
- vim.cmd "nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>"
- vim.cmd "nnoremap <silent> gi <cmd>lua vim.lsp.buf.implementation()<CR>"
- vim.api.nvim_set_keymap(
- "n",
- "gl",
- '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics({ show_header = false, border = "single" })<CR>',
- { noremap = true, silent = true }
- )
-
- vim.cmd "nnoremap <silent> gp <cmd>lua require'lsp.utils'.PeekDefinition()<CR>"
- vim.cmd "nnoremap <silent> K :lua vim.lsp.buf.hover()<CR>"
- vim.cmd "nnoremap <silent> <C-p> :lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = lvim.lsp.popup_border}})<CR>"
- vim.cmd "nnoremap <silent> <C-n> :lua vim.lsp.diagnostic.goto_next({popup_opts = {border = lvim.lsp.popup_border}})<CR>"
- -- vim.cmd "nnoremap <silent> gs <cmd>lua vim.lsp.buf.signature_help()<CR>"
- -- scroll down hover doc or scroll in definition preview
- -- scroll up hover doc
- -- vim.cmd 'command! -nargs=0 LspVirtualTextToggle lua require("lsp/virtual_text").toggle()'
- end
-end
-
-return M
diff --git a/lua/lsp/kind.lua b/lua/lsp/kind.lua
deleted file mode 100644
index e3b95ecb..00000000
--- a/lua/lsp/kind.lua
+++ /dev/null
@@ -1,33 +0,0 @@
-local M = {}
-
-function M.setup()
- vim.lsp.protocol.CompletionItemKind = {
- -- symbols for autocomplete
- "  (Text) ",
- "  (Method)",
- "  (Function)",
- "  (Constructor)",
- " ﴲ (Field)",
- "[] (Variable)",
- "  (Class)",
- " ﰮ (Interface)",
- "  (Module)",
- " 襁 (Property)",
- "  (Unit)",
- "  (Value)",
- " 練 (Enum)",
- "  (Keyword)",
- "  (Snippet)",
- "  (Color)",
- "  (File)",
- "  (Reference)",
- "  (Folder)",
- "  (EnumMember)",
- " ﲀ (Constant)",
- " ﳤ (Struct)",
- "  (Event)",
- "  (Operator)",
- "  (TypeParameter)",
- }
-end
-return M
diff --git a/lua/lsp/null-ls.lua b/lua/lsp/null-ls.lua
index a231698a..697eac39 100644
--- a/lua/lsp/null-ls.lua
+++ b/lua/lsp/null-ls.lua
@@ -1,66 +1,142 @@
local M = {}
+local Log = require "core.log"
-local _, null_ls = pcall(require, "null-ls")
-local utils = require "utils"
-local sources = {}
+local null_ls = require "null-ls"
-local local_executables = { "prettier", "prettierd", "prettier_d_slim", "eslint_d", "eslint" }
+local nodejs_local_providers = { "prettier", "prettierd", "prettier_d_slim", "eslint_d", "eslint" }
-local find_local_exe = function(exe)
- vim.cmd "let root_dir = FindRootDirectory()"
- local root_dir = vim.api.nvim_get_var "root_dir"
- local local_exe = root_dir .. "/node_modules/.bin/" .. exe
- return local_exe
-end
+M.requested_providers = {}
-local function setup_ls(exe, type)
- if utils.has_value(local_executables, exe) then
- local smart_executable = null_ls.builtins[type][exe]
- local local_executable = find_local_exe(exe)
- if vim.fn.executable(local_executable) == 1 then
- smart_executable._opts.command = local_executable
- table.insert(sources, smart_executable)
- else
- if vim.fn.executable(exe) == 1 then
- table.insert(sources, smart_executable)
+function M.get_registered_providers_by_filetype(ft)
+ local matches = {}
+ for _, provider in pairs(M.requested_providers) do
+ if vim.tbl_contains(provider.filetypes, ft) then
+ local provider_name = provider.name
+ -- special case: show "eslint_d" instead of eslint
+ -- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/9b8458bd1648e84169a7e8638091ba15c2f20fc0/doc/BUILTINS.md#eslint
+ if string.find(provider._opts.command, "eslint_d") then
+ provider_name = "eslint_d"
end
+ table.insert(matches, provider_name)
+ end
+ end
+
+ return matches
+end
+
+function M.get_missing_providers_by_filetype(ft)
+ local matches = {}
+ for _, provider in pairs(M.requested_providers) do
+ if vim.tbl_contains(provider.filetypes, ft) then
+ local provider_name = provider.name
+
+ table.insert(matches, provider_name)
end
+ end
+
+ return matches
+end
+
+local function register_failed_request(ft, provider, operation)
+ if not lvim.lang[ft][operation]._failed_requests then
+ lvim.lang[ft][operation]._failed_requests = {}
+ end
+ table.insert(lvim.lang[ft][operation]._failed_requests, provider)
+end
+
+local function validate_nodejs_provider(provider)
+ local command_path
+ local root_dir
+ if lvim.builtin.rooter.active then
+ --- use vim-rooter to set root_dir
+ vim.cmd "let root_dir = FindRootDirectory()"
+ root_dir = vim.api.nvim_get_var "root_dir"
else
- if null_ls.builtins[type][exe] and vim.fn.executable(null_ls.builtins[type][exe]._opts.command) then
- table.insert(sources, null_ls.builtins[type][exe])
+ --- use LSP to set root_dir
+ local ts_client = require("utils").get_active_client_by_ft "typescript"
+ if ts_client == nil then
+ Log:get_default().error "Unable to determine root directory since tsserver didn't start correctly"
+ return
end
+ root_dir = ts_client.config.root_dir
end
- null_ls.register { sources = sources }
+ local local_nodejs_command = root_dir .. "/node_modules/.bin/" .. provider._opts.command
+ Log:get_default().debug("checking for local node module: ", vim.inspect(provider))
+
+ if vim.fn.executable(local_nodejs_command) == 1 then
+ command_path = local_nodejs_command
+ elseif vim.fn.executable(provider._opts.command) == 1 then
+ Log:get_default().debug("checking in global path instead for node module", provider._opts.command)
+ command_path = provider._opts.command
+ else
+ Log:get_default().debug("Unable to find node module", provider._opts.command)
+ end
+ return command_path
end
--- TODO: for linters and formatters with spaces and '-' replace with '_'
-local function setup(filetype, type)
- local executables = nil
- if type == "diagnostics" then
- executables = lvim.lang[filetype].linters
+local function validate_provider_request(provider)
+ if provider == "" or provider == nil then
+ return
end
- if type == "formatting" then
- executables = lvim.lang[filetype].formatter.exe
+ -- NOTE: we can't use provider.name because eslint_d uses eslint name
+ if vim.tbl_contains(nodejs_local_providers, provider._opts.command) then
+ return validate_nodejs_provider(provider)
end
+ if vim.fn.executable(provider._opts.command) ~= 1 then
+ Log:get_default().debug("Unable to find the path for", vim.inspect(provider))
+ Log:get_default().warn("Unable to find the path for ", provider._opts.command)
+ return
+ end
+ return provider._opts.command
+end
- if utils.is_table(executables) then
- for _, exe in pairs(executables) do
- if exe ~= "" then
- setup_ls(exe, type)
+-- TODO: for linters and formatters with spaces and '-' replace with '_'
+function M.setup(filetype)
+ for _, formatter in pairs(lvim.lang[filetype].formatters) do
+ Log:get_default().debug("validating format provider: ", formatter.exe)
+ local builtin_formatter = null_ls.builtins.formatting[formatter.exe]
+ if not vim.tbl_contains(M.requested_providers, builtin_formatter) then
+ -- FIXME: why doesn't this work?
+ -- builtin_formatter._opts.args = formatter.args or builtin_formatter._opts.args
+ -- builtin_formatter._opts.to_stdin = formatter.stdin or builtin_formatter._opts.to_stdin
+ local resolved_path = validate_provider_request(builtin_formatter)
+ if resolved_path then
+ builtin_formatter._opts.command = resolved_path
+ table.insert(M.requested_providers, builtin_formatter)
+ Log:get_default().info("Using format provider", builtin_formatter.name)
+ else
+ -- mark it here to avoid re-doing the lookup again
+ register_failed_request(filetype, formatter.exe, "formatters")
end
end
end
- if utils.is_string(executables) and executables ~= "" then
- setup_ls(executables, type)
+
+ for _, linter in pairs(lvim.lang[filetype].linters) do
+ local builtin_diagnoser = null_ls.builtins.diagnostics[linter.exe]
+ Log:get_default().debug("validating lint provider: ", linter.exe)
+ -- special case: fallback to "eslint"
+ -- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/9b8458bd1648e84169a7e8638091ba15c2f20fc0/doc/BUILTINS.md#eslint
+ -- if provider.exe
+ if linter.exe == "eslint_d" then
+ builtin_diagnoser = null_ls.builtins.diagnostics.eslint.with { command = "eslint_d" }
+ end
+ if not vim.tbl_contains(M.requested_providers, builtin_diagnoser) then
+ -- FIXME: why doesn't this work?
+ -- builtin_diagnoser._opts.args = linter.args or builtin_diagnoser._opts.args
+ -- builtin_diagnoser._opts.to_stdin = linter.stdin or builtin_diagnoser._opts.to_stdin
+ local resolved_path = validate_provider_request(builtin_diagnoser)
+ if resolved_path then
+ builtin_diagnoser._opts.command = resolved_path
+ table.insert(M.requested_providers, builtin_diagnoser)
+ Log:get_default().info("Using linter provider", builtin_diagnoser.name)
+ else
+ -- mark it here to avoid re-doing the lookup again
+ register_failed_request(filetype, linter.exe, "linters")
+ end
+ end
end
-end
--- TODO: return the formatter if one was registered, then turn off the builtin formatter
-function M.setup(filetype)
- setup(filetype, "formatting")
- setup(filetype, "diagnostics")
- lvim.sources = sources
- return sources
+ null_ls.register { sources = M.requested_providers }
end
return M
diff --git a/lua/lsp/peek.lua b/lua/lsp/peek.lua
new file mode 100644
index 00000000..cc8e57a9
--- /dev/null
+++ b/lua/lsp/peek.lua
@@ -0,0 +1,140 @@
+local M = {
+ floating_buf = nil,
+ floating_win = nil,
+ prev_result = nil,
+}
+
+local function create_floating_file(location, opts)
+ vim.validate {
+ location = { location, "t" },
+ opts = { opts, "t", true },
+ }
+
+ -- Set some defaults
+ opts = opts or {}
+ local close_events = opts.close_events or { "CursorMoved", "CursorMovedI", "BufHidden", "InsertCharPre" }
+
+ -- location may be LocationLink or Location
+ local uri = location.targetUri or location.uri
+ if uri == nil then
+ return
+ end
+ local bufnr = vim.uri_to_bufnr(uri)
+ if not vim.api.nvim_buf_is_loaded(bufnr) then
+ vim.fn.bufload(bufnr)
+ end
+
+ local range = location.targetRange or location.range
+
+ local contents = vim.api.nvim_buf_get_lines(
+ bufnr,
+ range.start.line,
+ math.min(range["end"].line + 1 + (opts.context or 10), range.start.line + (opts.max_height or 15)), -- Don't let the window be more that 15 lines long(height)
+ false
+ )
+ local width, height = vim.lsp.util._make_floating_popup_size(contents, opts)
+ opts = vim.lsp.util.make_floating_popup_options(width, height, opts)
+ -- Don't make it minimal as it is meant to be fully featured
+ opts["style"] = nil
+
+ vim.api.nvim_buf_set_option(bufnr, "bufhidden", "wipe")
+
+ local winnr = vim.api.nvim_open_win(bufnr, false, opts)
+ vim.api.nvim_win_set_option(winnr, "winblend", 0)
+
+ vim.api.nvim_buf_set_var(bufnr, "lsp_floating_window", winnr)
+
+ -- Set some autocmds to close the window
+ vim.api.nvim_command(
+ "autocmd QuitPre <buffer> ++nested ++once lua pcall(vim.api.nvim_win_close, " .. winnr .. ", true)"
+ )
+ vim.lsp.util.close_preview_autocmd(close_events, winnr)
+
+ return bufnr, winnr
+end
+
+local function preview_location_callback(_, method, result)
+ if result == nil or vim.tbl_isempty(result) then
+ print("peek: No location found: " .. method)
+ return nil
+ end
+
+ local opts = {
+ border = "rounded",
+ context = 10,
+ }
+
+ if vim.tbl_islist(result) then
+ M.prev_result = result[1]
+ M.floating_buf, M.floating_win = create_floating_file(result[1], opts)
+ else
+ M.prev_result = result
+ M.floating_buf, M.floating_win = create_floating_file(result, opts)
+ end
+end
+
+function M.open_file()
+ -- Get the file currently open in the floating window
+ local filepath = vim.fn.expand "%:."
+
+ if not filepath then
+ print "peek: Unable to open the file!"
+ return
+ end
+
+ -- Close the floating window
+ pcall(vim.api.nvim_win_close, M.floating_win, true)
+
+ -- Edit the file
+ vim.cmd("edit " .. filepath)
+
+ local winnr = vim.api.nvim_get_current_win()
+
+ -- Set the cursor at the right position
+ M.set_cursor_to_prev_pos(winnr)
+end
+
+function M.set_cursor_to_prev_pos(winnr)
+ -- Get position of the thing to peek at
+ local location = M.prev_result
+ local range = location.targetRange or location.range
+ local cursor_pos = { range.start.line + 1, range.start.character }
+
+ -- Set the winnr to the floating window if none was passed in
+ winnr = winnr or M.floating_win
+ -- Set the cursor at the correct position in the floating window
+ vim.api.nvim_win_set_cursor(winnr, cursor_pos)
+end
+
+function M.Peek(what)
+ -- If a window already exists, focus it at the right position!
+ if vim.tbl_contains(vim.api.nvim_list_wins(), M.floating_win) then
+ local success_1, _ = pcall(vim.api.nvim_set_current_win, M.floating_win)
+ if not success_1 then
+ print "peek: You cannot edit the current file in a preview!"
+ return
+ end
+
+ -- Set the cursor at the correct position in the floating window
+ M.set_cursor_to_prev_pos()
+
+ vim.api.nvim_buf_set_keymap(
+ M.floating_buf,
+ "n",
+ "<CR>",
+ ":lua require('lsp.peek').open_file()<CR>",
+ { noremap = true, silent = true }
+ )
+ else
+ -- Make a new request and then create the new window in the callback
+ local params = vim.lsp.util.make_position_params()
+ local success, _ = pcall(vim.lsp.buf_request, 0, "textDocument/" .. what, params, preview_location_callback)
+ if not success then
+ print(
+ 'peek: Error calling LSP method "textDocument/' .. what .. '". The current language lsp might not support it.'
+ )
+ end
+ end
+end
+
+return M
diff --git a/lua/lsp/service.lua b/lua/lsp/service.lua
deleted file mode 100644
index 0c49bacd..00000000
--- a/lua/lsp/service.lua
+++ /dev/null
@@ -1,122 +0,0 @@
-local M = {}
-
-local function lsp_highlight_document(client)
- if lvim.lsp.document_highlight == false then
- return -- we don't need further
- end
- -- Set autocommands conditional on server_capabilities
- if client.resolved_capabilities.document_highlight then
- vim.api.nvim_exec(
- [[
- hi LspReferenceRead cterm=bold ctermbg=red guibg=#464646
- hi LspReferenceText cterm=bold ctermbg=red guibg=#464646
- hi LspReferenceWrite cterm=bold ctermbg=red guibg=#464646
- augroup lsp_document_highlight
- autocmd! * <buffer>
- autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
- autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
- augroup END
- ]],
- false
- )
- end
-end
-
-function M.lsp_highlight_document(client)
- lsp_highlight_document(client)
-end
-
--- Taken from https://www.reddit.com/r/neovim/comments/gyb077/nvimlsp_peek_defination_javascript_ttserver/
-function M.preview_location(location, context, before_context)
- -- location may be LocationLink or Location (more useful for the former)
- context = context or 15
- before_context = before_context or 0
- local uri = location.targetUri or location.uri
- if uri == nil then
- return
- end
- local bufnr = vim.uri_to_bufnr(uri)
- if not vim.api.nvim_buf_is_loaded(bufnr) then
- vim.fn.bufload(bufnr)
- end
-
- local range = location.targetRange or location.range
- local contents = vim.api.nvim_buf_get_lines(
- bufnr,
- range.start.line - before_context,
- range["end"].line + 1 + context,
- false
- )
- local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype")
- return vim.lsp.util.open_floating_preview(contents, filetype, { border = lvim.lsp.popup_border })
-end
-
-function M.preview_location_callback(_, method, result)
- local context = 15
- if result == nil or vim.tbl_isempty(result) then
- print("No location found: " .. method)
- return nil
- end
- if vim.tbl_islist(result) then
- M.floating_buf, M.floating_win = M.preview_location(result[1], context)
- else
- M.floating_buf, M.floating_win = M.preview_location(result, context)
- end
-end
-
-function M.PeekDefinition()
- if vim.tbl_contains(vim.api.nvim_list_wins(), M.floating_win) then
- vim.api.nvim_set_current_win(M.floating_win)
- else
- local params = vim.lsp.util.make_position_params()
- return vim.lsp.buf_request(0, "textDocument/definition", params, M.preview_location_callback)
- end
-end
-
-function M.PeekTypeDefinition()
- if vim.tbl_contains(vim.api.nvim_list_wins(), M.floating_win) then
- vim.api.nvim_set_current_win(M.floating_win)
- else
- local params = vim.lsp.util.make_position_params()
- return vim.lsp.buf_request(0, "textDocument/typeDefinition", params, M.preview_location_callback)
- end
-end
-
-function M.PeekImplementation()
- if vim.tbl_contains(vim.api.nvim_list_wins(), M.floating_win) then
- vim.api.nvim_set_current_win(M.floating_win)
- else
- local params = vim.lsp.util.make_position_params()
- return vim.lsp.buf_request(0, "textDocument/implementation", params, M.preview_location_callback)
- end
-end
-
-function M.common_on_attach(client, bufnr)
- if lvim.lsp.on_attach_callback then
- lvim.lsp.on_attach_callback(client, bufnr)
- end
- lsp_highlight_document(client)
-end
-
-function M.no_formatter_on_attach(client, bufnr)
- if lvim.lsp.on_attach_callback then
- lvim.lsp.on_attach_callback(client, bufnr)
- end
- lsp_highlight_document(client)
- client.resolved_capabilities.document_formatting = false
-end
-
-function M.common_capabilities()
- local capabilities = vim.lsp.protocol.make_client_capabilities()
- capabilities.textDocument.completion.completionItem.snippetSupport = true
- capabilities.textDocument.completion.completionItem.resolveSupport = {
- properties = {
- "documentation",
- "detail",
- "additionalTextEdits",
- },
- }
- return capabilities
-end
-
-return M
diff --git a/lua/lsp/signs.lua b/lua/lsp/signs.lua
deleted file mode 100644
index fab6d302..00000000
--- a/lua/lsp/signs.lua
+++ /dev/null
@@ -1,20 +0,0 @@
-local M = {}
-function M.setup()
- vim.fn.sign_define(
- "LspDiagnosticsSignError",
- { texthl = "LspDiagnosticsSignError", text = "", numhl = "LspDiagnosticsSignError" }
- )
- vim.fn.sign_define(
- "LspDiagnosticsSignWarning",
- { texthl = "LspDiagnosticsSignWarning", text = "", numhl = "LspDiagnosticsSignWarning" }
- )
- vim.fn.sign_define(
- "LspDiagnosticsSignHint",
- { texthl = "LspDiagnosticsSignHint", text = "", numhl = "LspDiagnosticsSignHint" }
- )
- vim.fn.sign_define(
- "LspDiagnosticsSignInformation",
- { texthl = "LspDiagnosticsSignInformation", text = "", numhl = "LspDiagnosticsSignInformation" }
- )
-end
-return M
diff --git a/lua/plugins.lua b/lua/plugins.lua
index 88dc9a31..d8342ad8 100644
--- a/lua/plugins.lua
+++ b/lua/plugins.lua
@@ -18,8 +18,6 @@ return {
{ "nvim-lua/popup.nvim" },
{ "nvim-lua/plenary.nvim" },
- { "tjdevries/astronauta.nvim", commit = "e69d7bdc4183047c4700427922c4a3cc1e3258c6" },
-
-- Telescope
{
"nvim-telescope/telescope.nvim",
@@ -57,7 +55,7 @@ return {
{
"hrsh7th/vim-vsnip",
-- wants = "friendly-snippets",
- event = "InsertCharPre",
+ event = "InsertEnter",
},
{
"rafamadriz/friendly-snippets",
@@ -135,6 +133,8 @@ return {
config = function()
local status_ok, nvim_comment = pcall(require, "nvim_comment")
if not status_ok then
+ local Log = require "core.log"
+ Log:get_default().error "Failed to load nvim-comment"
return
end
nvim_comment.setup()
@@ -147,12 +147,14 @@ return {
-- vim-rooter
{
"airblade/vim-rooter",
+ -- event = "BufReadPre",
config = function()
- vim.g.rooter_silent_chdir = 1
+ require("core.rooter").setup()
if lvim.builtin.rooter.on_config_done then
lvim.builtin.rooter.on_config_done()
end
end,
+ disable = not lvim.builtin.rooter.active,
},
-- Icons
@@ -174,12 +176,13 @@ return {
{
"romgrk/barbar.nvim",
config = function()
- require "core.bufferline"
+ require("core.bufferline").setup()
if lvim.builtin.bufferline.on_config_done then
lvim.builtin.bufferline.on_config_done()
end
end,
event = "BufWinEnter",
+ disable = not lvim.builtin.bufferline.active,
},
-- Debugging
diff --git a/lua/spacegray/LSP.lua b/lua/spacegray/LSP.lua
index 2dfa07ff..dd3d77ac 100644
--- a/lua/spacegray/LSP.lua
+++ b/lua/spacegray/LSP.lua
@@ -19,15 +19,15 @@ local LSP = {
LspDiagnosticsWarning = { fg = C.warning_orange },
LspDiagnosticsInformation = { fg = C.info_yellow },
LspDiagnosticsHint = { fg = C.hint_blue },
- LspDiagnosticsUnderlineError = { fg = C.error_red },
- LspDiagnosticsUnderlineWarning = { fg = C.warning_orange },
- LspDiagnosticsUnderlineInformation = { fg = C.info_yellow },
- LspDiagnosticsUnderlineHint = { fg = C.hint_blue },
- QuickScopePrimary = { fg = C.cyan_test, style = "underline" },
- QuickScopeSecondary = { fg = C.purple_test, style = "underline" },
+ LspDiagnosticsUnderlineError = { style = "underline" },
+ LspDiagnosticsUnderlineWarning = { style = "underline" },
+ LspDiagnosticsUnderlineInformation = { style = "underline" },
+ LspDiagnosticsUnderlineHint = { style = "underline" },
+ QuickScopePrimary = { fg = C.purple_test, style = "underline" },
+ QuickScopeSecondary = { fg = C.cyan_test, style = "underline" },
TelescopeSelection = { fg = C.hint_blue },
TelescopeMatching = { fg = C.info_yellow, style = "bold" },
- TelescopeBorder = { fg = C.cyan, bg = C.bg },
+ TelescopeBorder = { fg = C.cyan, bg = Config.transparent_background and "NONE" or C.bg },
NvimTreeFolderIcon = { fg = C.blue },
NvimTreeIndentMarker = { fg = C.gray },
NvimTreeNormal = { fg = C.light_gray, bg = C.alt_bg },
@@ -45,6 +45,10 @@ local LSP = {
NvimTreeSymlink = { fg = C.cyan },
NvimTreeRootFolder = { fg = C.fg, style = "bold" },
NvimTreeExecFile = { fg = C.green },
+ LirFloatNormal = { fg = C.light_gray, bg = C.alt_bg },
+ LirDir = { fg = C.blue },
+ LirSymLink = { fg = C.cyan },
+ LirEmptyDirText = { fg = C.blue },
BufferCurrent = { fg = C.fg, bg = C.bg },
BufferCurrentIndex = { fg = C.fg, bg = C.bg },
BufferCurrentMod = { fg = C.info_yellow, bg = C.bg },
@@ -53,7 +57,7 @@ local LSP = {
BufferVisible = { fg = C.fg, bg = C.bg },
BufferVisibleIndex = { fg = C.fg, bg = C.bg },
BufferVisibleMod = { fg = C.info_yellow, bg = C.bg },
- BufferVisibleSign = { fg = C.hint_blue, bg = C.bg },
+ BufferVisibleSign = { fg = C.gray, bg = C.bg },
BufferVisibleTarget = { fg = C.red, bg = C.bg, style = "bold" },
BufferInactive = { fg = C.gray, bg = C.alt_bg },
BufferInactiveIndex = { fg = C.gray, bg = C.alt_bg },
@@ -65,11 +69,14 @@ local LSP = {
StatusLineSeparator = { fg = C.alt_bg },
StatusLineTerm = { fg = C.alt_bg },
StatusLineTermNC = { fg = C.alt_bg },
- CodiVirtualText = { fg = C.pale_purple },
+ CodiVirtualText = { fg = C.hint_blue },
IndentBlanklineContextChar = { fg = C.accent },
DashboardHeader = { fg = C.blue },
DashboardCenter = { fg = C.purple },
DashboardFooter = { fg = C.cyan },
+ xmlTag = { fg = C.cyan },
+ xmlTagName = { fg = C.cyan },
+ xmlEndTag = { fg = C.cyan },
CompeDocumentation = { bg = C.alt_bg },
DiffViewNormal = { fg = C.gray, bg = C.alt_bg },
DiffviewStatusAdded = { fg = C.sign_add },
diff --git a/lua/spacegray/Treesitter.lua b/lua/spacegray/Treesitter.lua
index 01dfacb5..4e5ce16e 100644
--- a/lua/spacegray/Treesitter.lua
+++ b/lua/spacegray/Treesitter.lua
@@ -14,7 +14,7 @@ local Treesitter = {
TSNamespace = { fg = C.blue },
TSRepeat = { fg = C.blue },
TSConstant = { fg = C.orange },
- TSConstBuiltin = { fg = C.orange },
+ TSConstBuiltin = { fg = C.red },
TSFloat = { fg = C.red },
TSNumber = { fg = C.red },
TSBoolean = { fg = C.red },
@@ -24,32 +24,32 @@ local Treesitter = {
TSFuncBuiltin = { fg = C.yellow },
TSMethod = { fg = C.yellow },
TSConstMacro = { fg = C.cyan },
- TSFuncMacro = { fg = C.cyan },
- TSVariable = { fg = C.white },
- TSVariableBuiltin = { fg = C.cyan },
- TSProperty = { fg = C.cyan },
- TSOperator = { fg = C.gray_blue },
- TSField = { fg = C.white },
- TSParameter = { fg = C.white },
- TSParameterReference = { fg = C.white },
- TSSymbol = { fg = C.white },
+ TSFuncMacro = { fg = C.yellow },
+ TSVariable = { fg = C.light_blue },
+ TSVariableBuiltin = { fg = C.light_blue },
+ TSProperty = { fg = C.light_blue },
+ TSOperator = { fg = C.gray },
+ TSField = { fg = C.light_blue },
+ TSParameter = { fg = C.light_blue },
+ TSParameterReference = { fg = C.light_blue },
+ TSSymbol = { fg = C.light_blue },
TSText = { fg = C.fg },
TSPunctDelimiter = { fg = C.gray },
TSTagDelimiter = { fg = C.gray },
TSPunctBracket = { fg = C.gray },
TSPunctSpecial = { fg = C.gray },
TSString = { fg = C.green },
- TSStringRegex = { fg = C.light_green },
- TSStringEscape = { fg = C.light_green },
+ TSStringRegex = { fg = C.yellow_orange },
+ TSStringEscape = { fg = C.yellow_orange },
TSTag = { fg = C.blue },
TSEmphasis = { style = "italic" },
TSUnderline = { style = "underline" },
TSTitle = { fg = C.blue, style = "bold" },
- TSLiteral = { fg = C.green },
- TSURI = { fg = C.cyan, style = "underline" },
+ TSLiteral = { fg = C.yellow_orange },
+ TSURI = { fg = C.yellow_orange, style = "underline" },
TSKeywordOperator = { fg = C.blue },
- TSStructure = { fg = C.purple_test },
- TSStrong = { fg = C.yellow },
+ TSStructure = { fg = C.light_blue },
+ TSStrong = { fg = C.yellow_orange },
TSQueryLinterError = { fg = C.warning_orange },
}
diff --git a/lua/spacegray/Whichkey.lua b/lua/spacegray/Whichkey.lua
index f382d784..5d1ae7ce 100644
--- a/lua/spacegray/Whichkey.lua
+++ b/lua/spacegray/Whichkey.lua
@@ -2,8 +2,8 @@ local Whichkey = {
WhichKey = { fg = C.purple },
WhichKeySeperator = { fg = C.green },
WhichKeyGroup = { fg = C.blue },
- WhichKeyDesc = { fg = C.cyan },
- WhichKeyFloat = { bg = C.alt_bg },
+ WhichKeyDesc = { fg = C.light_blue },
+ WhichKeyFloat = { bg = C.dark },
}
return Whichkey
diff --git a/lua/spacegray/highlights.lua b/lua/spacegray/highlights.lua
index e8700d8f..208c2c62 100644
--- a/lua/spacegray/highlights.lua
+++ b/lua/spacegray/highlights.lua
@@ -1,15 +1,15 @@
local highlights = {
Normal = { fg = C.fg, bg = Config.transparent_background and "NONE" or C.bg },
SignColumn = { bg = C.bg },
- MsgArea = { fg = C.fg, bg = C.bg },
+ MsgArea = { fg = C.fg, bg = Config.transparent_background and "NONE" or C.bg },
ModeMsg = { fg = C.fg, bg = C.bg },
MsgSeparator = { fg = C.fg, bg = C.bg },
SpellBad = { fg = C.error_red, style = "underline" },
SpellCap = { fg = C.yellow, style = "underline" },
SpellLocal = { fg = C.green, style = "underline" },
SpellRare = { fg = C.purple, style = "underline" },
- NormalNC = { fg = C.fg, bg = C.bg },
- Pmenu = { fg = C.white, bg = C.accent },
+ NormalNC = { fg = C.fg, bg = Config.transparent_background and "NONE" or C.bg },
+ Pmenu = { fg = C.light_gray, bg = C.popup_back },
PmenuSel = { fg = C.alt_bg, bg = C.blue },
WildMenu = { fg = C.alt_bg, bg = C.blue },
CursorLineNr = { fg = C.light_gray, style = "bold" },
@@ -17,24 +17,24 @@ local highlights = {
Folded = { fg = C.accent, bg = C.alt_bg },
FoldColumn = { fg = C.accent, bg = C.alt_bg },
LineNr = { fg = C.gray },
- FloatBorder = { fg = C.gray, bg = C.alt_bg },
- Whitespace = { fg = C.gray },
- VertSplit = { fg = C.bg, bg = C.accent },
- CursorLine = { bg = C.alt_bg },
- CursorColumn = { bg = C.alt_bg },
- ColorColumn = { bg = C.alt_bg },
- NormalFloat = { bg = C.alt_bg },
- Visual = { bg = C.alt_bg },
+ FloatBoder = { fg = C.gray, bg = C.alt_bg },
+ Whitespace = { fg = C.bg },
+ VertSplit = { fg = C.bg, bg = C.fg },
+ CursorLine = { bg = C.dark },
+ CursorColumn = { bg = C.dark },
+ ColorColumn = { bg = C.dark },
+ NormalFloat = { bg = C.dark },
+ Visual = { bg = C.ui_blue },
VisualNOS = { bg = C.alt_bg },
- WarningMsg = { fg = C.warning_orange, bg = C.bg },
+ WarningMsg = { fg = C.error_red, bg = C.bg },
DiffAdd = { fg = C.alt_bg, bg = C.sign_add },
DiffChange = { fg = C.alt_bg, bg = C.sign_change, style = "underline" },
DiffDelete = { fg = C.alt_bg, bg = C.sign_delete },
QuickFixLine = { bg = C.accent },
PmenuSbar = { bg = C.alt_bg },
- PmenuThumb = { bg = C.white },
+ PmenuThumb = { bg = C.gray },
MatchWord = { style = "underline" },
- MatchParen = { fg = C.pale_purple, bg = C.bg, style = "underline" },
+ MatchParen = { fg = C.hint_blue, bg = C.bg, style = "underline" },
MatchWordCur = { style = "underline" },
MatchParenCur = { style = "underline" },
Cursor = { fg = C.cursor_fg, bg = C.cursor_bg },
@@ -47,23 +47,23 @@ local highlights = {
SpecialKey = { fg = C.blue, style = "bold" },
Title = { fg = C.blue, style = "bold" },
ErrorMsg = { fg = C.error_red, bg = C.bg, style = "bold" },
- Search = { fg = C.hint_blue, bg = C.alt_bg },
- IncSearch = { fg = C.hint_blue, bg = C.alt_bg },
- Substitute = { fg = C.alt_bg, bg = C.gray_blue },
- MoreMsg = { fg = C.cyan },
- Question = { fg = C.cyan },
+ Search = { fg = C.light_gray, bg = C.search_blue },
+ IncSearch = { fg = C.light_gray, bg = C.search_blue },
+ Substitute = { fg = C.light_gray, bg = C.search_orange },
+ MoreMsg = { fg = C.orange },
+ Question = { fg = C.orange },
EndOfBuffer = { fg = C.bg },
NonText = { fg = C.bg },
- Variable = { fg = C.white },
+ Variable = { fg = C.light_blue },
String = { fg = C.green },
Character = { fg = C.light_green },
- Constant = { fg = C.orange },
+ Constant = { fg = C.blue },
Number = { fg = C.red },
Boolean = { fg = C.red },
Float = { fg = C.red },
- Identifier = { fg = C.white },
+ Identifier = { fg = C.light_blue },
Function = { fg = C.yellow },
- Operator = { fg = C.gray_blue },
+ Operator = { fg = C.gray },
Type = { fg = C.purple },
StorageClass = { fg = C.purple },
Structure = { fg = C.purple },
@@ -75,12 +75,12 @@ local highlights = {
Label = { fg = C.blue },
Exception = { fg = C.blue },
Include = { fg = C.blue },
- PreProc = { fg = C.cyan },
- Define = { fg = C.cyan },
- Macro = { fg = C.cyan },
- PreCondit = { fg = C.cyan },
+ PreProc = { fg = C.purple },
+ Define = { fg = C.purple },
+ Macro = { fg = C.purple },
+ PreCondit = { fg = C.purple },
Special = { fg = C.orange },
- SpecialChar = { fg = C.orange },
+ SpecialChar = { fg = C.white },
Tag = { fg = C.blue },
Debug = { fg = C.red },
Delimiter = { fg = C.gray },
@@ -91,7 +91,7 @@ local highlights = {
Ignore = { fg = C.cyan, bg = C.bg, style = "bold" },
Todo = { fg = C.red, bg = C.bg, style = "bold" },
Error = { fg = C.error_red, bg = C.bg, style = "bold" },
- TabLine = { fg = C.white, bg = C.alt_bg },
+ TabLine = { fg = C.light_gray, bg = C.alt_bg },
TabLineSel = { fg = C.white, bg = C.alt_bg },
TabLineFill = { fg = C.white, bg = C.alt_bg },
}
diff --git a/lua/spacegray/init.lua b/lua/spacegray/init.lua
index 8da13a06..9ae24dbb 100644
--- a/lua/spacegray/init.lua
+++ b/lua/spacegray/init.lua
@@ -9,6 +9,17 @@ vim.g.colors_name = "spacegray"
local util = require "spacegray.util"
Config = require "spacegray.config"
C = require "spacegray.palette"
+
+local async
+async = vim.loop.new_async(vim.schedule_wrap(function()
+ local skeletons = {}
+ for _, skeleton in ipairs(skeletons) do
+ util.initialise(skeleton)
+ end
+
+ async:close()
+end))
+
local highlights = require "spacegray.highlights"
local Treesitter = require "spacegray.Treesitter"
local markdown = require "spacegray.markdown"
@@ -28,3 +39,5 @@ local skeletons = {
for _, skeleton in ipairs(skeletons) do
util.initialise(skeleton)
end
+
+async:send()
diff --git a/lua/spacegray/palette.lua b/lua/spacegray/palette.lua
index 49e429e5..924482fd 100644
--- a/lua/spacegray/palette.lua
+++ b/lua/spacegray/palette.lua
@@ -1,21 +1,27 @@
local colors = {
- fg = "#c8c9d1",
- bg = "#212121",
- alt_bg = "#2a2a2a",
- accent = "#383d45",
- white = "#c8c9d1",
- gray = "#858585",
+ fg = "#ABB2BF",
+ bg = "#202020",
+ alt_bg = "#262626",
+ dark = "#222222",
+ accent = "#AAAAAA",
+ popup_back = "#2D2D30",
+ search_orange = "#613214",
+ search_blue = "#5e81ac",
+ white = "#D8DEE9",
+ gray = "#9BA1AB",
light_gray = "#c8c9c1",
- blue = "#5486c0",
- gray_blue = "#66899d",
- cyan = "#65a7c5",
- red = "#b04b57",
- green = "#87b379",
- light_green = "#b2d77c",
- yellow = "#eeba5a",
- orange = "#c6735a",
- purple = "#bf83c1",
- pale_purple = "#7199ee",
+ blue = "#5f8ccd",
+ dark_blue = "#223E55",
+ light_blue = "#8dc0d5",
+ green = "#83ba8b",
+ cyan = "#4EC9B0",
+ light_green = "#B5CEA8",
+ red = "#D16969",
+ orange = "#D1866B",
+ light_red = "#CA535F",
+ yellow = "#ECCC8E",
+ yellow_orange = "#D7BA7D",
+ purple = "#BF82B4",
magenta = "#D16D9E",
cursor_fg = "#515052",
cursor_bg = "#AEAFAD",
@@ -26,8 +32,9 @@ local colors = {
warning_orange = "#ff8800",
info_yellow = "#FFCC66",
hint_blue = "#4FC1FF",
- purple_test = "#ff00ff",
- cyan_test = "#00ffff",
+ purple_test = "#ff007c",
+ cyan_test = "#00dfff",
+ ui_blue = "#264F78",
}
return colors
diff --git a/lua/utils/ft.lua b/lua/utils/ft.lua
new file mode 100644
index 00000000..e9852e6f
--- /dev/null
+++ b/lua/utils/ft.lua
@@ -0,0 +1,47 @@
+-- Here be dragons
+-- Opening files with telescope will not start LSP without this
+local ft = {}
+
+ft.find_lua_ftplugins = function(filetype)
+ local patterns = {
+ string.format("ftplugin/%s.lua", filetype),
+
+ -- Looks like we don't need this, because the first one works
+ -- string.format("after/ftplugin/%s.lua", filetype),
+ }
+
+ local result = {}
+ for _, pat in ipairs(patterns) do
+ vim.list_extend(result, vim.api.nvim_get_runtime_file(pat, true))
+ end
+
+ return result
+end
+
+ft.do_filetype = function(filetype)
+ local ftplugins = ft.find_lua_ftplugins(filetype)
+
+ local f_env = setmetatable({
+ -- Override print, so the prints still go through, otherwise it's confusing for people
+ print = vim.schedule_wrap(print),
+ }, {
+ -- Buf default back read/write to whatever is going on in the global landscape
+ __index = _G,
+ __newindex = _G,
+ })
+
+ for _, file in ipairs(ftplugins) do
+ local f = loadfile(file)
+ if not f then
+ vim.api.nvim_err_writeln("Unable to load file: " .. file)
+ else
+ local ok, msg = pcall(setfenv(f, f_env))
+
+ if not ok then
+ vim.api.nvim_err_writeln("Error while processing file: " .. file .. "\n" .. msg)
+ end
+ end
+ end
+end
+
+return ft
diff --git a/lua/utils/init.lua b/lua/utils/init.lua
index fe1e09aa..8264189d 100644
--- a/lua/utils/init.lua
+++ b/lua/utils/init.lua
@@ -1,4 +1,6 @@
local utils = {}
+local Log = require "core.log"
+local uv = vim.loop
-- recursive Print (structure, limit, separator)
local function r_inspect_settings(structure, limit, separator)
@@ -16,7 +18,7 @@ local function r_inspect_settings(structure, limit, separator)
if ts == "table" then
for k, v in pairs(structure) do
- -- replace non alpha keys wih ["key"]
+ -- replace non alpha keys with ["key"]
if tostring(k):match "[^%a_]" then
k = '["' .. tostring(k) .. '"]'
end
@@ -68,6 +70,9 @@ function utils.toggle_autoformat()
},
},
}
+ if Log:get_default() then
+ Log:get_default().info "Format on save active"
+ end
end
if not lvim.format_on_save then
@@ -76,12 +81,16 @@ function utils.toggle_autoformat()
:autocmd! autoformat
endif
]]
+ if Log:get_default() then
+ Log:get_default().info "Format on save off"
+ end
end
end
function utils.reload_lv_config()
vim.cmd "source ~/.local/share/lunarvim/lvim/lua/settings.lua"
- vim.cmd "source ~/.config/lvim/lv-config.lua"
+ vim.cmd("source " .. USER_CONFIG_PATH)
+ require("keymappings").setup() -- this should be done before loading the plugins
vim.cmd "source ~/.local/share/lunarvim/lvim/lua/plugins.lua"
local plugins = require "plugins"
local plugin_loader = require("plugin-loader").init()
@@ -90,6 +99,7 @@ function utils.reload_lv_config()
vim.cmd ":PackerCompile"
vim.cmd ":PackerInstall"
-- vim.cmd ":PackerClean"
+ Log:get_default().info "Reloaded configuration"
end
function utils.check_lsp_client_active(name)
@@ -102,48 +112,42 @@ function utils.check_lsp_client_active(name)
return false
end
-function utils.is_table(t)
- return type(t) == "table"
+function utils.get_active_client_by_ft(filetype)
+ local clients = vim.lsp.get_active_clients()
+ for _, client in pairs(clients) do
+ if client.name == lvim.lang[filetype].lsp.provider then
+ return client
+ end
+ end
+ return nil
end
-function utils.is_string(t)
- return type(t) == "string"
-end
+-- TODO: consider porting this logic to null-ls instead
+function utils.get_supported_linters_by_filetype(filetype)
+ local null_ls = require "null-ls"
+ local matches = {}
+ for _, provider in pairs(null_ls.builtins.diagnostics) do
+ if vim.tbl_contains(provider.filetypes, filetype) then
+ local provider_name = provider.name
-function utils.has_value(tab, val)
- for _, value in ipairs(tab) do
- if value == val then
- return true
+ table.insert(matches, provider_name)
end
end
- return false
+ return matches
end
-function utils.add_keymap(mode, opts, keymaps)
- for _, keymap in ipairs(keymaps) do
- vim.api.nvim_set_keymap(mode, keymap[1], keymap[2], opts)
+function utils.get_supported_formatters_by_filetype(filetype)
+ local null_ls = require "null-ls"
+ local matches = {}
+ for _, provider in pairs(null_ls.builtins.formatting) do
+ if provider.filetypes and vim.tbl_contains(provider.filetypes, filetype) then
+ -- table.insert(matches, { provider.name, ft })
+ table.insert(matches, provider.name)
+ end
end
-end
-function utils.add_keymap_normal_mode(opts, keymaps)
- utils.add_keymap("n", opts, keymaps)
-end
-
-function utils.add_keymap_visual_mode(opts, keymaps)
- utils.add_keymap("v", opts, keymaps)
-end
-
-function utils.add_keymap_visual_block_mode(opts, keymaps)
- utils.add_keymap("x", opts, keymaps)
-end
-
-function utils.add_keymap_insert_mode(opts, keymaps)
- utils.add_keymap("i", opts, keymaps)
-end
-
-function utils.add_keymap_term_mode(opts, keymaps)
- utils.add_keymap("t", opts, keymaps)
+ return matches
end
function utils.unrequire(m)
@@ -162,6 +166,14 @@ function utils.gsub_args(args)
return args
end
+--- Checks whether a given path exists and is a file.
+--@param filename (string) path to check
+--@returns (bool)
+function utils.is_file(filename)
+ local stat = uv.fs_stat(filename)
+ return stat and stat.type == "file" or false
+end
+
return utils
-- TODO: find a new home for these autocommands
diff --git a/utils/bin/lvim b/utils/bin/lvim
index 0ef96a90..b94d544f 100755
--- a/utils/bin/lvim
+++ b/utils/bin/lvim
@@ -1,3 +1,3 @@
#!/bin/sh
-nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" "$@"
+exec nvim -u ~/.local/share/lunarvim/lvim/init.lua --cmd "set runtimepath+=~/.local/share/lunarvim/lvim" "$@"
diff --git a/utils/docker/Dockerfile b/utils/docker/Dockerfile
new file mode 100644
index 00000000..58760001
--- /dev/null
+++ b/utils/docker/Dockerfile
@@ -0,0 +1,11 @@
+FROM python:3
+
+SHELL ["/bin/bash", "-c"]
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+COPY script.sh /tmp/script.sh
+
+RUN bash -c "/tmp/script.sh"
+
+ENTRYPOINT ["/bin/bash"]
diff --git a/utils/docker/script.sh b/utils/docker/script.sh
new file mode 100755
index 00000000..35257147
--- /dev/null
+++ b/utils/docker/script.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Updating the package list
+apt-get update
+
+# Installing dependencies
+apt-get -y install tzdata sudo git nodejs npm git ripgrep fzf ranger curl fonts-hack-ttf
+
+pip3 install ueberzug neovim-remote
+npm install tree-sitter-cli neovim
+
+# Installing Neovim
+mkdir -p /tmp/neovim
+cd /tmp/neovim || exit
+curl -L -o nvim.appimage https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage
+chmod u+x nvim.appimage
+./nvim.appimage --appimage-extract
+mv squashfs-root /usr/local/neovim
+ln -s /usr/local/neovim/usr/bin/nvim /usr/bin/nvim
+rm ./nvim.appimage
+
+# Installing LunarVim
+LVBRANCH=master bash <(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/rolling/utils/installer/install.sh)
diff --git a/utils/installer/lv-config.example-no-ts.lua b/utils/installer/config.example-no-ts.lua
index ab12309d..4303d264 100644
--- a/utils/installer/lv-config.example-no-ts.lua
+++ b/utils/installer/config.example-no-ts.lua
@@ -5,25 +5,26 @@ lvim.format_on_save = true
lvim.lint_on_save = true
lvim.colorscheme = "spacegray"
--- keymappings
+-- keymappings [view all the defaults by pressing <leader>Lk]
lvim.leader = "space"
--- overwrite the key-mappings provided by LunarVim for any mode, or leave it empty to keep them
--- lvim.keys.normal_mode = {
--- Page down/up
--- {'[d', '<PageUp>'},
--- {']d', '<PageDown>'},
---
--- Navigate buffers
--- {'<Tab>', ':bnext<CR>'},
--- {'<S-Tab>', ':bprevious<CR>'},
+-- add your own keymapping
+lvim.keys.normal_mode["<C-s>"] = ":w<cr>"
+-- unmap a default keymapping
+-- lvim.keys.normal_mode["<C-Up>"] = ""
+-- edit a default keymapping
+-- lvim.keys.normal_mode["<C-q>"] = ":q<cr>"
+
+-- 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["t"] = {
+-- name = "+Trouble",
+-- r = { "<cmd>Trouble lsp_references<cr>", "References" },
+-- f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
+-- d = { "<cmd>Trouble lsp_document_diagnostics<cr>", "Diagnosticss" },
+-- q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
+-- l = { "<cmd>Trouble loclist<cr>", "LocationList" },
+-- w = { "<cmd>Trouble lsp_workspace_diagnostics<cr>", "Diagnosticss" },
-- }
--- if you just want to augment the existing ones then use the utility function
--- require("utils").add_keymap_insert_mode({ silent = true }, {
--- { "<C-s>", ":w<cr>" },
--- { "<C-c>", "<ESC>" },
--- })
--- you can also use the native vim way directly
--- vim.api.nvim_set_keymap("i", "<C-Space>", "compe#complete()", { noremap = true, silent = true, expr = true })
-- TODO: User Config for predefined plugins
-- After changing plugin config exit and reopen LunarVim, Run :PackerInstall :PackerCompile
@@ -48,6 +49,21 @@ lvim.builtin.treesitter.highlight.enabled = true
-- buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")
-- end
+-- set a formatter if you want to override the default lsp one (if it exists)
+-- lvim.lang.python.formatters = {
+-- {
+-- exe = "black",
+-- args = {}
+-- }
+-- }
+-- set an additional linter
+-- lvim.lang.python.linters = {
+-- {
+-- exe = "flake8",
+-- args = {}
+-- }
+-- }
+
-- Additional Plugins
-- lvim.plugins = {
-- {"folke/tokyonight.nvim"}, {
@@ -61,5 +77,3 @@ lvim.builtin.treesitter.highlight.enabled = true
-- lvim.autocommands.custom_groups = {
-- { "BufWinEnter", "*.lua", "setlocal ts=8 sw=8" },
-- }
-
--- Additional Leader bindings for WhichKey
diff --git a/utils/installer/lv-config.example.lua b/utils/installer/config.example.lua
index 681f5f65..0aee0275 100644
--- a/utils/installer/lv-config.example.lua
+++ b/utils/installer/config.example.lua
@@ -9,29 +9,31 @@ an executable
-- THESE ARE EXAMPLE CONFIGS FEEL FREE TO CHANGE TO WHATEVER YOU WANT
-- general
-
+lvim.log.level = "warn"
lvim.format_on_save = true
lvim.lint_on_save = true
lvim.colorscheme = "spacegray"
--- keymappings
+
+-- keymappings [view all the defaults by pressing <leader>Lk]
lvim.leader = "space"
--- overwrite the key-mappings provided by LunarVim for any mode, or leave it empty to keep them
--- lvim.keys.normal_mode = {
--- Page down/up
--- {'[d', '<PageUp>'},
--- {']d', '<PageDown>'},
---
--- Navigate buffers
--- {'<Tab>', ':bnext<CR>'},
--- {'<S-Tab>', ':bprevious<CR>'},
+-- add your own keymapping
+lvim.keys.normal_mode["<C-s>"] = ":w<cr>"
+-- unmap a default keymapping
+-- lvim.keys.normal_mode["<C-Up>"] = ""
+-- edit a default keymapping
+-- lvim.keys.normal_mode["<C-q>"] = ":q<cr>"
+
+-- 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["t"] = {
+-- name = "+Trouble",
+-- r = { "<cmd>Trouble lsp_references<cr>", "References" },
+-- f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
+-- d = { "<cmd>Trouble lsp_document_diagnostics<cr>", "Diagnosticss" },
+-- q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
+-- l = { "<cmd>Trouble loclist<cr>", "LocationList" },
+-- w = { "<cmd>Trouble lsp_workspace_diagnostics<cr>", "Diagnosticss" },
-- }
--- if you just want to augment the existing ones then use the utility function
--- require("utils").add_keymap_insert_mode({ silent = true }, {
--- { "<C-s>", ":w<cr>" },
--- { "<C-c>", "<ESC>" },
--- })
--- you can also use the native vim way directly
--- vim.api.nvim_set_keymap("i", "<C-Space>", "compe#complete()", { noremap = true, silent = true, expr = true })
-- TODO: User Config for predefined plugins
-- After changing plugin config exit and reopen LunarVim, Run :PackerInstall :PackerCompile
@@ -56,7 +58,20 @@ lvim.builtin.treesitter.highlight.enabled = true
-- buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")
-- end
--- python
+-- set a formatter if you want to override the default lsp one (if it exists)
+-- lvim.lang.python.formatters = {
+-- {
+-- exe = "black",
+-- args = {}
+-- }
+-- }
+-- set an additional linter
+-- lvim.lang.python.linters = {
+-- {
+-- exe = "flake8",
+-- args = {}
+-- }
+-- }
-- Additional Plugins
-- lvim.plugins = {
@@ -71,15 +86,3 @@ lvim.builtin.treesitter.highlight.enabled = true
-- lvim.autocommands.custom_groups = {
-- { "BufWinEnter", "*.lua", "setlocal ts=8 sw=8" },
-- }
-
--- Additional Leader bindings for WhichKey
--- lvim.builtin.which_key.mappings["P"] = { "<cmd>lua require'telescope'.extensions.project.project{}<CR>", "Projects" }
--- lvim.builtin.which_key.mappings["t"] = {
--- name = "+Trouble",
--- r = { "<cmd>Trouble lsp_references<cr>", "References" },
--- f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
--- d = { "<cmd>Trouble lsp_document_diagnostics<cr>", "Diagnosticss" },
--- q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
--- l = { "<cmd>Trouble loclist<cr>", "LocationList" },
--- w = { "<cmd>Trouble lsp_workspace_diagnostics<cr>", "Diagnosticss" },
--- }
diff --git a/utils/installer/install.sh b/utils/installer/install.sh
index 5778fb3a..25b67f12 100755
--- a/utils/installer/install.sh
+++ b/utils/installer/install.sh
@@ -1,6 +1,7 @@
#!/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
@@ -15,6 +16,10 @@ installnodeubuntu() {
sudo apt install npm
}
+installnodetermux() {
+ apt install nodejs
+}
+
moveoldlvim() {
echo "Not installing LunarVim"
echo "Please move your ~/.local/share/lunarvim folder before installing"
@@ -49,6 +54,7 @@ installnode() {
[ -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
}
@@ -63,6 +69,10 @@ installpiponubuntu() {
sudo apt install python3-pip >/dev/null
}
+installpipontermux() {
+ apt install python
+}
+
installpiponarch() {
sudo pacman -S python-pip
}
@@ -82,6 +92,7 @@ installpip() {
[ -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"
}
@@ -100,6 +111,12 @@ installpacker() {
}
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
@@ -108,12 +125,13 @@ cloneconfig() {
cp -r "$(pwd)" ~/.local/share/lunarvim/lvim
;;
*)
- git clone --branch "$LVBRANCH" https://github.com/ChristianChiarulli/lunarvim.git ~/.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" "/usr/local/bin"
- cp "$HOME/.local/share/lunarvim/lvim/utils/installer/lv-config.example-no-ts.lua" "$HOME/.config/lvim/lv-config.lua"
+ 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' \
@@ -126,9 +144,9 @@ cloneconfig() {
printf "\nCompile Complete\n"
if [ -e "$HOME/.local/share/lunarvim/lvim/init.lua" ]; then
- echo 'lv-config already present'
+ echo 'config.lua already present'
else
- cp "$HOME/.local/share/lunarvim/lvim/utils/installer/lv-config.example.lua" "$HOME/.config/lvim/lv-config.lua"
+ cp "$HOME/.local/share/lunarvim/lvim/utils/installer/config.example.lua" "$HOME/.config/lvim/config.lua"
fi
}
@@ -140,6 +158,11 @@ asktoinstallnode() {
[ "$answer" != "${answer#[Yy]}" ] && installnode
}
+asktoinstallgit() {
+ echo "git not found, please install git"
+ exit
+}
+
asktoinstallpip() {
# echo "pip not found"
# echo -n "Would you like to install pip now (y/n)? "
@@ -161,6 +184,12 @@ installonubuntu() {
npm install -g tree-sitter-cli
}
+installtermux() {
+ apt install ripgrep fzf
+ pip install neovim-remote
+ npm install -g tree-sitter-cli
+}
+
installonarch() {
sudo pacman -S ripgrep fzf
pip3 install neovim-remote
@@ -184,6 +213,7 @@ installextrapackages() {
[ -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"
}
@@ -202,6 +232,9 @@ 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
diff --git a/utils/installer/install_stylua.sh b/utils/installer/install_stylua.sh
index cd8b3942..2a33de7e 100755
--- a/utils/installer/install_stylua.sh
+++ b/utils/installer/install_stylua.sh
@@ -30,7 +30,7 @@ function download_stylua() {
exit 1
fi
- echo "Installtion in progress.."
+ echo "Installation in progress.."
unzip -q "$DOWNLOAD_DIR/$FILENAME.zip" -d "$DOWNLOAD_DIR"
if [ -f "$DOWNLOAD_DIR/stylua" ]; then
@@ -43,7 +43,7 @@ function download_stylua() {
}
function verify_install() {
- echo "Verifying installtion.."
+ echo "Verifying installation.."
local DOWNLOADED_VER
DOWNLOADED_VER="$("$INSTALL_DIR/stylua" -V | awk '{ print $2 }')"
if [ "$DOWNLOADED_VER" != "$RELEASE" ]; then
diff --git a/utils/installer/uninstall.sh b/utils/installer/uninstall.sh
index 0615e219..b9a27252 100755
--- a/utils/installer/uninstall.sh
+++ b/utils/installer/uninstall.sh
@@ -1,5 +1,11 @@
#!/bin/sh
-
+USER_BIN_DIR="/usr/local/bin"
+if [ -d "/data/data/com.termux" ]; then
+ sudo() {
+ eval "$@"
+ }
+ USER_BIN_DIR="$HOME/../usr/bin"
+fi
rm -rf ~/.local/share/lunarvim
-sudo rm /usr/local/bin/lvim
+sudo rm "$USER_BIN_DIR"/lvim
rm -rf ~/.local/share/applications/lvim.desktop
diff --git a/utils/lush-template/lua/lush_theme/lush_template.lua b/utils/lush-template/lua/lush_theme/lush_template.lua
index 26b04d8b..75d9ed7e 100644
--- a/utils/lush-template/lua/lush_theme/lush_template.lua
+++ b/utils/lush-template/lua/lush_theme/lush_template.lua
@@ -43,7 +43,6 @@
-- `:lua require('lush').ify()`
local lush = require "lush"
-local hsl = lush.hsl
local theme = lush(function()
return {