Преглед изворни кода

New contract (#1080)

Changes to the global config object

O is now lvim
user_plugins is now plugins
user_autocommands is now autocommands
No more lang specific plugins

Null-ls has replaced both formatter.nvim and nvim-lint
Christian Chiarulli пре 4 година
родитељ
комит
98f8a77819
100 измењених фајлова са 848 додато и 3070 уклоњено
  1. 5 15
      README.md
  2. 4 4
      ftplugin/c.lua
  3. 1 4
      ftplugin/clojure.lua
  4. 1 4
      ftplugin/cmake.lua
  5. 0 1
      ftplugin/cpp.lua
  6. 1 0
      ftplugin/cpp.lua
  7. 1 4
      ftplugin/cs.lua
  8. 1 4
      ftplugin/css.lua
  9. 1 4
      ftplugin/dart.lua
  10. 1 4
      ftplugin/dockerfile.lua
  11. 9 4
      ftplugin/elixir.lua
  12. 1 4
      ftplugin/elm.lua
  13. 1 4
      ftplugin/erlang.lua
  14. 9 4
      ftplugin/euphoria3.lua
  15. 1 4
      ftplugin/fish.lua
  16. 1 4
      ftplugin/go.lua
  17. 1 4
      ftplugin/graphql.lua
  18. 1 4
      ftplugin/html.lua
  19. 1 4
      ftplugin/java.lua
  20. 1 1
      ftplugin/javascript.lua
  21. 1 3
      ftplugin/javascriptreact.lua
  22. 1 4
      ftplugin/json.lua
  23. 1 4
      ftplugin/julia.lua
  24. 1 4
      ftplugin/kotlin.lua
  25. 1 4
      ftplugin/lua.lua
  26. 1 4
      ftplugin/php.lua
  27. 3 4
      ftplugin/python.lua
  28. 2 4
      ftplugin/r.lua
  29. 2 4
      ftplugin/ruby.lua
  30. 4 4
      ftplugin/rust.lua
  31. 1 4
      ftplugin/scala.lua
  32. 1 4
      ftplugin/sh.lua
  33. 1 4
      ftplugin/svelte.lua
  34. 1 4
      ftplugin/swift.lua
  35. 1 4
      ftplugin/tex.lua
  36. 1 4
      ftplugin/tf.lua
  37. 1 3
      ftplugin/typescript.lua
  38. 1 3
      ftplugin/typescriptreact.lua
  39. 1 4
      ftplugin/vim.lua
  40. 1 4
      ftplugin/vue.lua
  41. 1 4
      ftplugin/yaml.lua
  42. 1 4
      ftplugin/zig.lua
  43. 1 4
      ftplugin/zsh.lua
  44. 24 9
      init.lua
  45. 1 1
      lua/core/bufferline.lua
  46. 3 3
      lua/core/compe.lua
  47. 20 3
      lua/core/dap.lua
  48. 7 7
      lua/core/dashboard.lua
  49. 0 60
      lua/core/formatter.lua
  50. 2 2
      lua/core/galaxyline.lua
  51. 2 2
      lua/core/gitsigns.lua
  52. 0 33
      lua/core/linter.lua
  53. 2 2
      lua/core/nvimtree.lua
  54. 1 1
      lua/core/status_colors.lua
  55. 2 2
      lua/core/telescope.lua
  56. 3 3
      lua/core/terminal.lua
  57. 2 116
      lua/core/treesitter.lua
  58. 10 20
      lua/core/which-key.lua
  59. 0 34
      lua/core/zen.lua
  60. 693 166
      lua/default-config.lua
  61. 4 4
      lua/keymappings.lua
  62. 0 159
      lua/lang/clang.lua
  63. 0 37
      lua/lang/clojure.lua
  64. 0 42
      lua/lang/cmake.lua
  65. 0 38
      lua/lang/cs.lua
  66. 0 77
      lua/lang/css.lua
  67. 0 59
      lua/lang/dart.lua
  68. 0 39
      lua/lang/dockerfile.lua
  69. 0 61
      lua/lang/elixir.lua
  70. 0 48
      lua/lang/elm.lua
  71. 0 32
      lua/lang/erlang.lua
  72. 0 42
      lua/lang/euphoria3.lua
  73. 0 28
      lua/lang/fish.lua
  74. 0 60
      lua/lang/go.lua
  75. 0 38
      lua/lang/graphql.lua
  76. 0 50
      lua/lang/html.lua
  77. 0 127
      lua/lang/java.lua
  78. 0 25
      lua/lang/javascript.lua
  79. 0 25
      lua/lang/javascriptreact.lua
  80. 0 72
      lua/lang/json.lua
  81. 0 53
      lua/lang/julia.lua
  82. 0 67
      lua/lang/kotlin.lua
  83. 0 25
      lua/lang/less.lua
  84. 0 87
      lua/lang/lua.lua
  85. 0 88
      lua/lang/php.lua
  86. 0 95
      lua/lang/python.lua
  87. 0 56
      lua/lang/r.lua
  88. 0 77
      lua/lang/ruby.lua
  89. 0 155
      lua/lang/rust.lua
  90. 0 80
      lua/lang/scala.lua
  91. 0 65
      lua/lang/sh.lua
  92. 0 39
      lua/lang/svelte.lua
  93. 0 55
      lua/lang/swift.lua
  94. 0 57
      lua/lang/terraform.lua
  95. 0 159
      lua/lang/tex.lua
  96. 0 25
      lua/lang/typescript.lua
  97. 0 25
      lua/lang/typescriptreact.lua
  98. 0 40
      lua/lang/vim.lua
  99. 0 71
      lua/lang/vue.lua
  100. 0 54
      lua/lang/yaml.lua

+ 5 - 15
README.md

@@ -77,12 +77,10 @@ Example:
 -- O.format_on_save = false -- to disbale formatting on save
 -- O.lint_on_save = false -- to disable formatting on save
 O.completion.autocomplete = true
-O.default_options.relativenumber = true
 O.colorscheme = 'spacegray'
-O.default_options.timeoutlen = 100
 
 -- keymappings 
-O.keys.leader_key = "space"
+O.leader = "space"
 -- overwrite the key-mappings provided by LunarVim for any mode, or leave it empty to keep them
 O.keys.normal_mode = {
     -- Page down/up
@@ -101,7 +99,6 @@ vim.api.nvim_set_keymap("i", "<C-Space>", "compe#complete()", { noremap = true,
 -- After changing plugin config it is recommended to run :PackerCompile
 O.plugin.dashboard.active = true
 O.plugin.terminal.active = true
-O.plugin.zen.active = true
 
 -- if you don't want all the parsers change this to a table of the ones you want
 O.treesitter.ensure_installed = "all"
@@ -142,7 +139,7 @@ O.lang.python.analysis.use_library_code_types = true
 -- O.lang.formatter.go.exe = "goimports"
 
 -- Additional Plugins
--- O.user_plugins = {
+-- O.plugins = {
 --   {"folke/tokyonight.nvim"},
 --   {
 --     "ray-x/lsp_signature.nvim",
@@ -156,16 +153,9 @@ O.lang.python.analysis.use_library_code_types = true
 -- }
 
 -- Autocommands (https://neovim.io/doc/user/autocmd.html)
--- O.user_autocommands = {{ "BufWinEnter", "*", "echo \"hi again\""}}
-
--- Additional Leader bindings for WhichKey
--- O.user_which_key = {
---   A = {
---     name = "+Custom Leader Keys",
---     a = { "<cmd>echo 'first custom command'<cr>", "Description for a" },
---     b = { "<cmd>echo 'second custom command'<cr>", "Description for b" },
---   },
--- }
+-- O.autocommands = {{ "BufWinEnter", "*", "echo \"hi again\""}}
+
+-- TODO Additional Leader bindings for WhichKey
 
 -- To link your init.vim (until you find Lua replacements)
 -- vim.cmd('source ' .. CONFIG_PATH .. '/lua/lv-user/init.vim')

+ 4 - 4
ftplugin/c.lua

@@ -1,4 +1,4 @@
-require("lang.clang").format()
-require("lang.clang").lint()
-require("lang.clang").lsp()
-require("lang.clang").dap()
+require("lsp").setup "c"
+
+-- TODO get from dap
+-- require("lang.c").dap()

+ 1 - 4
ftplugin/clojure.lua

@@ -1,4 +1 @@
-require("lang.clojure").format()
-require("lang.clojure").lint()
-require("lang.clojure").lsp()
-require("lang.clojure").dap()
+require("lsp").setup "clojure"

+ 1 - 4
ftplugin/cmake.lua

@@ -1,4 +1 @@
-require("lang.cmake").format()
-require("lang.cmake").lint()
-require("lang.cmake").lsp()
-require("lang.cmake").dap()
+require("lsp").setup "cmake"

+ 0 - 1
ftplugin/cpp.lua

@@ -1 +0,0 @@
-c.lua

+ 1 - 0
ftplugin/cpp.lua

@@ -0,0 +1 @@
+require("lsp").setup "cpp"

+ 1 - 4
ftplugin/cs.lua

@@ -1,4 +1 @@
-require("lang.cs").format()
-require("lang.cs").lint()
-require("lang.cs").lsp()
-require("lang.cs").dap()
+require("lsp").setup "csharp"

+ 1 - 4
ftplugin/css.lua

@@ -1,4 +1 @@
-require("lang.css").format()
-require("lang.css").lint()
-require("lang.css").lsp()
-require("lang.css").dap()
+require("lsp").setup "css"

+ 1 - 4
ftplugin/dart.lua

@@ -1,4 +1 @@
-require("lang.dart").format()
-require("lang.dart").lint()
-require("lang.dart").lsp()
-require("lang.dart").dap()
+require("lsp").setup "dart"

+ 1 - 4
ftplugin/dockerfile.lua

@@ -1,4 +1 @@
-require("lang.dockerfile").format()
-require("lang.dockerfile").lint()
-require("lang.dockerfile").lsp()
-require("lang.dockerfile").dap()
+require("lsp").setup "docker"

+ 9 - 4
ftplugin/elixir.lua

@@ -1,4 +1,9 @@
-require("lang.elixir").format()
-require("lang.elixir").lint()
-require("lang.elixir").lsp()
-require("lang.elixir").dap()
+require("lsp").setup "elixir"
+
+-- TODO: do we need this?
+-- needed for the LSP to recognize elixir files (alternativly 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
+--   au BufRead,BufNewFile mix.lock set filetype=elixir
+-- ]]

+ 1 - 4
ftplugin/elm.lua

@@ -1,4 +1 @@
-require("lang.elm").format()
-require("lang.elm").lint()
-require("lang.elm").lsp()
-require("lang.elm").dap()
+require("lsp").setup "elm"

+ 1 - 4
ftplugin/erlang.lua

@@ -1,4 +1 @@
-require("lang.erlang").format()
-require("lang.erlang").lint()
-require("lang.erlang").lsp()
-require("lang.erlang").dap()
+require("lsp").setup "erlang"

+ 9 - 4
ftplugin/euphoria3.lua

@@ -1,4 +1,9 @@
-require("lang.euphoria3").format()
-require("lang.euphoria3").lint()
-require("lang.euphoria3").lsp()
-require("lang.euphoria3").dap()
+require("lsp").setup "erlang"
+
+-- TODO: do we need this?
+-- needed for the LSP to recognize elixir files (alternativly 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
+--   au BufRead,BufNewFile mix.lock set filetype=elixir
+-- ]]

+ 1 - 4
ftplugin/fish.lua

@@ -1,4 +1 @@
-require("lang.fish").format()
-require("lang.fish").lint()
-require("lang.fish").lsp()
-require("lang.fish").dap()
+require("lsp").setup "fish"

+ 1 - 4
ftplugin/go.lua

@@ -1,4 +1 @@
-require("lang.go").format()
-require("lang.go").lint()
-require("lang.go").lsp()
-require("lang.go").dap()
+require("lsp").setup "go"

+ 1 - 4
ftplugin/graphql.lua

@@ -1,4 +1 @@
-require("lang.graphql").format()
-require("lang.graphql").lint()
-require("lang.graphql").lsp()
-require("lang.graphql").dap()
+require("lsp").setup "graphql"

+ 1 - 4
ftplugin/html.lua

@@ -1,4 +1 @@
-require("lang.html").format()
-require("lang.html").lint()
-require("lang.html").lsp()
-require("lang.html").dap()
+require("lsp").setup "html"

+ 1 - 4
ftplugin/java.lua

@@ -1,4 +1 @@
-require("lang.java").format()
-require("lang.java").lint()
-require("lang.java").lsp()
-require("lang.java").dap()
+require("lsp").setup "java"

+ 1 - 1
ftplugin/javascript.lua

@@ -1 +1 @@
-require "lsp.tsserver-ls"
+require("lsp").setup "javascript"

+ 1 - 3
ftplugin/javascriptreact.lua

@@ -1,3 +1 @@
-require "lsp.tsserver-ls"
-
-vim.cmd "setl ts=2 sw=2"
+require("lsp").setup "javascriptreact"

+ 1 - 4
ftplugin/json.lua

@@ -1,4 +1 @@
-require("lang.json").format()
-require("lang.json").lint()
-require("lang.json").lsp()
-require("lang.json").dap()
+require("lsp").setup "json"

+ 1 - 4
ftplugin/julia.lua

@@ -1,4 +1 @@
-require("lang.julia").format()
-require("lang.julia").lint()
-require("lang.julia").lsp()
-require("lang.julia").dap()
+require("lsp").setup "julia"

+ 1 - 4
ftplugin/kotlin.lua

@@ -1,4 +1 @@
-require("lang.kotlin").format()
-require("lang.kotlin").lint()
-require("lang.kotlin").lsp()
-require("lang.kotlin").dap()
+require("lsp").setup "kotlin"

+ 1 - 4
ftplugin/lua.lua

@@ -1,4 +1 @@
-require("lang.lua").format()
-require("lang.lua").lint()
-require("lang.lua").lsp()
-require("lang.lua").dap()
+require("lsp").setup "lua"

+ 1 - 4
ftplugin/php.lua

@@ -1,4 +1 @@
-require("lang.php").format()
-require("lang.php").lint()
-require("lang.php").lsp()
-require("lang.php").dap()
+require("lsp").setup "php"

+ 3 - 4
ftplugin/python.lua

@@ -1,4 +1,3 @@
-require("lang.python").format()
-require("lang.python").lint()
-require("lang.python").lsp()
-require("lang.python").dap()
+require("lsp").setup "python"
+-- TODO get from dap
+-- require("lang.python").dap()

+ 2 - 4
ftplugin/r.lua

@@ -1,4 +1,2 @@
-require("lang.r").format()
-require("lang.r").lint()
-require("lang.r").lsp()
-require("lang.r").dap()
+-- R -e 'install.packages("languageserver",repos = "http://cran.us.r-project.org")'
+require("lsp").setup "r"

+ 2 - 4
ftplugin/ruby.lua

@@ -1,4 +1,2 @@
-require("lang.ruby").format()
-require("lang.ruby").lint()
-require("lang.ruby").lsp()
-require("lang.ruby").dap()
+-- also support sorbet
+require("lsp").setup "ruby"

+ 4 - 4
ftplugin/rust.lua

@@ -1,4 +1,4 @@
-require("lang.rust").format()
-require("lang.rust").lint()
-require("lang.rust").lsp()
-require("lang.rust").dap()
+require("lsp").setup "rust"
+
+-- TODO get from dap
+-- require("lang.rust").dap()

+ 1 - 4
ftplugin/scala.lua

@@ -1,4 +1 @@
-require("lang.scala").format()
-require("lang.scala").lint()
-require("lang.scala").lsp()
-require("lang.scala").dap()
+require("lsp").setup "scala"

+ 1 - 4
ftplugin/sh.lua

@@ -1,4 +1 @@
-require("lang.sh").format()
-require("lang.sh").lint()
-require("lang.sh").lsp()
-require("lang.sh").dap()
+require("lsp").setup "sh"

+ 1 - 4
ftplugin/svelte.lua

@@ -1,4 +1 @@
-require("lang.svelte").format()
-require("lang.svelte").lint()
-require("lang.svelte").lsp()
-require("lang.svelte").dap()
+require("lsp").setup "svelte"

+ 1 - 4
ftplugin/swift.lua

@@ -1,4 +1 @@
-require("lang.swift").format()
-require("lang.swift").lint()
-require("lang.swift").lsp()
-require("lang.swift").dap()
+require("lsp").setup "swift"

+ 1 - 4
ftplugin/tex.lua

@@ -1,4 +1 @@
-require("lang.tex").format()
-require("lang.tex").lint()
-require("lang.tex").lsp()
-require("lang.tex").dap()
+require("lsp").setup "tex"

+ 1 - 4
ftplugin/tf.lua

@@ -1,4 +1 @@
-require("lang.terraform").format()
-require("lang.terraform").lint()
-require("lang.terraform").lsp()
-require("lang.terraform").dap()
+require("lsp").setup "terraform"

+ 1 - 3
ftplugin/typescript.lua

@@ -1,3 +1 @@
-require "lsp.tsserver-ls"
-
-vim.cmd "setl ts=2 sw=2"
+require("lsp").setup "typescript"

+ 1 - 3
ftplugin/typescriptreact.lua

@@ -1,3 +1 @@
-require "lsp.tsserver-ls"
-
-vim.cmd "setl ts=2 sw=2"
+require("lsp").setup "typescript"

+ 1 - 4
ftplugin/vim.lua

@@ -1,4 +1 @@
-require("lang.vim").format()
-require("lang.vim").lint()
-require("lang.vim").lsp()
-require("lang.vim").dap()
+require("lsp").setup "vim"

+ 1 - 4
ftplugin/vue.lua

@@ -1,4 +1 @@
-require("lang.vue").format()
-require("lang.vue").lint()
-require("lang.vue").lsp()
-require("lang.vue").dap()
+require("lsp").setup "vue"

+ 1 - 4
ftplugin/yaml.lua

@@ -1,4 +1 @@
-require("lang.yaml").format()
-require("lang.yaml").lint()
-require("lang.yaml").lsp()
-require("lang.yaml").dap()
+require("lsp").setup "yaml"

+ 1 - 4
ftplugin/zig.lua

@@ -1,4 +1 @@
-require("lang.zig").format()
-require("lang.zig").lint()
-require("lang.zig").lsp()
-require("lang.zig").dap()
+require("lsp").setup "zig"

+ 1 - 4
ftplugin/zsh.lua

@@ -1,4 +1 @@
-require("lang.zsh").format()
-require("lang.zsh").lint()
-require("lang.zsh").lsp()
-require("lang.zsh").dap()
+require("lsp").setup "sh"

+ 24 - 9
init.lua

@@ -7,10 +7,12 @@ vim.cmd [[
 
   set runtimepath-=~/.config/nvim
   set runtimepath-=~/.config/nvim/after
-  set runtimepath^=~/.config/lvim
+  set runtimepath+=~/.config/lvim
+  set runtimepath^=~/.local/share/lunarvim/lvim/after
 ]]
 -- vim.opt.rtp:append() instead of vim.cmd ?
 require "default-config"
+require "settings"
 local status_ok, error = pcall(vim.cmd, "luafile ~/.config/lvim/lv-config.lua")
 if not status_ok then
   print "something is wrong with your lv-config"
@@ -21,17 +23,30 @@ require "keymappings"
 
 local plugins = require "plugins"
 local plugin_loader = require("plugin-loader").init()
-plugin_loader:load { plugins, O.user_plugins }
-vim.g.colors_name = O.colorscheme -- Colorscheme must get called after plugins are loaded or it will break new installs.
-vim.cmd("colorscheme " .. O.colorscheme)
+plugin_loader:load { plugins, lvim.plugins }
+vim.g.colors_name = lvim.colorscheme -- Colorscheme must get called after plugins are loaded or it will break new installs.
+vim.cmd("colorscheme " .. lvim.colorscheme)
 
-require "settings"
-require "lv-utils"
+local utils = require "lv-utils"
+utils.toggle_autoformat()
+require("lsp").setup_handlers()
+
+local null_status_ok, null_ls = pcall(require, "null-ls")
+if null_status_ok then
+  null_ls.config {}
+  require("lspconfig")["null-ls"].setup {}
+end
+
+local lsp_settings_status_ok, lsp_settings = pcall(require, "nlspsettings")
+if lsp_settings_status_ok then
+  lsp_settings.setup {
+    config_home = os.getenv "HOME" .. "/.config/lvim/lsp-settings",
+  }
+end
 
 -- TODO: these guys need to be in language files
--- require "lsp"
--- if O.lang.emmet.active then
+-- if lvim.lang.emmet.active then
 --   require "lsp.emmet-ls"
 -- end
--- if O.lang.tailwindcss.active then
+-- if lvim.lang.tailwindcss.active then
 --   require "lsp.tailwind

+ 1 - 1
lua/core/bufferline.lua

@@ -3,7 +3,7 @@ vim.api.nvim_set_keymap("n", "<S-l>", ":BufferNext<CR>", { noremap = true, silen
 vim.api.nvim_set_keymap("n", "<S-h>", ":BufferPrevious<CR>", { noremap = true, silent = true })
 vim.api.nvim_set_keymap("n", "<leader>c", ":BufferClose<CR>", { noremap = true, silent = true })
 
-O.plugin.which_key.mappings["b"] = {
+lvim.builtin.which_key.mappings["b"] = {
   name = "Buffers",
   j = { "<cmd>BufferPick<cr>", "jump to buffer" },
   f = { "<cmd>Telescope buffers<cr>", "Find buffer" },

+ 3 - 3
lua/core/compe.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.completion = {
+  lvim.completion = {
     enabled = true,
     autocomplete = true,
     debug = false,
@@ -34,14 +34,14 @@ M.config = function()
 end
 
 M.setup = function()
-  vim.g.vsnip_snippet_dir = O.vsnip_dir
+  vim.g.vsnip_snippet_dir = lvim.vsnip_dir
 
   local status_ok, compe = pcall(require, "compe")
   if not status_ok then
     return
   end
 
-  compe.setup(O.completion)
+  compe.setup(lvim.completion)
 
   local t = function(str)
     return vim.api.nvim_replace_termcodes(str, true, true, true)

+ 20 - 3
lua/core/dap.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.plugin.dap = {
+  lvim.builtin.dap = {
     active = false,
     breakpoint = {
       text = "",
@@ -17,10 +17,10 @@ M.setup = function()
     return
   end
 
-  vim.fn.sign_define("DapBreakpoint", O.plugin.dap.breakpoint)
+  vim.fn.sign_define("DapBreakpoint", lvim.builtin.dap.breakpoint)
   dap.defaults.fallback.terminal_win_cmd = "50vsplit new"
 
-  O.user_which_key["d"] = {
+  lvim.builtin.which_key.mappings["d"] = {
     name = "Debug",
     t = { "<cmd>lua require'dap'.toggle_breakpoint()<cr>", "Toggle Breakpoint" },
     b = { "<cmd>lua require'dap'.step_back()<cr>", "Step Back" },
@@ -38,4 +38,21 @@ M.setup = function()
   }
 end
 
+-- TODO put this up there ^^^ call in ftplugin
+
+-- M.dap = function()
+--   if lvim.plugin.dap.active then
+--     local dap_install = require "dap-install"
+--     dap_install.config("python_dbg", {})
+--   end
+-- end
+--
+-- M.dap = function()
+--   -- gem install readapt ruby-debug-ide
+--   if lvim.plugin.dap.active then
+--     local dap_install = require "dap-install"
+--     dap_install.config("ruby_vsc_dbg", {})
+--   end
+-- end
+
 return M

+ 7 - 7
lua/core/dashboard.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.plugin.dashboard = {
+  lvim.builtin.dashboard = {
     active = false,
     search_handler = "telescope",
     custom_header = {
@@ -55,13 +55,13 @@ end
 M.setup = function()
   vim.g.dashboard_disable_at_vimenter = 0
 
-  vim.g.dashboard_custom_header = O.plugin.dashboard.custom_header
+  vim.g.dashboard_custom_header = lvim.builtin.dashboard.custom_header
 
-  vim.g.dashboard_default_executive = O.plugin.dashboard.search_handler
+  vim.g.dashboard_default_executive = lvim.builtin.dashboard.search_handler
 
-  vim.g.dashboard_custom_section = O.plugin.dashboard.custom_section
+  vim.g.dashboard_custom_section = lvim.builtin.dashboard.custom_section
 
-  O.plugin.which_key.mappings[";"] = { "<cmd>Dashboard<CR>", "Dashboard" }
+  lvim.builtin.which_key.mappings[";"] = { "<cmd>Dashboard<CR>", "Dashboard" }
 
   -- f = {
   --   description = { "  Neovim Config Files" },
@@ -81,7 +81,7 @@ M.setup = function()
   -- file_browser = {description = {' File Browser'}, command = 'Telescope find_files'},
 
   -- vim.g.dashboard_session_directory = CACHE_PATH..'/session'
-  -- vim.g.dashboard_custom_footer = O.dashboard.footer
+  -- vim.g.dashboard_custom_footer = lvim.dashboard.footer
   require("lv-utils").define_augroups {
     _dashboard = {
       -- seems to be nobuflisted that makes my stuff disapear will do more testing
@@ -93,7 +93,7 @@ M.setup = function()
       {
         "FileType",
         "dashboard",
-        "set showtabline=0 | autocmd BufLeave <buffer> set showtabline=" .. O.default_options.showtabline,
+        "set showtabline=0 | autocmd BufLeave <buffer> set showtabline=" .. vim.opt.showtabline._value,
       },
       { "FileType", "dashboard", "nnoremap <silent> <buffer> q :q<CR>" },
     },

+ 0 - 60
lua/core/formatter.lua

@@ -1,60 +0,0 @@
--- autoformat
-if O.format_on_save then
-  require("lv-utils").define_augroups {
-    autoformat = {
-      {
-        "BufWritePost",
-        "*",
-        ":silent FormatWrite",
-      },
-    },
-  }
-end
-
--- -- check if formatter has been defined for the language or not
--- local function formatter_exists(lang_formatter)
---   if lang_formatter == nil then
---     return false
---   end
---   if lang_formatter.exe == nil or lang_formatter.args == nil then
---     return false
---   end
---   return true
--- end
-
--- returns default formatter for given language
--- local function formatter_return(lang_formatter)
---   return {
---     exe = lang_formatter.exe,
---     args = lang_formatter.args,
---     stdin = not (lang_formatter.stdin ~= nil),
---   }
--- end
-
--- fill a table like this -> {rust: {exe:"sth",args:{"a","b"},stdin=true},go: {}...}
--- local formatter_filetypes = {}
--- for k, v in pairs(O.lang) do
---   if formatter_exists(v.formatter) then
---     local keys = v.filetypes
---     if keys == nil then
---       keys = { k }
---     end
---     for _, l in pairs(keys) do
---       formatter_filetypes[l] = {
---         function()
---           return formatter_return(v.formatter)
---         end,
---       }
---     end
---   end
--- end
-local status_ok, _ = pcall(require, "formatter")
-if not status_ok then
-  return
-end
-
-if not O.format_on_save then
-  vim.cmd [[if exists('#autoformat#BufWritePost')
-	:autocmd! autoformat
-	endif]]
-end

+ 2 - 2
lua/core/galaxyline.lua

@@ -7,9 +7,9 @@ if not status_ok then
 end
 
 -- NOTE: if someone defines colors but doesn't have them then this will break
-local palette_status_ok, colors = pcall(require, O.colorscheme .. ".palette")
+local palette_status_ok, colors = pcall(require, lvim.colorscheme .. ".palette")
 if not palette_status_ok then
-  colors = O.plugin.galaxyline.colors
+  colors = lvim.builtin.galaxyline.colors
 end
 
 local condition = require "galaxyline.condition"

+ 2 - 2
lua/core/gitsigns.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.plugin.gitsigns = {
+  lvim.builtin.gitsigns = {
     signs = {
       add = {
         hl = "GitSignsAdd",
@@ -53,7 +53,7 @@ M.setup = function()
   if not status_ok then
     return
   end
-  gitsigns.setup(O.plugin.gitsigns)
+  gitsigns.setup(lvim.builtin.gitsigns)
 end
 
 return M

+ 0 - 33
lua/core/linter.lua

@@ -1,33 +0,0 @@
-local M = {}
-
-M.setup = function()
-  if O.lint_on_save then
-    require("lv-utils").define_augroups {
-      autolint = {
-        {
-          "BufWritePost",
-          "<buffer>",
-          ":silent lua require('lint').try_lint()",
-        },
-        {
-          "BufEnter",
-          "<buffer>",
-          ":silent lua require('lint').try_lint()",
-        },
-      },
-    }
-  end
-end
-
-local status_ok, _ = pcall(require, "lint")
-if not status_ok then
-  return
-end
-
-if not O.lint_on_save then
-  vim.cmd [[if exists('#autolint#BufWritePost')
-	:autocmd! autolint
-	endif]]
-end
-
-return M

+ 2 - 2
lua/core/nvimtree.lua

@@ -1,7 +1,7 @@
 local M = {}
 --
 M.config = function()
-  O.plugin.nvimtree = {
+  lvim.builtin.nvimtree = {
     side = "left",
     show_icons = {
       git = 1,
@@ -52,7 +52,7 @@ M.setup = function()
   end
   local g = vim.g
 
-  for opt, val in pairs(O.plugin.nvimtree) do
+  for opt, val in pairs(lvim.builtin.nvimtree) do
     g["nvim_tree_" .. opt] = val
   end
 

+ 1 - 1
lua/core/status_colors.lua

@@ -1,4 +1,4 @@
-O.plugin.galaxyline = {
+lvim.builtin.galaxyline = {
   active = true,
   colors = {
     alt_bg = "#2E2E2E",

+ 2 - 2
lua/core/telescope.lua

@@ -5,7 +5,7 @@ M.config = function()
     return
   end
 
-  O.plugin.telescope = {
+  lvim.builtin.telescope = {
     active = false,
     defaults = {
       find_command = {
@@ -89,7 +89,7 @@ M.setup = function()
   if not status_ok then
     return
   end
-  telescope.setup(O.plugin.telescope)
+  telescope.setup(lvim.builtin.telescope)
   vim.api.nvim_set_keymap("n", "<Leader>f", ":Telescope find_files<CR>", { noremap = true, silent = true })
 end
 

+ 3 - 3
lua/core/terminal.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.plugin["terminal"] = {
+  lvim.builtin["terminal"] = {
     -- size can be a number or function which is passed the current terminal
     size = 5,
     -- open_mapping = [[<c-\>]],
@@ -47,8 +47,8 @@ M.setup = function()
     "<cmd>lua require('core.terminal')._lazygit_toggle()<CR>",
     { noremap = true, silent = true }
   )
-  O.plugin.which_key.mappings["gg"] = "LazyGit"
-  terminal.setup(O.plugin.terminal)
+  lvim.builtin.which_key.mappings["gg"] = "LazyGit"
+  terminal.setup(lvim.builtin.terminal)
 end
 
 local function is_installed(exe)

+ 2 - 116
lua/core/treesitter.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.treesitter = {
+  lvim.builtin.treesitter = {
     ensure_installed = {}, -- one of "all", "maintained" (parsers with maintainers), or a list of languages
     ignore_install = {},
     matchup = {
@@ -59,129 +59,15 @@ M.config = function()
       max_file_lines = 1000, -- Do not enable for files with more than 1000 lines, int
     },
   }
-
-  -- -- TODO refactor treesitter
-  -- -- @usage pass a table with your desired languages
-  -- treesitter = {
-  --   ensure_installed = "all",
-  --   ignore_install = { "haskell" },
-  --   highlight = { enabled = true },
-  --   -- The below are for treesitter-textobjects plugin
-  --   textobj_prefixes = {
-  --     goto_next = "]", -- Go to next
-  --     goto_previous = "[", -- Go to previous
-  --     inner = "i", -- Select inside
-  --     outer = "a", -- Selct around
-  --     swap = "<leader>a", -- Swap with next
-  --   },
-  --   textobj_suffixes = {
-  --     -- Start and End respectively for the goto keys
-  --     -- for other keys it only uses the first
-  --     ["function"] = { "f", "F" },
-  --     ["class"] = { "m", "M" },
-  --     ["parameter"] = { "a", "A" },
-  --     ["block"] = { "k", "K" },
-  --     ["conditional"] = { "i", "I" },
-  --     ["call"] = { "c", "C" },
-  --     ["loop"] = { "l", "L" },
-  --     ["statement"] = { "s", "S" },
-  --     ["comment"] = { "/", "?" },
-  --   },
-  --   -- The below is for treesitter hint textobjects plugin
-  --   hint_labels = { "h", "j", "f", "d", "n", "v", "s", "l", "a" },
-  -- },
 end
 
 M.setup = function()
-  -- TODO: refacor this whole file and treesitter in general
-  -- if not package.loaded['nvim-treesitter'] then return end
-  --
-  -- Custom parsers
-  -- local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
-  -- parser_config.make = {
-  --     install_info = {
-  --         url = "https://github.com/alemuller/tree-sitter-make", -- local path or git repo
-  --         files = {"src/parser.c"},
-  --         requires_generate_from_grammar = true
-  --     }
-  -- }
-  -- parser_config.just = {
-  --     install_info = {
-  --         url = "~/dev/tree-sitter-just", -- local path or git repo
-  --         files = {"src/parser.c"}
-  --     }
-  --     -- filetype = "just", -- if filetype does not agrees with parser name
-  --     -- used_by = {"bar", "baz"} -- additional filetypes that use this parser
-  -- }
-  -- Custom text objects
-  -- local textobj_prefixes = O.treesitter.textobj_prefixes
-  -- local textobj_suffixes = O.treesitter.textobj_suffixes
-  -- local textobj_sel_keymaps = {}
-  -- local textobj_swap_keymaps = {}
-  -- local textobj_move_keymaps = {
-  --   enable = O.plugin.ts_textobjects,
-  --   set_jumps = true, -- whether to set jumps in the jumplist
-  --   goto_next_start = {},
-  --   goto_next_end = {},
-  --   goto_previous_start = {},
-  --   goto_previous_end = {},
-  -- }
-  -- for obj, suffix in pairs(textobj_suffixes) do
-  --   if textobj_prefixes["goto_next"] ~= nil then
-  --     textobj_move_keymaps["goto_next_start"][textobj_prefixes["goto_next"] .. suffix[1]] = "@" .. obj .. ".outer"
-  --     textobj_move_keymaps["goto_next_end"][textobj_prefixes["goto_next"] .. suffix[2]] = "@" .. obj .. ".outer"
-  --   end
-  --   if textobj_prefixes["goto_previous"] ~= nil then
-  --     textobj_move_keymaps["goto_previous_start"][textobj_prefixes["goto_previous"] .. suffix[2]] = "@" .. obj .. ".outer"
-  --     textobj_move_keymaps["goto_previous_end"][textobj_prefixes["goto_previous"] .. suffix[1]] = "@" .. obj .. ".outer"
-  --   end
-  --
-  --   if textobj_prefixes["inner"] ~= nil then
-  --     textobj_sel_keymaps[textobj_prefixes["inner"] .. suffix[1]] = "@" .. obj .. ".inner"
-  --   end
-  --   if textobj_prefixes["outer"] ~= nil then
-  --     textobj_sel_keymaps[textobj_prefixes["outer"] .. suffix[1]] = "@" .. obj .. ".outer"
-  --   end
-  --
-  --   if textobj_prefixes["swap"] ~= nil then
-  --     textobj_swap_keymaps[textobj_prefixes["swap"] .. suffix[1]] = "@" .. obj .. ".outer"
-  --   end
-  -- end
-  -- vim.g.ts_hint_textobject_keys = O.treesitter.hint_labels -- Requires https://github.com/mfussenegger/nvim-ts-hint-textobject/pull/2
-  --
-  -- -- Add which key menu entries
-  -- local status, wk = pcall(require, "which-key")
-  -- if status then
-  --   local normal = {
-  --     mode = "n", -- Normal mode
-  --   }
-  --   local operators = {
-  --     mode = "o", -- Operator mode
-  --   }
-  --   wk.register(textobj_sel_keymaps, operators)
-  --   wk.register({
-  --     ["m"] = "Hint Objects",
-  --     ["."] = "Textsubject",
-  --     [";"] = "Textsubject-big",
-  --   }, operators)
-  --   wk.register(textobj_swap_keymaps, normal)
-  --   wk.register({
-  --     [textobj_prefixes["swap"]] = "Swap",
-  --     -- [textobj_prefixes["goto_next"]] = "Jump [",
-  --     -- [textobj_prefixes["goto_previous"]] = "Jump ]"
-  --   }, normal)
-  --   wk.register(textobj_move_keymaps["goto_next_start"], normal)
-  --   wk.register(textobj_move_keymaps["goto_next_end"], normal)
-  --   wk.register(textobj_move_keymaps["goto_previous_start"], normal)
-  --   wk.register(textobj_move_keymaps["goto_previous_end"], normal)
-  -- end
-
   local status_ok, treesitter_configs = pcall(require, "nvim-treesitter.configs")
   if not status_ok then
     return
   end
 
-  treesitter_configs.setup(O.treesitter)
+  treesitter_configs.setup(lvim.builtin.treesitter)
 end
 
 return M

+ 10 - 20
lua/core/which-key.lua

@@ -1,6 +1,6 @@
 local M = {}
 M.config = function()
-  O.plugin.which_key = {
+  lvim.builtin.which_key = {
     active = false,
     setup = {
       plugins = {
@@ -117,14 +117,15 @@ M.config = function()
           "<cmd>Telescope lsp_workspace_diagnostics<cr>",
           "Workspace Diagnostics",
         },
-        f = { "<cmd>silent FormatWrite<cr>", "Format" },
+        -- f = { "<cmd>silent FormatWrite<cr>", "Format" },
+        f = { "<cmd>lua vim.lsp.buf.formatting()<cr>", "Format" },
         i = { "<cmd>LspInfo<cr>", "Info" },
         j = {
-          "<cmd>lua vim.lsp.diagnostic.goto_next({popup_opts = {border = O.lsp.popup_border}})<cr>",
+          "<cmd>lua vim.lsp.diagnostic.goto_next({popup_opts = {border = lvim.lsp.popup_border}})<cr>",
           "Next Diagnostic",
         },
         k = {
-          "<cmd>lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = O.lsp.popup_border}})<cr>",
+          "<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" },
@@ -171,29 +172,18 @@ M.setup = function()
     return
   end
 
-  which_key.setup(O.plugin.which_key.setup)
+  which_key.setup(lvim.builtin.which_key.setup)
 
-  local opts = O.plugin.which_key.opts
-  local vopts = O.plugin.which_key.vopts
+  local opts = lvim.builtin.which_key.opts
+  local vopts = lvim.builtin.which_key.vopts
 
-  local mappings = O.plugin.which_key.mappings
-  local vmappings = O.plugin.which_key.vmappings
-
-  -- if O.plugin.ts_playground.active then
-  --   vim.api.nvim_set_keymap("n", "<leader>Th", ":TSHighlightCapturesUnderCursor<CR>", { noremap = true, silent = true })
-  --   mappings[""] = "Highlight Capture"
-  -- end
-
-  if O.plugin.zen.active then
-    vim.api.nvim_set_keymap("n", "<leader>z", ":ZenMode<CR>", { noremap = true, silent = true })
-    mappings["z"] = "Zen"
-  end
+  local mappings = lvim.builtin.which_key.mappings
+  local vmappings = lvim.builtin.which_key.vmappings
 
   local wk = require "which-key"
 
   wk.register(mappings, opts)
   wk.register(vmappings, vopts)
-  wk.register(O.user_which_key, opts)
 end
 
 return M

+ 0 - 34
lua/core/zen.lua

@@ -1,34 +0,0 @@
-local M = {}
-M.config = function()
-  O.plugin["zen"] = {
-    window = {
-      backdrop = 1,
-      height = 0.85, -- height of the Zen window
-      options = {
-        signcolumn = "no", -- disable signcolumn
-        number = false, -- disable number column
-        relativenumber = false, -- disable relative numbers
-        -- cursorline = false, -- disable cursorline
-        -- cursorcolumn = false, -- disable cursor column
-        -- foldcolumn = "0", -- disable fold column
-        -- list = false, -- disable whitespace characters
-      },
-    },
-    plugins = {
-      gitsigns = { enabled = false }, -- disables git signs
-      -- your configuration comes here
-      -- or leave it empty to use the default settings
-      -- refer to the configuration section below
-    },
-  }
-end
-
-M.setup = function()
-  local status_ok, zen_mode = pcall(require, "zen-mode")
-  if not status_ok then
-    return
-  end
-  zen_mode.setup(O.plugin.zen)
-end
-
-return M

+ 693 - 166
lua/default-config.lua

@@ -4,61 +4,33 @@ CACHE_PATH = vim.fn.stdpath "cache"
 TERMINAL = vim.fn.expand "$TERMINAL"
 USER = vim.fn.expand "$USER"
 
-O = {
-  keys = {
-    leader_key = "space",
-  },
+lvim = {
+  leader = "space",
   colorscheme = "spacegray",
   line_wrap_cursor_movement = true,
   transparent_window = false,
   format_on_save = true,
-  lint_on_save = true,
   vsnip_dir = os.getenv "HOME" .. "/.config/snippets",
+  database = { save_location = "~/.config/lunarvim_db", auto_execute = 1 },
+  keys = {},
 
-  default_options = {
-    backup = false, -- creates a backup file
-    clipboard = "unnamedplus", -- allows neovim to access the system clipboard
-    cmdheight = 2, -- more space in the neovim command line for displaying messages
-    colorcolumn = "99999", -- fixes indentline for now
-    completeopt = { "menuone", "noselect" },
-    conceallevel = 0, -- so that `` is visible in markdown files
-    fileencoding = "utf-8", -- the encoding written to a file
-    foldmethod = "manual", -- folding, set to "expr" for treesitter based foloding
-    foldexpr = "", -- set to "nvim_treesitter#foldexpr()" for treesitter based folding
-    guifont = "monospace:h17", -- the font used in graphical neovim applications
-    hidden = true, -- required to keep multiple buffers and open multiple buffers
-    hlsearch = true, -- highlight all matches on previous search pattern
-    ignorecase = true, -- ignore case in search patterns
-    mouse = "a", -- allow the mouse to be used in neovim
-    pumheight = 10, -- pop up menu height
-    showmode = false, -- we don't need to see things like -- INSERT -- anymore
-    showtabline = 2, -- always show tabs
-    smartcase = true, -- smart case
-    smartindent = true, -- make indenting smarter again
-    splitbelow = true, -- force all horizontal splits to go below current window
-    splitright = true, -- force all vertical splits to go to the right of current window
-    swapfile = false, -- creates a swapfile
-    termguicolors = true, -- set term gui colors (most terminals support this)
-    timeoutlen = 100, -- time to wait for a mapped sequence to complete (in milliseconds)
-    title = true, -- set the title of window to the value of the titlestring
-    -- opt.titlestring = "%<%F%=%l/%L - nvim" -- what the title of the window will be set to
-    undodir = CACHE_PATH .. "/undo", -- set an undo directory
-    undofile = true, -- enable persisten undo
-    updatetime = 300, -- faster completion
-    writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited
-    expandtab = true, -- convert tabs to spaces
-    shiftwidth = 2, -- the number of spaces inserted for each indentation
-    tabstop = 2, -- insert 2 spaces for a tab
-    cursorline = true, -- highlight the current line
-    number = true, -- set numbered lines
-    relativenumber = false, -- set relative numbered lines
-    numberwidth = 4, -- set number column width to 2 {default 4}
-    signcolumn = "yes", -- always show the sign column, otherwise it would shift the text each time
-    wrap = false, -- display lines as one long line
-    spell = false,
-    spelllang = "en",
-    scrolloff = 8, -- is one of my fav
-    sidescrolloff = 8,
+  -- TODO why do we need this?
+  builtin = {
+    lspinstall = {},
+    telescope = {},
+    compe = {},
+    autopairs = {},
+    treesitter = {},
+    nvimtree = {},
+    gitsigns = {},
+    which_key = {},
+    comment = {},
+    rooter = {},
+    galaxyline = {},
+    bufferline = {},
+    dap = {},
+    dashboard = {},
+    terminal = {},
   },
 
   lsp = {
@@ -76,144 +48,699 @@ O = {
     on_attach_callback = nil,
   },
 
-  disabled_built_ins = {
-    "netrw",
-    "netrwPlugin",
-    "netrwSettings",
-    "netrwFileHandlers",
-    "gzip",
-    "zip",
-    "zipPlugin",
-    "tar",
-    "tarPlugin", -- 'man',
-    "getscript",
-    "getscriptPlugin",
-    "vimball",
-    "vimballPlugin",
-    "2html_plugin",
-    "logipat",
-    "rrhelper",
-    "spellfile_plugin",
-    -- 'matchit', 'matchparen', 'shada_plugin',
+  plugins = {
+    -- use lv-config.lua for this not put here
   },
 
-  plugin = {
-    lspinstall = {},
-    telescope = {},
-    compe = {},
-    autopairs = {},
-    treesitter = {},
-    formatter = {},
-    lint = {},
-    nvimtree = {},
-    gitsigns = {},
-    which_key = {},
-    comment = {},
-    rooter = {},
-    galaxyline = {},
-    bufferline = {},
-    dap = {},
-    dashboard = {},
-    terminal = {},
-    zen = {},
+  autocommands = {
+    { "FileType", "qf", "set nobuflisted" },
   },
+}
 
-  -- TODO: refactor for tree
-  auto_close_tree = 0,
-  nvim_tree_disable_netrw = 0,
+local schemas = nil
+local common_on_attach = require("lsp").common_on_attach
+local common_capabilities = require("lsp").common_capabilities()
+local status_ok, jsonls_settings = pcall(require, "nlspsettings.jsonls")
+if status_ok then
+  schemas = jsonls_settings.get_default_schemas()
+end
 
-  database = { save_location = "~/.config/lunarvim_db", auto_execute = 1 },
+-- TODO move all of this into lang specific files, only require when using
+lvim.lang = {
+  c = {
+    formatter = {
+      exe = "clang_format",
+      args = {},
+      stdin = true,
+    },
+    linters = {
+      "clangtidy",
+    },
+    lsp = {
+      provider = "clangd",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/cpp/clangd/bin/clangd",
+          "--background-index",
+          "--header-insertion=never",
+          "--cross-file-rename",
+          "--clang-tidy",
+          "--clang-tidy-checks=-*,llvm-*,clang-analyzer-*",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  cpp = {
+    formatter = {
+      exe = "clang_format",
+      args = {},
+      stdin = true,
+    },
+    linters = {
+      "cppcheck",
+      "clangtidy",
+    },
+    lsp = {
+      provider = "clangd",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/cpp/clangd/bin/clangd",
+          "--background-index",
+          "--header-insertion=never",
+          "--cross-file-rename",
+          "--clang-tidy",
+          "--clang-tidy-checks=-*,llvm-*,clang-analyzer-*",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  csharp = {
+    lsp = {
+      provider = "omnisharp",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/csharp/omnisharp/run",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  cmake = {
+    formatter = {
+      exe = "clang-format",
+      args = {},
+    },
+    lsp = {
+      provider = "cmake",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/cmake/venv/bin/cmake-language-server",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  clojure = {
+    lsp = {
+      provider = "clojure_lsp",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/clojure/clojure-lsp",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  css = {
+    formatter = {
+      exe = "prettier",
+      args = {},
+    },
+    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,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  dart = {
+    lsp = {
+      provider = "dartls",
+      setup = {
+        cmd = {
+          "dart",
+          "/usr/lib/dart/bin/snapshots/analysis_server.dart.snapshot",
+          "--lsp",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+    formatter = {
+      exe = "dart",
+      args = { "format" },
+      stdin = true,
+    },
+  },
+  docker = {
+    lsp = {
+      provider = "dockerls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/dockerfile/node_modules/.bin/docker-langserver",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  elixir = {
+    formatter = {
+      exe = "mix",
+      args = { "format" },
+      stdin = true,
+    },
+    lsp = {
+      provider = "elixirls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/elixir/elixir-ls/language_server.sh",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  elm = {
+    lsp = {
+      provider = "elmls",
+      setup = {
+        cmd = {
+          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",
+        },
+      },
+    },
+  },
+  erlang = {
+    lsp = {
+      provider = "erlangls",
+      setup = {
+        cmd = {
+          "erlang_ls",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  emmet = { active = false },
+  go = {
+    formatter = {
+      exe = "gofmt",
+      args = {},
+      stdin = true,
+    },
+    linters = {
+      "golangcilint",
+      "revive",
+    },
+    lsp = {
+      provider = "gopls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/go/gopls",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  graphql = {
+    lsp = {
+      provider = "graphql",
+      setup = {
+        cmd = {
+          "graphql-lsp",
+          "server",
+          "-m",
+          "stream",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  html = {
+    linters = {
+      "tidy",
+      -- https://docs.errata.ai/vale/scoping#html
+      "vale",
+    },
+    lsp = {
+      provider = "html",
+      setup = {
+        cmd = {
+          "node",
+          DATA_PATH .. "/lspinstall/html/vscode-html/html-language-features/server/dist/node/htmlServerMain.js",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  java = {
+    formatter = {
+      exe = "prettier",
+      args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
+    },
+    lsp = {
+      provider = "jdtls",
+      setup = {
+        cmd = { DATA_PATH .. "/lspinstall/java/jdtls.sh" },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  json = {
+    formatter = {
+      exe = "python",
+      args = { "-m", "json.tool" },
+      stdin = true,
+    },
+    lsp = {
+      provider = "jsonls",
+      setup = {
+        cmd = {
+          "node",
+          DATA_PATH .. "/lspinstall/json/vscode-json/json-language-features/server/dist/node/jsonServerMain.js",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+        settings = {
+          json = {
+            schemas = schemas,
+            --   = {
+            --   {
+            --     fileMatch = { "package.json" },
+            --     url = "https://json.schemastore.org/package.json",
+            --   },
+            -- },
+          },
+        },
+        commands = {
+          Format = {
+            function()
+              vim.lsp.buf.range_formatting({}, { 0, 0 }, { vim.fn.line "$", 0 })
+            end,
+          },
+        },
+      },
+    },
+  },
+  julia = {
+    lsp = {
+      provider = "julials",
+      setup = {
+        {
+          "julia",
+          "--startup-file=no",
+          "--history-file=no",
+          -- vim.fn.expand "~/.config/nvim/lua/lsp/julia/run.jl",
+          CONFIG_PATH .. "/utils/julia/run.jl",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  kotlin = {
+    lsp = {
+      provider = "kotlin_language_server",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/kotlin/server/bin/kotlin-language-server",
+        },
+        on_attach = common_on_attach,
+        root_dir = function(fname)
+          local util = require "lspconfig/util"
 
-  -- TODO: just using mappings (leader mappings)
-  user_which_key = {},
+          local root_files = {
+            "settings.gradle", -- Gradle (multi-project)
+            "settings.gradle.kts", -- Gradle (multi-project)
+            "build.xml", -- Ant
+            "pom.xml", -- Maven
+          }
 
-  user_plugins = {
-    -- use lv-config.lua for this not put here
+          local fallback_root_files = {
+            "build.gradle", -- Gradle
+            "build.gradle.kts", -- Gradle
+          }
+          return util.root_pattern(unpack(root_files))(fname) or util.root_pattern(unpack(fallback_root_files))(fname)
+        end,
+      },
+    },
   },
-
-  user_autocommands = {
-    { "FileType", "qf", "set nobuflisted" },
+  lua = {
+    formatter = {
+      exe = "stylua",
+      args = {},
+    },
+    linters = { "luacheck" },
+    lsp = {
+      provider = "sumneko_lua",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/lua/sumneko-lua-language-server",
+          "-E",
+          DATA_PATH .. "/lspinstall/lua/main.lua",
+        },
+        on_attach = common_on_attach,
+        settings = {
+          Lua = {
+            runtime = {
+              -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
+              version = "LuaJIT",
+              -- Setup your lua path
+              path = vim.split(package.path, ";"),
+            },
+            diagnostics = {
+              -- Get the language server to recognize the `vim` global
+              globals = { "vim", "O" },
+            },
+            workspace = {
+              -- Make the server aware of Neovim runtime files
+              library = {
+                [vim.fn.expand "~/.local/share/lunarvim/lvim/lua"] = true,
+                [vim.fn.expand "$VIMRUNTIME/lua"] = true,
+                [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true,
+              },
+              maxPreload = 100000,
+              preloadFileSize = 1000,
+            },
+          },
+        },
+      },
+    },
   },
-
-  formatters = {
-    filetype = {},
+  php = {
+    formatter = {
+      exe = "phpcbf",
+      args = { "--standard=PSR12", vim.api.nvim_buf_get_name(0) },
+    },
+    linters = {},
+    lsp = {
+      provider = "intelephense",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/php/node_modules/.bin/intelephense",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        filetypes = { "php", "phtml" },
+        settings = {
+          intelephense = {
+            environment = {
+              phpVersion = "7.4",
+            },
+          },
+        },
+      },
+    },
   },
-
-  -- TODO move all of this into lang specific files, only require when using
-  lang = {
-    efm = {},
-    emmet = { active = false },
-    svelte = {},
-    tailwindcss = {
-      active = false,
-      filetypes = {
-        "html",
-        "css",
-        "scss",
-        "javascript",
-        "javascriptreact",
-        "typescript",
-        "typescriptreact",
-      },
-    },
-    tsserver = {
-      -- @usage can be 'eslint' or 'eslint_d'
-      linter = "",
-      diagnostics = {
-        virtual_text = { spacing = 0, prefix = "" },
-        signs = true,
-        underline = true,
-      },
-      formatter = {
-        exe = "prettier",
-        args = {},
+  javascript = {
+    -- @usage can be prettier or eslint
+    formatter = {
+      exe = "prettier",
+      args = {},
+    },
+    linters = {
+      "eslint",
+    },
+    lsp = {
+      provider = "tsserver",
+      setup = {
+        cmd = {
+          -- TODO:
+          DATA_PATH .. "/lspinstall/typescript/node_modules/.bin/typescript-language-server",
+          "--stdio",
+        },
+        on_attach = require("lsp").common_on_attach,
+        capabilities = require("lsp").common_capabilities(),
+      },
+    },
+  },
+  python = {
+    -- @usage can be flake8 or yapf
+    formatter = {
+      exe = "black",
+      args = {},
+    },
+    linters = {
+      "flake8",
+      "pylint",
+      "mypy",
+    },
+    lsp = {
+      provider = "pyright",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/python/node_modules/.bin/pyright-langserver",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  -- 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 = "R",
+      args = {
+        "--slave",
+        "--no-restore",
+        "--no-save",
+        '-e "formatR::tidy_source(text=readr::read_file(file(\\"stdin\\")), arrow=FALSE)"',
+      },
+      stdin = true,
+    },
+    lsp = {
+      provider = "r_language_server",
+      setup = {
+        cmd = {
+          "R",
+          "--slave",
+          "-e",
+          "languageserver::run()",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  ruby = {
+    formatter = {
+      exe = "rufo",
+      args = { "-x" },
+      stdin = true,
+    },
+    linters = { "ruby" },
+    lsp = {
+      provider = "solargraph",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/ruby/solargraph/solargraph",
+          "stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  rust = {
+    formatter = {
+      exe = "rustfmt",
+      args = { "--emit=stdout", "--edition=2018" },
+      stdin = true,
+    },
+    lsp = {
+      provider = "rust_analyzer",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/rust/rust-analyzer",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  sh = {
+    -- @usage can be 'shfmt'
+    formatter = {
+      exe = "shfmt",
+      args = {},
+    },
+    -- @usage can be 'shellcheck'
+    linters = { "shellcheck" },
+    lsp = {
+      provider = "bashls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/bash/node_modules/.bin/bash-language-server",
+          "start",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  svelte = {
+    lsp = {
+      provider = "svelte",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/svelte/node_modules/.bin/svelteserver",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  swift = {
+    formatter = {
+      exe = "swiftformat",
+      args = {},
+      stdin = true,
+    },
+    lsp = {
+      provider = "sourcekit",
+      setup = {
+        cmd = {
+          "xcrun",
+          "sourcekit-lsp",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  tailwindcss = {
+    active = false,
+    filetypes = {
+      "html",
+      "css",
+      "scss",
+      "javascript",
+      "javascriptreact",
+      "typescript",
+      "typescriptreact",
+    },
+  },
+  terraform = {
+    formatter = {
+      exe = "terraform",
+      args = { "fmt" },
+      stdin = false,
+    },
+    lsp = {
+      provider = "terraformls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/terraform/terraform-ls",
+          "serve",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  vim = {
+    linters = { "vint" },
+    lsp = {
+      provider = "vimls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/vim/node_modules/.bin/vim-language-server",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  vue = {
+    formatter = {
+      exe = "prettier",
+      args = {
+        "--stdin-filepath",
+        "${FILEPATH}",
+      },
+      stdin = true,
+    },
+    lsp = {
+      provider = "vetur",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/vue/node_modules/.bin/vls",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  yaml = {
+    formatter = {
+      exe = "prettier",
+      args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0), "--single-quote" },
+      stdin = true,
+    },
+    lsp = {
+      provider = "yamlls",
+      setup = {
+        cmd = {
+          DATA_PATH .. "/lspinstall/yaml/node_modules/.bin/yaml-language-server",
+          "--stdio",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
+      },
+    },
+  },
+  zig = {
+    formatter = {
+      exe = "zig",
+      args = { "fmt" },
+      stdin = false,
+    },
+    lsp = {
+      provider = "zls",
+      setup = {
+        cmd = {
+          "zls",
+        },
+        on_attach = common_on_attach,
+        capabilities = common_capabilities,
       },
     },
   },
 }
 
+require("core.which-key").config()
 require "core.status_colors"
 require("core.gitsigns").config()
 require("core.compe").config()
 require("core.dashboard").config()
 require("core.dap").config()
 require("core.terminal").config()
-require("core.zen").config()
 require("core.telescope").config()
 require("core.treesitter").config()
-require("core.which-key").config()
 require("core.nvimtree").config()
-
-require("lang.clang").config()
-require("lang.clojure").config()
-require("lang.cmake").config()
-require("lang.cs").config()
-require("lang.css").config()
-require("lang.dart").config()
-require("lang.dockerfile").config()
-require("lang.elixir").config()
-require("lang.elm").config()
-require("lang.go").config()
-require("lang.graphql").config()
-require("lang.html").config()
-require("lang.java").config()
-require("lang.json").config()
-require("lang.julia").config()
-require("lang.kotlin").config()
-require("lang.lua").config()
-require("lang.php").config()
-require("lang.python").config()
-require("lang.r").config()
-require("lang.ruby").config()
-require("lang.rust").config()
-require("lang.sh").config()
-require("lang.scala").config()
-require("lang.svelte").config()
-require("lang.swift").config()
-require("lang.terraform").config()
-require("lang.tex").config()
-require("lang.vim").config()
-require("lang.vue").config()
-require("lang.yaml").config()
-require("lang.zig").config()
-require("lang.zsh").config()

+ 4 - 4
lua/keymappings.lua

@@ -89,17 +89,17 @@ if vim.fn.has "mac" == 1 then
   default_keys.normal_mode[8][1] = "<A-Right>"
 end
 
-if O.keys.leader_key == " " or O.keys.leader_key == "space" then
+if lvim.leader == " " or lvim.leader == "space" then
   vim.g.mapleader = " "
 else
-  vim.g.mapleader = O.keys.leader_key
+  vim.g.mapleader = lvim.leader
 end
 
 local function get_user_keys(mode)
-  if O.keys[mode] == nil then
+  if lvim.keys[mode] == nil then
     return default_keys[mode]
   else
-    return O.keys[mode]
+    return lvim.keys[mode]
   end
 end
 

+ 0 - 159
lua/lang/clang.lua

@@ -1,159 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.clang = {
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    cross_file_rename = true,
-    header_insertion = "never",
-    filetypes = { "c", "cpp", "objc" },
-    formatter = {
-      exe = "clang-format",
-      args = {},
-      stdin = true,
-    },
-    linters = {
-      "cppcheck",
-      "clangtidy",
-    },
-    debug = {
-      adapter = {
-        command = "/usr/bin/lldb-vscode",
-      },
-      stop_on_entry = false,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/cpp/clangd/bin/clangd",
-    },
-  }
-end
-
-M.format = function()
-  local shared_config = {
-    function()
-      return {
-        exe = O.lang.clang.formatter.exe,
-        args = O.lang.clang.formatter.args,
-        stdin = O.lang.clang.formatter.stdin,
-        cwd = vim.fn.expand "%:h:p",
-      }
-    end,
-  }
-  O.formatters.filetype["c"] = shared_config
-  O.formatters.filetype["cpp"] = shared_config
-  O.formatters.filetype["objc"] = shared_config
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    c = O.lang.clang.linters,
-    cpp = O.lang.clang.linters,
-  }
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "clangd" then
-    return
-  end
-  local clangd_flags = { "--background-index" }
-
-  if O.lang.clang.cross_file_rename then
-    table.insert(clangd_flags, "--cross-file-rename")
-  end
-
-  table.insert(clangd_flags, "--header-insertion=" .. O.lang.clang.header_insertion)
-
-  require("lspconfig").clangd.setup {
-    cmd = { O.lang.clang.lsp.path, unpack(clangd_flags) },
-    on_attach = require("lsp").common_on_attach,
-    handlers = {
-      ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-        virtual_text = O.lang.clang.diagnostics.virtual_text,
-        signs = O.lang.clang.diagnostics.signs,
-        underline = O.lang.clang.diagnostics.underline,
-        update_in_insert = true,
-      }),
-    },
-  }
-end
-
-M.dap = function()
-  if O.plugin.dap.active then
-    local dap_install = require "dap-install"
-    local dap = require "dap"
-    dap_install.config("ccppr_vsc_dbg", {})
-    dap.adapters.lldb = {
-      type = "executable",
-      command = O.lang.clang.debug.adapter.command,
-      name = "lldb",
-    }
-    local shared_dap_config = {
-      {
-        name = "Launch",
-        type = "lldb",
-        request = "launch",
-        program = function()
-          return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
-        end,
-        cwd = "${workspaceFolder}",
-        stopOnEntry = O.lang.clang.debug.stop_on_entry,
-        args = {},
-        env = function()
-          local variables = {}
-          for k, v in pairs(vim.fn.environ()) do
-            table.insert(variables, string.format("%s=%s", k, v))
-          end
-          return variables
-        end,
-        runInTerminal = false,
-      },
-      {
-        -- If you get an "Operation not permitted" error using this, try disabling YAMA:
-        --  echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
-        name = "Attach to process",
-        type = "lldb", -- Adjust this to match your adapter name (`dap.adapters.<name>`)
-        request = "attach",
-        pid = function()
-          local output = vim.fn.system { "ps", "a" }
-          local lines = vim.split(output, "\n")
-          local procs = {}
-          for _, line in pairs(lines) do
-            -- output format
-            --    " 107021 pts/4    Ss     0:00 /bin/zsh <args>"
-            local parts = vim.fn.split(vim.fn.trim(line), " \\+")
-            local pid = parts[1]
-            local name = table.concat({ unpack(parts, 5) }, " ")
-            if pid and pid ~= "PID" then
-              pid = tonumber(pid)
-              if pid ~= vim.fn.getpid() then
-                table.insert(procs, { pid = tonumber(pid), name = name })
-              end
-            end
-          end
-          local choices = { "Select process" }
-          for i, proc in ipairs(procs) do
-            table.insert(choices, string.format("%d: pid=%d name=%s", i, proc.pid, proc.name))
-          end
-          local choice = vim.fn.inputlist(choices)
-          if choice < 1 or choice > #procs then
-            return nil
-          end
-          return procs[choice].pid
-        end,
-        args = {},
-      },
-    }
-    dap.configurations.c = shared_dap_config
-    dap.configurations.cpp = shared_dap_config
-  end
-end
-
-return M

+ 0 - 37
lua/lang/clojure.lua

@@ -1,37 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.erlang = {
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/clojure/clojure-lsp",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "clojure_lsp" then
-    return
-  end
-
-  require("lspconfig").clojure_lsp.setup {
-    cmd = { O.lang.erlang.lsp.path },
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 42
lua/lang/cmake.lua

@@ -1,42 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.cmake = {
-    formatter = {
-      exe = "clang-format",
-      args = {},
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/cmake/venv/bin/cmake-language-server",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatters (if applicable)
-  return "No formatters configured!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "cmake" then
-    return
-  end
-
-  require("lspconfig").cmake.setup {
-    cmd = { O.lang.cmake.lsp.path },
-    on_attach = require("lsp").common_on_attach,
-    filetypes = { "cmake" },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 38
lua/lang/cs.lua

@@ -1,38 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.csharp = {
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/csharp/omnisharp/run",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "omnisharp" then
-    return
-  end
-
-  -- C# language server (csharp/OmniSharp) setup
-  require("lspconfig").omnisharp.setup {
-    on_attach = require("lsp").common_on_attach,
-    cmd = { O.lang.csharp.lsp.path, "--languageserver", "--hostPID", tostring(vim.fn.getpid()) },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 77
lua/lang/css.lua

@@ -1,77 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.css = {
-    virtual_text = true,
-    formatter = {
-      exe = "prettier",
-      args = {},
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/css/vscode-css/css-language-features/server/dist/node/cssServerMain.js",
-    },
-  }
-end
-
-M.format = function()
-  vim.cmd "let proj = FindRootDirectory()"
-  local root_dir = vim.api.nvim_get_var "proj"
-
-  -- use the global prettier if you didn't find the local one
-  local prettier_instance = root_dir .. "/node_modules/.bin/prettier"
-  if vim.fn.executable(prettier_instance) ~= 1 then
-    prettier_instance = O.lang.tsserver.formatter.exe
-  end
-
-  local ft = vim.bo.filetype
-  O.formatters.filetype[ft] = {
-    function()
-      local args = { "--stdin-filepath", vim.fn.fnameescape(vim.api.nvim_buf_get_name(0)) }
-      -- TODO: O.lang.[ft].formatter.args
-      local extend_args = O.lang.css.formatter.args
-
-      for i = 1, #extend_args do
-        table.insert(args, extend_args[i])
-      end
-
-      return {
-        exe = prettier_instance,
-        args = args,
-        stdin = true,
-      }
-    end,
-  }
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if not require("lv-utils").check_lsp_client_active "cssls" then
-    local capabilities = vim.lsp.protocol.make_client_capabilities()
-    capabilities.textDocument.completion.completionItem.snippetSupport = true
-    -- npm install -g vscode-css-languageserver-bin
-    require("lspconfig").cssls.setup {
-      cmd = {
-        "node",
-        O.lang.css.lsp.path,
-        "--stdio",
-      },
-      on_attach = require("lsp").common_on_attach,
-      capabilities = capabilities,
-    }
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 59
lua/lang/dart.lua

@@ -1,59 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.dart = {
-    sdk_path = "/usr/lib/dart/bin/snapshots/analysis_server.dart.snapshot",
-    formatter = {
-      exe = "dart",
-      args = { "format" },
-      stdin = true,
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["dart"] = {
-    function()
-      return {
-        exe = O.lang.dart.formatter.exe,
-        args = O.lang.dart.formatter.args,
-        stdin = O.lang.dart.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "dartls" then
-    return
-  end
-
-  require("lspconfig").dartls.setup {
-    cmd = { "dart", O.lang.dart.sdk_path, "--lsp" },
-    on_attach = require("lsp").common_on_attach,
-    init_options = {
-      closingLabels = false,
-      flutterOutline = false,
-      onlyAnalyzeProjectsWithOpenFiles = false,
-      outline = false,
-      suggestFromUnimportedLibraries = true,
-    },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 39
lua/lang/dockerfile.lua

@@ -1,39 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.docker = {
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/dockerfile/node_modules/.bin/docker-langserver",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "dockerls" then
-    return
-  end
-
-  -- npm install -g dockerfile-language-server-nodejs
-  require("lspconfig").dockerls.setup {
-    cmd = { O.lang.docker.lsp.path, "--stdio" },
-    on_attach = require("lsp").common_on_attach,
-    root_dir = vim.loop.cwd,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 61
lua/lang/elixir.lua

@@ -1,61 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.elixir = {
-    formatter = {
-      exe = "mix",
-      args = { "format" },
-      stdin = true,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/elixir/elixir-ls/language_server.sh",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["elixir"] = {
-    function()
-      return {
-        exe = O.lang.elixir.formatter.exe,
-        args = O.lang.elixir.formatter.args,
-        stdin = O.lang.elixir.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "elixirls" then
-    return
-  end
-
-  require("lspconfig").elixirls.setup {
-    cmd = { O.lang.elixir.lsp.path },
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
--- needed for the LSP to recognize elixir files (alternativly 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
---   au BufRead,BufNewFile mix.lock set filetype=elixir
--- ]]
-
-return M

+ 0 - 48
lua/lang/elm.lua

@@ -1,48 +0,0 @@
-local M = {}
-
-M.config = function()
-  local elm_bin = DATA_PATH .. "/lspinstall/elm/node_modules/.bin"
-
-  O.lang.elm = {
-    lsp = {
-      path = elm_bin .. "/elm-language-server",
-      format = elm_bin .. "/elm-format",
-      root = elm_bin,
-      test = elm_bin .. "/elm-test",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "elmls" then
-    return
-  end
-
-  require("lspconfig").elmls.setup {
-    cmd = { O.lang.elm.lsp.path },
-    on_attach = require("lsp").common_on_attach,
-    init_options = {
-      elmAnalyseTrigger = "change",
-      elmFormatPath = O.lang.elm.lsp.format,
-      elmPath = O.lang.elm.lsp.root,
-      elmTestPath = O.lang.elm.lsp.test,
-    },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 32
lua/lang/erlang.lua

@@ -1,32 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.erlang = {}
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "erlangls" then
-    return
-  end
-
-  require("lspconfig").erlangls.setup {
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 42
lua/lang/euphoria3.lua

@@ -1,42 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "elixirls" then
-    return
-  end
-
-  -- TODO: Remove this at some point
-  require("lspconfig").elixirls.setup {
-    cmd = { DATA_PATH .. "/lspinstall/elixir/elixir-ls/language_server.sh" },
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
--- needed for the LSP to recognize elixir files (alternativly 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
---   au BufRead,BufNewFile mix.lock set filetype=elixir
--- ]])
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 28
lua/lang/fish.lua

@@ -1,28 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatters (if applicable)
-  return "No formatters configured!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  -- TODO: implement lsp
-  return "No LSP configured!"
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 60
lua/lang/go.lua

@@ -1,60 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.go = {
-    formatter = {
-      exe = "gofmt",
-      args = {},
-      stdin = true,
-    },
-    linters = {
-      "golangcilint",
-      "revive",
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/go/gopls",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["go"] = {
-    function()
-      return {
-        exe = O.lang.go.formatter.exe,
-        args = O.lang.go.formatter.args,
-        stdin = O.lang.go.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    go = O.lang.go.linters,
-  }
-end
-
-M.lsp = function()
-  if not require("lv-utils").check_lsp_client_active "gopls" then
-    require("lspconfig").gopls.setup {
-      cmd = { O.lang.go.lsp.path },
-      settings = { gopls = { analyses = { unusedparams = true }, staticcheck = true } },
-      root_dir = require("lspconfig").util.root_pattern(".git", "go.mod"),
-      init_options = { usePlaceholders = true, completeUnimported = true },
-      on_attach = require("lsp").common_on_attach,
-    }
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 38
lua/lang/graphql.lua

@@ -1,38 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.graphql = {
-    lsp = {
-      path = "graphql-lsp",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "graphql" then
-    return
-  end
-
-  -- npm install -g graphql-language-service-cli
-  require("lspconfig").graphql.setup {
-    cmd = { O.lang.graphql.lsp.path, "server", "-m", "stream" },
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 50
lua/lang/html.lua

@@ -1,50 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.html = {
-    linters = {
-      "tidy",
-      -- https://docs.errata.ai/vale/scoping#html
-      "vale",
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/html/vscode-html/html-language-features/server/dist/node/htmlServerMain.js",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatters (if applicable)
-  return "No formatters configured!"
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    html = O.lang.html.linters,
-  }
-end
-
-M.lsp = function()
-  if not require("lv-utils").check_lsp_client_active "html" then
-    -- npm install -g vscode-html-languageserver-bin
-    local capabilities = vim.lsp.protocol.make_client_capabilities()
-    capabilities.textDocument.completion.completionItem.snippetSupport = true
-
-    require("lspconfig").html.setup {
-      cmd = {
-        "node",
-        O.lang.html.lsp.path,
-        "--stdio",
-      },
-      on_attach = require("lsp").common_on_attach,
-      capabilities = capabilities,
-    }
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 127
lua/lang/java.lua

@@ -1,127 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.java = {
-    java_tools = {
-      active = false,
-    },
-    formatter = {
-      exe = "prettier",
-      args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0), "--single-quote" },
-    },
-  }
-end
-
-M.format = function()
-  vim.cmd "let proj = FindRootDirectory()"
-  local root_dir = vim.api.nvim_get_var "proj"
-
-  -- use the global prettier if you didn't find the local one
-  local prettier_instance = root_dir .. "/node_modules/.bin/prettier"
-  if vim.fn.executable(prettier_instance) ~= 1 then
-    prettier_instance = O.lang.tsserver.formatter.exe
-  end
-
-  O.formatters.filetype["java"] = {
-    function()
-      return {
-        exe = prettier_instance,
-        -- TODO: allow user to override this
-        args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0) },
-        stdin = true,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "jdtls" then
-    return
-  end
-
-  if O.lang.java.java_tools.active then
-    -- find_root looks for parent directories relative to the current buffer containing one of the given arguments.
-    if vim.fn.has "mac" == 1 then
-      WORKSPACE_PATH = "/Users/" .. USER .. "/workspace/"
-    elseif vim.fn.has "unix" == 1 then
-      WORKSPACE_PATH = "/home/" .. USER .. "/workspace/"
-    else
-      print "Unsupported system"
-    end
-
-    JAVA_LS_EXECUTABLE = os.getenv "HOME" .. "/.local/share/lunarvim/lvim/utils/bin/jdtls"
-
-    require("jdtls").start_or_attach {
-      on_attach = require("lsp").common_on_attach,
-      cmd = { JAVA_LS_EXECUTABLE, WORKSPACE_PATH .. vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t") },
-    }
-
-    vim.api.nvim_set_keymap(
-      "n",
-      "<leader>la",
-      ":lua require('jdtls').code_action()<CR>",
-      { noremap = true, silent = true }
-    )
-    vim.api.nvim_set_keymap(
-      "n",
-      "<leader>lR",
-      ":lua require('jdtls').code_action(false, 'refactor')<CR>",
-      { noremap = true, silent = true }
-    )
-
-    vim.cmd "command! -buffer JdtCompile lua require('jdtls').compile()"
-    vim.cmd "command! -buffer JdtUpdateConfig lua require('jdtls').update_project_config()"
-    -- vim.cmd "command! -buffer JdtJol lua require('jdtls').jol()"
-    vim.cmd "command! -buffer JdtBytecode lua require('jdtls').javap()"
-    -- vim.cmd "command! -buffer JdtJshell lua require('jdtls').jshell()"
-  else
-    local util = require "lspconfig/util"
-
-    require("lspconfig").jdtls.setup {
-      on_attach = require("lsp").common_on_attach,
-      cmd = { DATA_PATH .. "/lspinstall/java/jdtls.sh" },
-      filetypes = { "java" },
-      root_dir = util.root_pattern { ".git", "build.gradle", "pom.xml" },
-      -- init_options = {bundles = bundles}
-      -- on_attach = require'lsp'.common_on_attach
-    }
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
--- local bundles = {
---     vim.fn.glob(
---         CONFIG_PATH.."/.debuggers/java-debug/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar")
--- };
-
--- require('jdtls').start_or_attach({
---     on_attach = on_attach,
---     cmd = {DATA_PATH .. "/lspinstall/java/jdtls.sh"},
---     root_dir = require('jdtls.setup').find_root({'build.gradle', 'pom.xml', '.git'}),
---     init_options = {bundles = bundles}
--- })
-
--- TODO: setup autoformat stuff later
--- _java = {
---     -- {'FileType', 'java', 'luafile '..CONFIG_PATH..'/lua/lsp/java-ls.lua'},
---     {
---         'FileType', 'java',
---         'nnoremap ca <Cmd>lua require(\'jdtls\').code_action()<CR>'
---     }
--- }
-
-return M

+ 0 - 25
lua/lang/javascript.lua

@@ -1,25 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function() end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 25
lua/lang/javascriptreact.lua

@@ -1,25 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function() end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 72
lua/lang/json.lua

@@ -1,72 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.json = {
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    formatter = {
-      exe = "python",
-      args = { "-m", "json.tool" },
-      stdin = true,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/json/vscode-json/json-language-features/server/dist/node/jsonServerMain.js",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["json"] = {
-    function()
-      return {
-        exe = O.lang.json.formatter.exe,
-        args = O.lang.json.formatter.args,
-        stdin = O.lang.json.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "jsonls" then
-    return
-  end
-
-  -- npm install -g vscode-json-languageserver
-  require("lspconfig").jsonls.setup {
-    cmd = {
-      "node",
-      O.lang.json.lsp.path,
-      "--stdio",
-    },
-    on_attach = require("lsp").common_on_attach,
-
-    commands = {
-      Format = {
-        function()
-          vim.lsp.buf.range_formatting({}, { 0, 0 }, { vim.fn.line "$", 0 })
-        end,
-      },
-    },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 53
lua/lang/julia.lua

@@ -1,53 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.julia = {
-    lsp = {
-      path = CONFIG_PATH .. "/lua/lsp/julia/run.jl",
-    },
-  }
-end
-
-M.format = function()
-  -- todo: implement formatters (if applicable)
-  return "no formatters configured!"
-end
-
-M.lint = function()
-  -- todo: implement linters (if applicable)
-  return "no linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "julials" then
-    return
-  end
-  -- Add the following lines to a new julia file, e.g. install.jl
-  -- using Pkg
-  -- Pkg.instantiate()
-  -- Run the file you created.
-  -- julia install.jl
-  -- Julia language server will now be installed on your system.
-
-  local cmd = {
-    "julia",
-    "--startup-file=no",
-    "--history-file=no",
-    -- vim.fn.expand "~/.config/nvim/lua/lsp/julia/run.jl",
-    O.lang.julia.lsp.path,
-  }
-  require("lspconfig").julials.setup {
-    cmd = cmd,
-    on_new_config = function(new_config, _)
-      new_config.cmd = cmd
-    end,
-    filetypes = { "julia" },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 67
lua/lang/kotlin.lua

@@ -1,67 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.kotlin = {
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/kotlin/server/bin/kotlin-language-server",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "kotlin_language_server" then
-    return
-  end
-
-  --- default config for gradle-projects of the
-  --- kotlin-language-server: https://github.com/fwcd/kotlin-language-server
-  ---
-  --- This server requires vim to be aware of the kotlin-filetype.
-  --- You could refer for this capability to:
-  --- 	https://github.com/udalov/kotlin-vim (recommended)
-  --- 	Note that there is no LICENSE specified yet.
-
-  local util = require "lspconfig/util"
-
-  local bin_name = O.lang.kotlin.lsp.path
-  if vim.fn.has "win32" == 1 then
-    bin_name = bin_name .. ".bat"
-  end
-
-  local root_files = {
-    "settings.gradle", -- Gradle (multi-project)
-    "settings.gradle.kts", -- Gradle (multi-project)
-    "build.xml", -- Ant
-    "pom.xml", -- Maven
-  }
-
-  local fallback_root_files = {
-    "build.gradle", -- Gradle
-    "build.gradle.kts", -- Gradle
-  }
-
-  require("lspconfig").kotlin_language_server.setup {
-    cmd = { bin_name },
-    on_attach = require("lsp").common_on_attach,
-    root_dir = function(fname)
-      return util.root_pattern(unpack(root_files))(fname) or util.root_pattern(unpack(fallback_root_files))(fname)
-    end,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 25
lua/lang/less.lua

@@ -1,25 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function() end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 87
lua/lang/lua.lua

@@ -1,87 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.lua = {
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    formatter = {
-      exe = "stylua",
-      args = {},
-      stdin = false,
-    },
-    linters = { "luacheck" },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/lua/sumneko-lua-language-server",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["lua"] = {
-    function()
-      return {
-        exe = O.lang.lua.formatter.exe,
-        args = O.lang.lua.formatter.args,
-        stdin = O.lang.lua.formatter.stdin,
-        tempfile_prefix = ".formatter",
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    lua = O.lang.lua.linters,
-  }
-end
-
-M.lsp = function()
-  if not require("lv-utils").check_lsp_client_active "sumneko_lua" then
-    -- https://github.com/sumneko/lua-language-server/wiki/Build-and-Run-(Standalone)
-    local sumneko_main = string.gsub(O.lang.lua.lsp.path, "sumneko-lua-language-server", "main.lua")
-
-    require("lspconfig").sumneko_lua.setup {
-      cmd = { O.lang.lua.lsp.path, "-E", sumneko_main },
-      on_attach = require("lsp").common_on_attach,
-      settings = {
-        Lua = {
-          runtime = {
-            -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
-            version = "LuaJIT",
-            -- Setup your lua path
-            path = vim.split(package.path, ";"),
-          },
-          diagnostics = {
-            -- Get the language server to recognize the `vim` global
-            globals = { "vim", "O" },
-          },
-          workspace = {
-            -- Make the server aware of Neovim runtime files
-            library = {
-              [vim.fn.expand "~/.local/share/lunarvim/lvim/lua"] = true,
-              [vim.fn.expand "$VIMRUNTIME/lua"] = true,
-              [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true,
-            },
-            maxPreload = 100000,
-            preloadFileSize = 1000,
-          },
-        },
-      },
-    }
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 88
lua/lang/php.lua

@@ -1,88 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.php = {
-    format = {
-      format = {
-        default = "psr12",
-      },
-    },
-    environment = {
-      php_version = "7.4",
-    },
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    filetypes = { "php", "phtml" },
-    formatter = {
-      exe = "phpcbf",
-      args = { "--standard=PSR12", vim.api.nvim_buf_get_name(0) },
-      stdin = false,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/php/node_modules/.bin/intelephense",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["php"] = {
-    function()
-      return {
-        exe = O.lang.php.formatter.exe,
-        args = O.lang.php.formatter.args,
-        stdin = O.lang.php.formatter.stdin,
-        tempfile_prefix = ".formatter",
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "intelephense" then
-    return
-  end
-
-  require("lspconfig").intelephense.setup {
-    cmd = { O.lang.php.lsp.path, "--stdio" },
-    on_attach = require("lsp").common_on_attach,
-    handlers = {
-      ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-        virtual_text = O.lang.php.diagnostics.virtual_text,
-        signs = O.lang.php.diagnostics.signs,
-        underline = O.lang.php.diagnostics.underline,
-        update_in_insert = true,
-      }),
-    },
-    filetypes = O.lang.php.filetypes,
-    settings = {
-      intelephense = {
-        format = {
-          braces = O.lang.php.format.braces,
-        },
-        environment = {
-          phpVersion = O.lang.php.environment.php_version,
-        },
-      },
-    },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 95
lua/lang/python.lua

@@ -1,95 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.python = {
-    -- @usage can be flake8 or yapf
-    linter = "",
-    isort = false,
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    analysis = {
-      type_checking = "basic",
-      auto_search_paths = true,
-      use_library_code_types = true,
-    },
-    formatter = {
-      exe = "yapf",
-      args = {},
-      stdin = true,
-    },
-    linters = {
-      "flake8",
-      "pylint",
-      "mypy",
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/python/node_modules/.bin/pyright-langserver",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["python"] = {
-    function()
-      return {
-        exe = O.lang.python.formatter.exe,
-        args = O.lang.python.formatter.args,
-        stdin = O.lang.python.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    python = O.lang.python.linters,
-  }
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "pyright" then
-    return
-  end
-  -- npm i -g pyright
-  require("lspconfig").pyright.setup {
-    cmd = {
-      O.lang.python.lsp.path,
-      "--stdio",
-    },
-    on_attach = require("lsp").common_on_attach,
-    handlers = {
-      ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-        virtual_text = O.lang.python.diagnostics.virtual_text,
-        signs = O.lang.python.diagnostics.signs,
-        underline = O.lang.python.diagnostics.underline,
-        update_in_insert = true,
-      }),
-    },
-    settings = {
-      python = {
-        analysis = {
-          typeCheckingMode = O.lang.python.analysis.type_checking,
-          autoSearchPaths = O.lang.python.analysis.auto_search_paths,
-          useLibraryCodeForTypes = O.lang.python.analysis.use_library_code_types,
-        },
-      },
-    },
-  }
-end
-
-M.dap = function()
-  if O.plugin.dap.active then
-    local dap_install = require "dap-install"
-    dap_install.config("python_dbg", {})
-  end
-end
-
-return M

+ 0 - 56
lua/lang/r.lua

@@ -1,56 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- R -e 'install.packages("formatR",repos = "http://cran.us.r-project.org")'
-  -- R -e 'install.packages("readr",repos = "http://cran.us.r-project.org")'
-  O.lang.r = {
-    formatter = {
-      exe = "R",
-      args = {
-        "--slave",
-        "--no-restore",
-        "--no-save",
-        '-e "formatR::tidy_source(text=readr::read_file(file(\\"stdin\\")), arrow=FALSE)"',
-      },
-      stdin = true,
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["r"] = {
-    function()
-      return {
-        exe = O.lang.r.formatter.exe,
-        args = O.lang.r.formatter.args,
-        stdin = O.lang.r.formatter.stdin,
-      }
-    end,
-  }
-  O.formatters.filetype["rmd"] = O.formatters.filetype["r"]
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "r_language_server" then
-    return
-  end
-  -- R -e 'install.packages("languageserver",repos = "http://cran.us.r-project.org")'
-  require("lspconfig").r_language_server.setup {}
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 77
lua/lang/ruby.lua

@@ -1,77 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.ruby = {
-    diagnostics = {
-      virtualtext = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    filetypes = { "rb", "erb", "rakefile", "ruby" },
-    formatter = {
-      exe = "rufo",
-      args = { "-x" },
-      stdin = true,
-    },
-    linters = { "ruby" },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/ruby/solargraph/solargraph",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["ruby"] = {
-    function()
-      return {
-        exe = O.lang.ruby.formatter.exe,
-        args = O.lang.ruby.formatter.args,
-        stdin = O.lang.ruby.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    ruby = O.lang.ruby.linters,
-  }
-end
-
-M.lsp = function()
-  if not require("lv-utils").check_lsp_client_active "sorbet" then
-    require("lspconfig").sorbet.setup {}
-  end
-
-  if not require("lv-utils").check_lsp_client_active "solargraph" then
-    -- If you are using rvm, make sure to change below configuration
-    require("lspconfig").solargraph.setup {
-      cmd = { O.lang.ruby.lsp.path, "stdio" },
-      on_attach = require("lsp").common_on_attach,
-      handlers = {
-        ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-          virtual_text = O.lang.ruby.diagnostics.virtual_text,
-          signs = O.lang.ruby.diagnostics.signs,
-          underline = O.lang.ruby.diagnostics.underline,
-          update_in_insert = true,
-        }),
-      },
-      filetypes = O.lang.ruby.filetypes,
-    }
-  end
-end
-
-M.dap = function()
-  -- gem install readapt ruby-debug-ide
-  if O.plugin.dap.active then
-    local dap_install = require "dap-install"
-    dap_install.config("ruby_vsc_dbg", {})
-  end
-end
-
-return M

+ 0 - 155
lua/lang/rust.lua

@@ -1,155 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.rust = {
-    rust_tools = {
-      active = false,
-      parameter_hints_prefix = "<-",
-      other_hints_prefix = "=>", -- prefix for all the other hints (type, chaining)
-    },
-    -- @usage can be clippy
-    formatter = {
-      exe = "rustfmt",
-      args = { "--emit=stdout", "--edition=2018" },
-      stdin = true,
-    },
-    linter = "",
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/rust/rust-analyzer",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["rust"] = {
-    function()
-      return {
-        exe = O.lang.rust.formatter.exe,
-        args = O.lang.rust.formatter.args,
-        stdin = O.lang.rust.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "rust_analyzer" then
-    return
-  end
-
-  if O.lang.rust.rust_tools.active then
-    local opts = {
-      tools = { -- rust-tools options
-        -- automatically set inlay hints (type hints)
-        -- There is an issue due to which the hints are not applied on the first
-        -- opened file. For now, write to the file to trigger a reapplication of
-        -- the hints or just run :RustSetInlayHints.
-        -- default: true
-        autoSetHints = true,
-
-        -- whether to show hover actions inside the hover window
-        -- this overrides the default hover handler
-        -- default: true
-        hover_with_actions = true,
-
-        runnables = {
-          -- whether to use telescope for selection menu or not
-          -- default: true
-          use_telescope = true,
-
-          -- rest of the opts are forwarded to telescope
-        },
-
-        inlay_hints = {
-          -- wheter to show parameter hints with the inlay hints or not
-          -- default: true
-          show_parameter_hints = true,
-
-          -- prefix for parameter hints
-          -- default: "<-"
-          parameter_hints_prefix = O.lang.rust.rust_tools.parameter_hints_prefix,
-
-          -- prefix for all the other hints (type, chaining)
-          -- default: "=>"
-          other_hints_prefix = O.lang.rust.rust_tools.other_hints_prefix,
-
-          -- whether to align to the lenght of the longest line in the file
-          max_len_align = false,
-
-          -- padding from the left if max_len_align is true
-          max_len_align_padding = 1,
-
-          -- whether to align to the extreme right or not
-          right_align = false,
-
-          -- padding from the right if right_align is true
-          right_align_padding = 7,
-        },
-
-        hover_actions = {
-          -- the border that is used for the hover window
-          -- see vim.api.nvim_open_win()
-          border = {
-            { "╭", "FloatBorder" },
-            { "─", "FloatBorder" },
-            { "╮", "FloatBorder" },
-            { "│", "FloatBorder" },
-            { "╯", "FloatBorder" },
-            { "─", "FloatBorder" },
-            { "╰", "FloatBorder" },
-            { "│", "FloatBorder" },
-          },
-        },
-      },
-
-      -- all the opts to send to nvim-lspconfig
-      -- these override the defaults set by rust-tools.nvim
-      -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
-      server = {
-        cmd = { O.lang.rust.lsp.path },
-        on_attach = require("lsp").common_on_attach,
-      }, -- rust-analyser options
-    }
-    require("rust-tools").setup(opts)
-  else
-    require("lspconfig").rust_analyzer.setup {
-      cmd = { O.lang.rust.lsp.path },
-      on_attach = require("lsp").common_on_attach,
-      filetypes = { "rust" },
-      root_dir = require("lspconfig.util").root_pattern("Cargo.toml", "rust-project.json"),
-    }
-  end
-
-  -- TODO: fix these mappings
-  vim.api.nvim_exec(
-    [[
-    autocmd Filetype rust nnoremap <leader>lm <Cmd>RustExpandMacro<CR>
-    autocmd Filetype rust nnoremap <leader>lH <Cmd>RustToggleInlayHints<CR>
-    autocmd Filetype rust nnoremap <leader>le <Cmd>RustRunnables<CR>
-    autocmd Filetype rust nnoremap <leader>lh <Cmd>RustHoverActions<CR>
-    ]],
-    true
-  )
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 80
lua/lang/scala.lua

@@ -1,80 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.scala = {
-    metals = {
-      active = false,
-      server_version = "0.10.5",
-      excluded_packages = {},
-      show_implicit_arguments = false,
-      show_inferred_type = true,
-      status_bar_provider = false,
-    },
-    formatter = {
-      exe = "scalafmt",
-      args = { "--stdin" },
-      stdin = true,
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["scala"] = {
-    function()
-      return {
-        exe = O.lang.scala.formatter.exe,
-        args = O.lang.scala.formatter.args,
-        stdin = O.lang.scala.formatter.stdin,
-      }
-    end,
-  }
-  O.formatters.filetype["sbt"] = O.formatters.filetype["scala"]
-  --  To understand sbt files on stdin, scalafmt needs to assume any old filename
-  --  that ends in .sbt.  Using a dummy filename instead of the actual one is
-  --  required to support buffers of sbt filetype without the extension.
-  O.formatters.filetype["sbt"].args = { "--stdin", "--assume-filename", "foo.sbt" }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  -- enable metal server integration
-  if O.lang.scala.metals.active then
-    vim.g["metals_server_version"] = O.lang.scala.metals.server_version
-    -- https://github.com/scalameta/nvim-metals#prerequisites
-    vim.opt_global.shortmess:remove("F"):append "c"
-    local metals_config = require("metals").bare_config
-    metals_config.on_attach = function()
-      require("completion").on_attach()
-    end
-    metals_config.handlers["textDocument/publishDiagnostics"] =
-      vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-        virtual_text = {
-          prefix = "",
-        },
-      })
-    metals_config.settings = {
-      showImplicitArguments = O.lang.scala.metals.show_implicit_arguments,
-      showInferredType = O.lang.scala.metals.show_inferred_type,
-      excludedPackages = O.lang.scala.metals.excluded_packages,
-    }
-    metals_config.init_options.statusBarProvider = O.lang.scala.metals.status_bar_provider
-    require "lsp"
-    require("metals").initialize_or_attach(metals_config)
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 65
lua/lang/sh.lua

@@ -1,65 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.sh = {
-    -- @usage can be 'shellcheck'
-    linter = "",
-    -- @usage can be 'shfmt'
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    formatter = {
-      exe = "shfmt",
-      args = { "-w" },
-      stdin = false,
-    },
-    linters = { "shellcheck" },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/bash/node_modules/.bin/bash-language-server",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["sh"] = {
-    function()
-      return {
-        exe = O.lang.sh.formatter.exe,
-        args = O.lang.sh.formatter.args,
-        stdin = O.lang.sh.formatter.stdin,
-        tempfile_prefix = ".formatter",
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    sh = O.lang.sh.linters,
-  }
-end
-
-M.lsp = function()
-  if not require("lv-utils").check_lsp_client_active "bashls" then
-    -- npm i -g bash-language-server
-    require("lspconfig").bashls.setup {
-      cmd = { O.lang.sh.lsp.path, "start" },
-      on_attach = require("lsp").common_on_attach,
-      filetypes = { "sh", "zsh" },
-    }
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 39
lua/lang/svelte.lua

@@ -1,39 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.svelte = {
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/svelte/node_modules/.bin/svelteserver",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter (if applicable)
-  return "No formatter configured!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "svelte" then
-    return
-  end
-
-  require("lspconfig").svelte.setup {
-    cmd = { O.lang.svelte.lsp.path, "--stdio" },
-    filetypes = { "svelte" },
-    root_dir = require("lspconfig.util").root_pattern("package.json", ".git"),
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 55
lua/lang/swift.lua

@@ -1,55 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.swift = {
-    formatter = {
-      exe = "swiftformat",
-      args = {},
-      stdin = true,
-    },
-    lsp = {
-      path = "sourcekit-lsp",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter (if applicable)
-  return "No formatter configured!"
-end
-
-M.lint = function()
-  O.formatters.filetype["swift"] = {
-    function()
-      return {
-        exe = O.lang.swift.formatter.exe,
-        args = O.lang.swift.formatter.args,
-        stdin = O.lang.swift.formatter.stdin,
-      }
-    end,
-  }
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "sourcekit" then
-    return
-  end
-
-  require("lspconfig").sourcekit.setup {
-    cmd = { "xcrun", O.lang.swift.lsp.path },
-    on_attach = require("lsp").common_on_attach,
-    filetypes = { "swift" },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 57
lua/lang/terraform.lua

@@ -1,57 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.terraform = {
-    formatter = {
-      exe = "terraform",
-      args = { "fmt" },
-      stdin = false,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/terraform/terraform-ls",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["hcl"] = {
-    function()
-      return {
-        exe = O.lang.terraform.formatter.exe,
-        args = O.lang.terraform.formatter.args,
-        stdin = O.lang.terraform.formatter.stdin,
-        tempfile_prefix = ".formatter",
-      }
-    end,
-  }
-  O.formatters.filetype["tf"] = O.formatters.filetype["hcl"]
-
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "terraformls" then
-    return
-  end
-
-  require("lspconfig").terraformls.setup {
-    cmd = { O.lang.terraform.lsp.path, "serve" },
-    on_attach = require("lsp").common_on_attach,
-    filetypes = { "tf", "terraform", "hcl" },
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 159
lua/lang/tex.lua

@@ -1,159 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.latex = {
-    filetypes = { "tex", "bib" },
-    aux_directory = nil,
-    bibtex_formatter = "texlab",
-    diagnostics_delay = 300,
-    formatter_line_length = 80,
-    latex_formatter = "latexindent",
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/latex/texlab",
-    },
-    build = {
-      executable = "latexmk",
-      args = { "-pdf", "-interaction=nonstopmode", "-synctex=1", "%f" },
-      on_save = false,
-      forward_search_after = false,
-    },
-    chktex = {
-      on_open_and_save = false,
-      on_edit = false,
-    },
-    forward_search = {
-      executable = nil,
-      args = {},
-    },
-    latexindent = {
-      ["local"] = nil,
-      modify_line_breaks = false,
-    },
-    diagnostics = {
-      virtual_text = { spacing = 0, prefix = "" },
-      signs = true,
-      underline = true,
-    },
-    linters = { "chktex" },
-    auto_save = false,
-    ignore_errors = {},
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    tex = O.lang.latex.linters,
-  }
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "texlab" then
-    return
-  end
-
-  local preview_settings = {}
-
-  local sumatrapdf_args = { "-reuse-instance", "%p", "-forward-search", "%f", "%l" }
-  local evince_args = { "-f", "%l", "%p", '"code -g %f:%l"' }
-  local okular_args = { "--unique", "file:%p#src:%l%f" }
-  local zathura_args = { "--synctex-forward", "%l:1:%f", "%p" }
-  local qpdfview_args = { "--unique", "%p#src:%f:%l:1" }
-  local skim_args = { "%l", "%p", "%f" }
-
-  if O.lang.latex.forward_search.executable == "C:/Users/{User}/AppData/Local/SumatraPDF/SumatraPDF.exe" then
-    preview_settings = sumatrapdf_args
-  elseif O.lang.latex.forward_search.executable == "evince-synctex" then
-    preview_settings = evince_args
-  elseif O.lang.latex.forward_search.executable == "okular" then
-    preview_settings = okular_args
-  elseif O.lang.latex.forward_search.executable == "zathura" then
-    preview_settings = zathura_args
-  elseif O.lang.latex.forward_search.executable == "qpdfview" then
-    preview_settings = qpdfview_args
-  elseif O.lang.latex.forward_search.executable == "/Applications/Skim.app/Contents/SharedSupport/displayline" then
-    preview_settings = skim_args
-  end
-
-  require("lspconfig").texlab.setup {
-    cmd = { O.lang.latex.lsp.path },
-    on_attach = require("lsp").common_on_attach,
-    handlers = {
-      ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-        virtual_text = O.lang.latex.diagnostics.virtual_text,
-        signs = O.lang.latex.diagnostics.signs,
-        underline = O.lang.latex.diagnostics.underline,
-        update_in_insert = true,
-      }),
-    },
-    filetypes = { "tex", "bib" },
-    settings = {
-      texlab = {
-        auxDirectory = O.lang.latex.aux_directory,
-        bibtexFormatter = O.lang.latex.bibtex_formatter,
-        build = {
-          args = O.lang.latex.build.args,
-          executable = O.lang.latex.build.executable,
-          forwardSearchAfter = O.lang.latex.build.forward_search_after,
-          onSave = O.lang.latex.build.on_save,
-        },
-        chktex = {
-          onEdit = O.lang.latex.chktex.on_edit,
-          onOpenAndSave = O.lang.latex.chktex.on_open_and_save,
-        },
-        diagnosticsDelay = O.lang.latex.diagnostics_delay,
-        formatterLineLength = O.lang.latex.formatter_line_length,
-        forwardSearch = {
-          args = preview_settings,
-          executable = O.lang.latex.forward_search.executable,
-        },
-        latexFormatter = O.lang.latex.latex_formatter,
-        latexindent = {
-          modifyLineBreaks = O.lang.latex.latexindent.modify_line_breaks,
-        },
-      },
-    },
-  }
-  vim.g.vimtex_compiler_method = "latexmk"
-  vim.g.vimtex_view_method = "zathura"
-  vim.g.vimtex_fold_enabled = 0
-  vim.g.vimtex_quickfix_ignore_filters = O.lang.latex.ignore_errors
-
-  O.plugin.which_key.mappings["t"] = {
-    name = "+Latex",
-    c = { "<cmd>VimtexCompile<cr>", "Toggle Compilation Mode" },
-    f = { "<cmd>call vimtex#fzf#run()<cr>", "Fzf Find" },
-    i = { "<cmd>VimtexInfo<cr>", "Project Information" },
-    s = { "<cmd>VimtexStop<cr>", "Stop Project Compilation" },
-    t = { "<cmd>VimtexTocToggle<cr>", "Toggle Table Of Content" },
-    v = { "<cmd>VimtexView<cr>", "View PDF" },
-    b = { "<cmd>TexlabBuild<cr>", "Build with Texlab" },
-    p = { "<cmd>TexlabForward<cr>", "Preview with Texlab" },
-  }
-
-  -- Compile on initialization, cleanup on quit
-  vim.api.nvim_exec(
-    [[
-        augroup vimtex_event_1
-            au!
-            au User VimtexEventQuit     call vimtex#compiler#clean(0)
-            au User VimtexEventInitPost call vimtex#compiler#compile()
-        augroup END
-    ]],
-    false
-  )
-  if O.lang.latex.auto_save then
-    vim.api.nvim_exec([[au FocusLost * :wa]], false)
-  end
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 25
lua/lang/typescript.lua

@@ -1,25 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function() end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 25
lua/lang/typescriptreact.lua

@@ -1,25 +0,0 @@
-local M = {}
-
-M.config = function()
-  -- TODO: implement config for language
-  return "No config available!"
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function() end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 40
lua/lang/vim.lua

@@ -1,40 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.vim = {
-    linters = { "vint" },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/vim/node_modules/.bin/vim-language-server",
-    },
-  }
-end
-
-M.format = function()
-  -- TODO: implement formatter for language
-  return "No formatter available!"
-end
-
-M.lint = function()
-  require("lint").linters_by_ft = {
-    vim = O.lang.vim.linters,
-  }
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "vimls" then
-    return
-  end
-
-  -- npm install -g vim-language-server
-  require("lspconfig").vimls.setup {
-    cmd = { O.lang.vim.lsp.path, "--stdio" },
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 71
lua/lang/vue.lua

@@ -1,71 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.vue = {
-    formatter = {
-      exe = "prettier",
-      args = {
-        "--stdin-filepath",
-        "${FILEPATH}",
-      },
-      stdin = true,
-    },
-    auto_import = true,
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/vue/node_modules/.bin/vls",
-    },
-  }
-end
-
-M.format = function()
-  vim.cmd "let proj = FindRootDirectory()"
-  local root_dir = vim.api.nvim_get_var "proj"
-
-  -- use the global formatter if you didn't find the local one
-  local formatter_instance = root_dir .. "/node_modules/.bin/" .. O.lang.vue.formatter.exe
-  if vim.fn.executable(formatter_instance) ~= 1 then
-    formatter_instance = O.lang.vue.formatter.exe
-  end
-
-  local ft = vim.bo.filetype
-  O.formatters.filetype[ft] = {
-    function()
-      local lv_utils = require "lv-utils"
-      return {
-        exe = formatter_instance,
-        args = lv_utils.gsub_args(O.lang.vue.formatter.args),
-        stdin = O.lang.vue.formatter.stdin,
-      }
-    end,
-  }
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "vuels" then
-    return
-  end
-
-  -- Vue language server configuration (vetur)
-  require("lspconfig").vuels.setup {
-    cmd = { O.lang.vue.lsp.path, "--stdio" },
-    on_attach = require("lsp").common_on_attach,
-  }
-
-  require("lsp.ts-fmt-lint").setup()
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

+ 0 - 54
lua/lang/yaml.lua

@@ -1,54 +0,0 @@
-local M = {}
-
-M.config = function()
-  O.lang.yaml = {
-    formatter = {
-      exe = "prettier",
-      args = { "--stdin-filepath", vim.api.nvim_buf_get_name(0), "--single-quote" },
-      stdin = true,
-    },
-    lsp = {
-      path = DATA_PATH .. "/lspinstall/yaml/node_modules/.bin/yaml-language-server",
-    },
-  }
-end
-
-M.format = function()
-  O.formatters.filetype["yaml"] = {
-    function()
-      return {
-        exe = O.lang.yaml.formatter.exe,
-        args = O.lang.yaml.formatter.args,
-        stdin = O.lang.yaml.formatter.stdin,
-      }
-    end,
-  }
-  require("formatter.config").set_defaults {
-    logging = false,
-    filetype = O.formatters.filetype,
-  }
-end
-
-M.lint = function()
-  -- TODO: implement linters (if applicable)
-  return "No linters configured!"
-end
-
-M.lsp = function()
-  if require("lv-utils").check_lsp_client_active "yamlls" then
-    return
-  end
-
-  -- npm install -g yaml-language-server
-  require("lspconfig").yamlls.setup {
-    cmd = { O.lang.yaml.lsp.path, "--stdio" },
-    on_attach = require("lsp").common_on_attach,
-  }
-end
-
-M.dap = function()
-  -- TODO: implement dap
-  return "No DAP configured!"
-end
-
-return M

Неке датотеке нису приказане због велике количине промена