aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/nvim/lua/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'nvim/lua/plugins')
-rw-r--r--nvim/lua/plugins/blankline.lua6
-rw-r--r--nvim/lua/plugins/bufferline.lua182
-rw-r--r--nvim/lua/plugins/cmp.lua138
-rw-r--r--nvim/lua/plugins/dap.lua95
-rw-r--r--nvim/lua/plugins/git-worktree.lua4
-rw-r--r--nvim/lua/plugins/lsp-installer.lua121
-rw-r--r--nvim/lua/plugins/lspconfig.lua97
-rw-r--r--nvim/lua/plugins/lspkind.lua29
-rw-r--r--nvim/lua/plugins/lspstatus.lua12
-rw-r--r--nvim/lua/plugins/lualine.lua5
-rw-r--r--nvim/lua/plugins/luasnip.lua13
-rw-r--r--nvim/lua/plugins/neogit.lua1
-rw-r--r--nvim/lua/plugins/null-ls.lua12
-rw-r--r--nvim/lua/plugins/nvim-tree.lua7
-rw-r--r--nvim/lua/plugins/telescope.lua51
-rw-r--r--nvim/lua/plugins/treesitter.lua9
16 files changed, 782 insertions, 0 deletions
diff --git a/nvim/lua/plugins/blankline.lua b/nvim/lua/plugins/blankline.lua
new file mode 100644
index 0000000..d68ccf9
--- /dev/null
+++ b/nvim/lua/plugins/blankline.lua
@@ -0,0 +1,6 @@
+require("indent_blankline").setup {
+ -- for example, context is off by default, use this to turn it on
+ show_current_context = true,
+ show_current_context_start = true,
+ show_end_of_line = true
+}
diff --git a/nvim/lua/plugins/bufferline.lua b/nvim/lua/plugins/bufferline.lua
new file mode 100644
index 0000000..bd3192d
--- /dev/null
+++ b/nvim/lua/plugins/bufferline.lua
@@ -0,0 +1,182 @@
+local diagnostics_signs = {
+ ['error'] = '',
+ warning = '',
+ default = '',
+}
+
+require('bufferline').setup{
+ options = {
+ always_show_bufferline = false,
+ diagnostics = 'nvim_lsp',
+ diagnostics_indicator = function(count, level, diagnostics_dict, context)
+ local s = ' '
+ for e, n in pairs(diagnostics_dict) do
+ local sym = diagnostics_signs[e] or diagnostics_signs.default
+ s = s .. (#s > 1 and ' ' or '') .. sym .. ' ' .. n
+ end
+ return s
+ end,
+ separator_style = 'slant',
+ indicator_icon = ' ',
+ buffer_close_icon = '',
+ modified_icon = '●',
+ close_icon = '',
+ close_command = "Bdelete %d",
+ right_mouse_command = "Bdelete! %d",
+ left_trunc_marker = '',
+ right_trunc_marker = '',
+ offsets = {{filetype = "NvimTree", text = "EXPLORER", text_align = "center"}},
+ show_tab_indicators = true,
+ show_close_icon = false
+ },
+ highlights = {
+ fill = {
+ guifg = {attribute = "fg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "StatusLineNC"},
+ },
+ background = {
+ guifg = {attribute = "fg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "StatusLine"}
+ },
+ buffer_visible = {
+ gui = "",
+ guifg = {attribute = "fg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "Normal"}
+ },
+ buffer_selected = {
+ gui = "",
+ guifg = {attribute = "fg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "Normal"}
+ },
+ separator = {
+ guifg = {attribute = "bg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "StatusLine"},
+ },
+ separator_selected = {
+ guifg = {attribute = "fg", highlight = "Special"},
+ guibg = {attribute = "bg", highlight = "Normal"}
+ },
+ separator_visible = {
+ guifg = {attribute = "fg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "StatusLineNC"},
+ },
+ close_button = {
+ guifg = {attribute = "fg", highlight = "Normal"},
+ guibg = {attribute = "bg", highlight = "StatusLine"}
+ },
+ close_button_selected = {
+ guifg = {attribute = "fg", highlight = "normal"},
+ guibg = {attribute = "bg", highlight = "normal"}
+ },
+ close_button_visible = {
+ guifg = {attribute = "fg", highlight = "normal"},
+ guibg = {attribute = "bg", highlight = "normal"}
+ },
+
+ }
+}
+
+-- local map = require('utils').map
+-- local bufferline = require 'bufferline'
+
+-- local bar_bg = '#1f1f1f'
+-- local bar_fg = '#c9c9c9'
+-- local elem_bg = '#2d2d2d'
+-- local elem_fg = '#8c8c8c'
+-- local selected_bg = '#444444'
+-- local selected_fg = '#efefef'
+-- local error_fg = '#ca241a'
+-- local warning_fg = '#fabd2f'
+-- local info_fg = '#83a5cb'
+-- local pick_fg = '#870000'
+
+-- local colors = {
+-- bar = { guifg = bar_fg, guibg = bar_bg },
+-- elem = { guifg = elem_fg, guibg = elem_bg },
+-- elem_inactive = { guifg = elem_fg, guibg = elem_bg },
+-- elem_selected = { guifg = selected_fg, guibg = selected_bg },
+-- separator = { guifg = bar_bg, guibg = elem_bg },
+-- separator_selected = { guifg = bar_bg, guibg = selected_bg },
+-- error = { guifg = error_fg, guibg = elem_bg, guisp = error_fg },
+-- error_selected = { guifg = error_fg, guibg = selected_bg, gui = '' },
+-- warning = { guifg = warning_fg, guibg = elem_bg, guisp = warning_fg },
+-- warning_selected = { guifg = warning_fg, guibg = selected_bg, gui = '' },
+-- info = { guifg = info_fg, guibg = elem_bg, guisp = info_fg },
+-- info_selected = { guifg = info_fg, guibg = selected_bg, gui = '' },
+-- pick = { guifg = pick_fg, guibg = elem_bg },
+-- pick_selected = { guifg = pick_fg, guibg = selected_bg },
+-- }
+
+-- local diagnostics_signs = {
+-- ['error'] = '',
+-- warning = '',
+-- default = '',
+-- }
+
+-- require('bufferline').setup{
+-- options = {
+-- always_show_bufferline = false,
+-- diagnostics = 'nvim_lsp',
+-- diagnostics_indicator = function(count, level, diagnostics_dict, context)
+-- local s = ' '
+-- for e, n in pairs(diagnostics_dict) do
+-- local sym = diagnostics_signs[e] or diagnostics_signs.default
+-- s = s .. (#s > 1 and ' ' or '') .. sym .. ' ' .. n
+-- end
+-- return s
+-- end,
+-- separator_style = 'slant',
+-- },
+-- highlights = {
+-- background = colors.elem_inactive,
+-- buffer_selected = colors.elem_selected,
+-- buffer_visible = colors.elem_inactive,
+-- close_button = colors.elem,
+-- close_button_selected = colors.elem_selected,
+-- close_button_visible = colors.elem,
+-- diagnostic = colors.info,
+-- diagnostic_selected = colors.info_selected,
+-- diagnostic_visible = colors.info,
+-- duplicate = colors.elem,
+-- duplicate_selected = colors.elem_selected,
+-- duplicate_visible = colors.elem,
+-- error = colors.error,
+-- error_diagnostic = colors.error,
+-- error_diagnostic_selected = colors.error_selected,
+-- error_selected = colors.error_selected,
+-- fill = colors.bar,
+-- hint = colors.info,
+-- hint_diagnostic = colors.info,
+-- hint_diagnostic_selected = colors.info_selected,
+-- hint_diagnostic_visible = colors.info,
+-- hint_selected = colors.info_selected,
+-- hint_visible = colors.info,
+-- info = colors.info,
+-- info_diagnostic = colors.info,
+-- info_diagnostic_selected = colors.info_selected,
+-- info_diagnostic_visible = colors.info,
+-- info_selected = colors.info_selected,
+-- info_visible = colors.info,
+-- modified = colors.elem,
+-- modified_selected = colors.elem_selected,
+-- modified_visible = colors.elem,
+-- pick = colors.pick,
+-- pick_selected = colors.pick_selected,
+-- separator = colors.separator,
+-- separator_selected = colors.separator_selected,
+-- separator_visible = colors.separator,
+-- tab = colors.elem,
+-- tab_close = colors.bar,
+-- tab_selected = colors.elem_selected,
+-- warning = colors.warning,
+-- warning_diagnostic = colors.warning,
+-- warning_diagnostic_selected = colors.warning_selected,
+-- warning_diagnostic_visible = colors.warning,
+-- warning_selected = colors.warning_selected,
+-- warning_visible = colors.warning,
+-- },
+-- }
+
+-- local opts = { silent = true, nowait = true }
+-- map('n', 'gb', '<cmd>BufferLinePick<cr>', opts)
+-- map('n', '<leader>d', '<cmd>bdelete!<cr>', opts)
diff --git a/nvim/lua/plugins/cmp.lua b/nvim/lua/plugins/cmp.lua
new file mode 100644
index 0000000..2729b0e
--- /dev/null
+++ b/nvim/lua/plugins/cmp.lua
@@ -0,0 +1,138 @@
+-- Set completeopt to have a better completion experience
+vim.o.completeopt = 'menuone,noselect'
+local cmp = require 'cmp'
+
+cmp.setup({
+ completion = {
+ -- completeopt = 'menu,menuone,noinsert',
+ },
+ snippet = {
+ expand = function(args) require('luasnip').lsp_expand(args.body) end
+ },
+ formatting = {
+ format = function(entry, vim_item)
+ -- fancy icons and a name of kind
+ vim_item.kind = require("lspkind").presets.default[vim_item.kind]
+ -- set a name for each source
+ vim_item.menu = ({
+ buffer = "[Buff]",
+ nvim_lsp = "[LSP]",
+ luasnip = "[LuaSnip]",
+ nvim_lua = "[Lua]",
+ latex_symbols = "[Latex]"
+ })[entry.source.name]
+ return vim_item
+ end
+ },
+ sources = {
+ {name = 'nvim_lsp'},
+ {name = 'nvim_lua'},
+ {name = 'path'},
+ {name = 'luasnip'},
+ {name = 'buffer', keyword_length = 1},
+ {name = 'calc'}
+ },
+ experimental = {
+ -- ghost_text = true,
+ }
+
+})
+
+-- Require function for tab to work with LUA-SNIP
+local has_words_before = function()
+ local line, col = unpack(vim.api.nvim_win_get_cursor(0))
+ return col ~= 0 and
+ vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col,
+ col)
+ :match("%s") == nil
+end
+
+cmp.setup({
+ mapping = {
+ ['<C-Space>'] = cmp.mapping.complete(),
+ ['<C-e>'] = cmp.mapping.close(),
+ ['<C-u>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-d>'] = cmp.mapping.scroll_docs(4),
+ ['<CR>'] = cmp.mapping.confirm({
+ behavior = cmp.ConfirmBehavior.Replace,
+ select = false
+ }),
+
+ ["<Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ elseif has_words_before() then
+ cmp.complete()
+ else
+ fallback()
+ end
+ end, {"i", "s"}),
+
+ ["<S-Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, {"i", "s"})
+
+ }
+})
+
+-- local luasnip = require("luasnip")
+
+-- local source_mapping = {
+-- nvim_lsp = "[LSP]",
+-- nvim_lua = "[Lua]",
+-- path = "[Path]",
+-- buffer = "[Buffer]",
+-- luasnip = "[LuaSnip]",
+-- nvim_lsp_signature_help = "[LspSignatureHelp]",
+-- calc = "[Calc]",
+-- }
+
+-- cmp.setup({
+-- snippet = {
+-- expand = function(args) require('luasnip').lsp_expand(args.body) end
+-- },
+
+-- mapping = {
+-- ['<C-p>'] = cmp.mapping.select_prev_item(),
+-- ['<C-n>'] = cmp.mapping.select_next_item(),
+-- -- Add tab support
+-- ['<S-Tab>'] = cmp.mapping.select_prev_item(),
+-- ['<Tab>'] = cmp.mapping.select_next_item(),
+-- ['<C-d>'] = cmp.mapping.scroll_docs(-4),
+-- ['<C-u>'] = cmp.mapping.scroll_docs(4),
+-- ['<C-Space>'] = cmp.mapping.complete(),
+-- ['<C-e>'] = cmp.mapping.close(),
+-- ['<CR>'] = cmp.mapping.confirm({
+-- behavior = cmp.ConfirmBehavior.Replace,
+-- select = true,
+-- })
+-- },
+
+-- formatting = {
+-- format = function(entry, vim_item)
+-- vim_item.kind = require("lspkind").presets.default[vim_item.kind]
+-- local menu = source_mapping[entry.source.name]
+-- vim_item.menu = menu
+-- return vim_item
+-- end,
+-- },
+-- -- Installed sources
+-- sources = {
+-- -- { name = 'path' },
+-- { name = "nvim_lsp" },
+-- { name = "nvim_lua" },
+-- { name = 'path' },
+-- { name = "luasnip" },
+-- { name = "buffer", keyword_length = 1 },
+-- { name = 'nvim_lsp_signature_help' },
+-- { name = 'calc' },
+-- },
+-- }) \ No newline at end of file
diff --git a/nvim/lua/plugins/dap.lua b/nvim/lua/plugins/dap.lua
new file mode 100644
index 0000000..065cead
--- /dev/null
+++ b/nvim/lua/plugins/dap.lua
@@ -0,0 +1,95 @@
+
+local dap = require("dap");
+
+dap.configurations.typescriptreact = { -- change to typescript if needed
+ {
+ type = "chrome",
+ request = "attach",
+ program = "${file}",
+ cwd = vim.fn.getcwd(),
+ sourceMaps = true,
+ protocol = "inspector",
+ port = 9222,
+ webRoot = "${workspaceFolder}"
+ }
+}
+
+require('dap.ext.vscode').load_launchjs()
+
+-- Debugpy
+dap.adapters.python = {
+ type = 'executable',
+ command = 'python',
+ args = { '-m', 'debugpy.adapter' },
+}
+
+dap.configurations.python = {
+ {
+ type = 'python',
+ request = 'launch',
+ name = 'Launch file',
+ program = '${file}',
+ pythonPath = function()
+ local venv_path = vim.fn.getenv 'VIRTUAL_ENVIRONMENT'
+ if venv_path ~= vim.NIL and venv_path ~= '' then
+ return venv_path .. '/bin/python'
+ else
+ return '/usr/bin/python'
+ end
+ end,
+ },
+}
+
+-- Neovim Lua
+dap.adapters.nlua = function(callback, config)
+ callback { type = 'server', host = config.host, port = config.port }
+end
+
+dap.configurations.lua = {
+ {
+ type = 'nlua',
+ request = 'attach',
+ name = 'Attach to running Neovim instance',
+ host = function()
+ local value = vim.fn.input 'Host [127.0.0.1]: '
+ if value ~= '' then
+ return value
+ end
+ return '127.0.0.1'
+ end,
+ port = function()
+ local val = tonumber(vim.fn.input 'Port: ')
+ assert(val, 'Please provide a port number')
+ return val
+ end,
+ },
+}
+
+-- lldb
+dap.adapters.lldb = {
+ type = 'executable',
+ command = '/usr/bin/lldb-vscode',
+ name = 'lldb',
+}
+
+dap.configurations.cpp = {
+ {
+ name = 'Launch',
+ type = 'lldb',
+ request = 'launch',
+ program = function()
+ return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file')
+ end,
+ cwd = '${workspaceFolder}',
+ stopOnEntry = false,
+ args = {},
+ runInTerminal = false,
+ },
+}
+
+dap.configurations.c = dap.configurations.cpp
+dap.configurations.rust = dap.configurations.cpp
+
+vim.cmd [[command! BreakpointToggle lua require('dap').toggle_breakpoint()]]
+vim.cmd [[command! Debug lua require('dap').continue()]]
+vim.cmd [[command! DapREPL lua require('dap').repl.open()]]
diff --git a/nvim/lua/plugins/git-worktree.lua b/nvim/lua/plugins/git-worktree.lua
new file mode 100644
index 0000000..d34e41c
--- /dev/null
+++ b/nvim/lua/plugins/git-worktree.lua
@@ -0,0 +1,4 @@
+require("git-worktree").setup({
+})
+
+require("telescope").load_extension("git_worktree") \ No newline at end of file
diff --git a/nvim/lua/plugins/lsp-installer.lua b/nvim/lua/plugins/lsp-installer.lua
new file mode 100644
index 0000000..da61bbc
--- /dev/null
+++ b/nvim/lua/plugins/lsp-installer.lua
@@ -0,0 +1,121 @@
+local lsp_installer = require("nvim-lsp-installer")
+
+-- Provide settings first!
+lsp_installer.settings {
+ ui = {
+ icons = {
+ server_installed = "✓",
+ server_pending = "➜",
+ server_uninstalled = "✗"
+ }
+ },
+
+ -- Limit for the maximum amount of servers to be installed at the same time. Once this limit is reached, any further
+ -- servers that are requested to be installed will be put in a queue.
+ max_concurrent_installers = 4
+}
+
+---------------------------------------------------
+local enhance_server_opts = {
+ ["eslintls"] = function(opts)
+ opts.settings = {
+ format = {
+ enable = true,
+ },
+ }
+ end,
+ ["gopls"] = function(opts)
+ opts.cmd = {
+ "gopls",
+ "serve",
+ }
+ opts.settings = {
+ gopls = {
+ staticcheck = true,
+ analyses = {
+ unusedparams = true,
+ },
+ },
+ }
+ end
+}
+
+
+local function make_server_ready(attach)
+ lsp_installer.on_server_ready(function(server)
+ -- Specify the default options which we'll use to setup all servers
+ local opts = {
+ on_attach = on_attach,
+ }
+ if server.name == "rust_analyzer" then
+ local rustopts = {
+ tools = {
+ autoSetHints = true,
+ hover_with_actions = false,
+ inlay_hints = {
+ show_parameter_hints = true,
+ parameter_hints_prefix = "",
+ other_hints_prefix = "",
+ },
+ },
+ server = vim.tbl_deep_extend("force", server:get_default_options(), opts, {
+ settings = {
+ ["rust-analyzer"] = {
+ completion = {
+ postfix = {
+ enable = false
+ }
+ },
+ checkOnSave = {
+ command = "clippy"
+ },
+ }
+ }
+ }),
+ }
+ require("rust-tools").setup(rustopts)
+ server:attach_buffers()
+ else
+ if enhance_server_opts[server.name] then
+ -- Enhance the default opts with the server-specific ones
+ enhance_server_opts[server.name](opts)
+ end
+ -- This setup() function is exactly the same as lspconfig's setup function (:help lspconfig-quickstart)
+ server:setup(opts)
+ end
+
+ vim.cmd [[ do User LspAttachBuffers ]]
+ end)
+end
+---------------------------------------------------
+
+---------------------------------------------------
+local servers = {
+ "rust_analyzer",
+ "tsserver", -- for javascript
+ "jsonls", -- for json
+ "texlab", -- for latex
+ "ltex",
+ "sqlls", -- for sql
+ "pylsp", -- for python
+ "sumneko_lua", -- for lua
+ "gopls", -- for go
+ "yamlls",
+ "bashls",
+ "dockerls"
+}
+
+-- setup the LS
+require "plugins.lspconfig"
+make_server_ready(On_attach) -- LSP mappings
+
+-- install the LS
+for _, name in pairs(servers) do
+ local server_is_found, server = lsp_installer.get_server(name)
+ if server_is_found then
+ if not server:is_installed() then
+ print("Installing " .. name)
+ server:install()
+ end
+ end
+end \ No newline at end of file
diff --git a/nvim/lua/plugins/lspconfig.lua b/nvim/lua/plugins/lspconfig.lua
new file mode 100644
index 0000000..c10e1dc
--- /dev/null
+++ b/nvim/lua/plugins/lspconfig.lua
@@ -0,0 +1,97 @@
+local capabilities = vim.lsp.protocol.make_client_capabilities()
+capabilities.textDocument.completion.completionItem.snippetSupport = true
+
+vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
+ vim.lsp.diagnostic.on_publish_diagnostics, {
+ underline = true,
+ signs = true,
+ update_in_insert = true,
+ virtual_text = {
+ true,
+ spacing = 6,
+ --severity_limit='Error' -- Only show virtual text on error
+ },
+ }
+)
+
+local function config(_config)
+ return vim.tbl_deep_extend("force", {
+ capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities()),
+ on_attach = function()
+ Nnoremap("gd", ":lua vim.lsp.buf.definition()<CR>")
+ Nnoremap("K", ":lua vim.lsp.buf.hover()<CR>")
+ Nnoremap("<leader>vws", ":lua vim.lsp.buf.workspace_symbol()<CR>")
+ Nnoremap("<leader>vd", ":lua vim.diagnostic.open_float()<CR>")
+ Nnoremap("[d", ":lua vim.lsp.diagnostic.goto_next()<CR>")
+ Nnoremap("]d", ":lua vim.lsp.diagnostic.goto_prev()<CR>")
+ Nnoremap("<leader>vca", ":lua vim.lsp.buf.code_action()<CR>")
+ Nnoremap("<leader>vrr", ":lua vim.lsp.buf.references()<CR>")
+ Nnoremap("<leader>vrn", ":lua vim.lsp.buf.rename()<CR>")
+ Inoremap("<C-h>", "<cmd>lua vim.lsp.buf.signature_help()<CR>")
+ end,
+ }, _config or {})
+end
+
+require("lspconfig").tsserver.setup(config())
+
+require("lspconfig").ccls.setup(config())
+
+require("lspconfig").jedi_language_server.setup(config())
+
+require("lspconfig").svelte.setup(config())
+
+require("lspconfig").solang.setup(config())
+
+require("lspconfig").cssls.setup(config())
+
+require("lspconfig").gopls.setup(config({
+ cmd = { "gopls", "serve" },
+ settings = {
+ gopls = {
+ analyses = {
+ unusedparams = true,
+ },
+ staticcheck = true,
+ },
+ },
+}))
+
+local rustopts = {
+ tools = {
+ autoSetHints = true,
+ hover_with_actions = true,
+ runnables = {
+ use_telescope = true
+ },
+ inlay_hints = {
+ show_parameter_hints = false,
+ parameter_hints_prefix = "",
+ other_hints_prefix = "",
+ },
+ },
+ server = {
+ settings = {
+ ["rust-analyzer"] = {
+ checkOnSave = {
+ command = "clippy"
+ },
+ }
+ }
+ },
+}
+
+require("rust-tools").setup(rustopts)
+
+local opts = {
+ -- whether to highlight the currently hovered symbol
+ -- disable if your cpu usage is higher than you want it
+ -- or you just hate the highlight
+ -- default: true
+ highlight_hovered_item = true,
+
+ -- whether to show outline guides
+ -- default: true
+ show_guides = true,
+}
+
+require("symbols-outline").setup(opts)
diff --git a/nvim/lua/plugins/lspkind.lua b/nvim/lua/plugins/lspkind.lua
new file mode 100644
index 0000000..d2b437a
--- /dev/null
+++ b/nvim/lua/plugins/lspkind.lua
@@ -0,0 +1,29 @@
+require('lspkind').init({
+ -- enables text annotations (default: 'default')
+ -- default symbol map can be either 'default' or 'codicons' for codicon preset (requires vscode-codicons font installed)
+ preset = 'codicons',
+
+ -- override preset symbols (default: {})
+ symbol_map = {
+ Text = '',
+ Method = 'ƒ',
+ Function = '',
+ Constructor = '',
+ Variable = '',
+ Class = '',
+ Interface = 'ﰮ',
+ Module = '',
+ Property = '',
+ Unit = '',
+ Value = '',
+ Enum = '了',
+ Keyword = '',
+ Snippet = '﬌',
+ Color = '',
+ File = '',
+ Folder = '',
+ EnumMember = '',
+ Constant = '',
+ Struct = ''
+ },
+}) \ No newline at end of file
diff --git a/nvim/lua/plugins/lspstatus.lua b/nvim/lua/plugins/lspstatus.lua
new file mode 100644
index 0000000..ce34ab7
--- /dev/null
+++ b/nvim/lua/plugins/lspstatus.lua
@@ -0,0 +1,12 @@
+require('lsp-status').status()
+require('lsp-status').register_progress()
+require('lsp-status').config({
+ indicator_errors = '✗',
+ indicator_warnings = '⚠',
+ indicator_info = '',
+ indicator_hint = '',
+ indicator_ok = '✔',
+ current_function = true,
+ update_interval = 100,
+ status_symbol = ' 🇻',
+}) \ No newline at end of file
diff --git a/nvim/lua/plugins/lualine.lua b/nvim/lua/plugins/lualine.lua
new file mode 100644
index 0000000..825ae08
--- /dev/null
+++ b/nvim/lua/plugins/lualine.lua
@@ -0,0 +1,5 @@
+require('lualine').setup {
+ options = {
+ theme = 'vscode'
+ }
+}
diff --git a/nvim/lua/plugins/luasnip.lua b/nvim/lua/plugins/luasnip.lua
new file mode 100644
index 0000000..50c5457
--- /dev/null
+++ b/nvim/lua/plugins/luasnip.lua
@@ -0,0 +1,13 @@
+require("luasnip").config.set_config({
+ history = true,
+ updateevents = "TextChanged,TextChangedI"
+})
+
+require("luasnip").snippets = {all = {}, html = {}}
+
+require("luasnip").snippets.javascript = require("luasnip").snippets.html
+require("luasnip").snippets.javascriptreact = require("luasnip").snippets.html
+require("luasnip").snippets.typescriptreact = require("luasnip").snippets.html
+require("luasnip/loaders/from_vscode").load({include = {"html"}})
+
+require('luasnip/loaders/from_vscode').lazy_load() \ No newline at end of file
diff --git a/nvim/lua/plugins/neogit.lua b/nvim/lua/plugins/neogit.lua
new file mode 100644
index 0000000..5d2e47b
--- /dev/null
+++ b/nvim/lua/plugins/neogit.lua
@@ -0,0 +1 @@
+require('neogit').setup {} \ No newline at end of file
diff --git a/nvim/lua/plugins/null-ls.lua b/nvim/lua/plugins/null-ls.lua
new file mode 100644
index 0000000..44ee62c
--- /dev/null
+++ b/nvim/lua/plugins/null-ls.lua
@@ -0,0 +1,12 @@
+local null_ls = require("null-ls")
+
+local formatting = null_ls.builtins.formatting
+
+null_ls.setup({
+ sources = {
+ formatting.prettier,
+ formatting.black,
+ formatting.stylua,
+ formatting.rustfmt,
+ },
+}) \ No newline at end of file
diff --git a/nvim/lua/plugins/nvim-tree.lua b/nvim/lua/plugins/nvim-tree.lua
new file mode 100644
index 0000000..c2499d8
--- /dev/null
+++ b/nvim/lua/plugins/nvim-tree.lua
@@ -0,0 +1,7 @@
+require("nvim-tree").setup {
+ git = {
+ enable = true,
+ ignore = false,
+ timeout = 500
+ }
+} \ No newline at end of file
diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua
new file mode 100644
index 0000000..d26a4c7
--- /dev/null
+++ b/nvim/lua/plugins/telescope.lua
@@ -0,0 +1,51 @@
+require('telescope').setup {
+ defaults = {
+ file_ignore_patterns = {"node_modules", ".git", "dist"},
+ vimgrep_arguments = {
+ "rg",
+ "--color=never",
+ "--no-heading",
+ "--with-filename",
+ "--line-number",
+ "--column",
+ "--hidden",
+ "--iglob",
+ "!yarn.lock",
+ "--smart-case",
+ "-u"
+ },
+ layout_strategy = 'flex',
+ scroll_strategy = 'cycle',
+ },
+ extensions = {
+ project = {
+ base_dirs = {
+ {path = "~/src", max_depth = 1}
+ },
+ hidden_files = true
+ },
+ fzf = {
+ fuzzy = true,
+ override_generic_sorter = true,
+ override_file_sorter = true,
+ case_mode = 'smart_case',
+ },
+ },
+ pickers = {
+ find_files = {
+ find_command = {"rg", "--files", "--hidden"}
+ },
+ lsp_references = { theme = 'dropdown' },
+ lsp_code_actions = { theme = 'dropdown' },
+ lsp_definitions = { theme = 'dropdown' },
+ lsp_implementations = { theme = 'dropdown' },
+ buffers = {
+ sort_lastused = true,
+ },
+ },
+}
+
+-- Extensions
+require('telescope').load_extension('frecency')
+require('telescope').load_extension('fzf')
+require('telescope').load_extension('dap')
diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua
new file mode 100644
index 0000000..826693a
--- /dev/null
+++ b/nvim/lua/plugins/treesitter.lua
@@ -0,0 +1,9 @@
+require("nvim-treesitter.configs").setup {
+ indent = {
+ enable = true
+ },
+ highlight = {
+ enable = true,
+ additional_vim_regex_highlighting = false
+ }
+} \ No newline at end of file