--- /dev/null
+-- Mason Setup
+require("mason").setup({
+ ui = {
+ icons = {
+ package_installed = "",
+ package_pending = "",
+ package_uninstalled = "",
+ },
+ }
+})
+require("mason-lspconfig").setup()
+
+local rt = require("rust-tools")
+
+rt.setup({
+ server = {
+ on_attach = function(_, bufnr)
+ -- Hover actions
+ vim.keymap.set("n", "<C-space>", rt.hover_actions.hover_actions, { buffer = bufnr })
+ -- Code action groups
+ vim.keymap.set("n", "<Leader>a", rt.code_action_group.code_action_group, { buffer = bufnr })
+ end,
+ },
+})
+
+-- LSP Diagnostics Options Setup
+local sign = function(opts)
+ vim.fn.sign_define(opts.name, {
+ texthl = opts.name,
+ text = opts.text,
+ numhl = ''
+ })
+end
+
+sign({name = 'DiagnosticSignError', text = ''})
+sign({name = 'DiagnosticSignWarn', text = ''})
+sign({name = 'DiagnosticSignHint', text = ''})
+sign({name = 'DiagnosticSignInfo', text = ''})
+
+vim.diagnostic.config({
+ virtual_text = false,
+ signs = true,
+ update_in_insert = true,
+ underline = true,
+ severity_sort = false,
+ float = {
+ border = 'rounded',
+ source = 'always',
+ header = '',
+ prefix = '',
+ },
+})
+
+vim.cmd([[
+set signcolumn=yes
+autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false })
+]])
+
+-- Completion Plugin Setup
+local cmp = require('cmp')
+
+cmp.setup({
+ -- Enable LSP snippets
+ snippet = {
+ expand = function(args)
+ vim.fn["vsnip#anonymous"](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-S-f>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-f>'] = cmp.mapping.scroll_docs(4),
+ ['<C-Space>'] = cmp.mapping.complete(),
+ ['<C-e>'] = cmp.mapping.close(),
+ ['<CR>'] = cmp.mapping.confirm({
+ behavior = cmp.ConfirmBehavior.Insert,
+ select = true,
+ })
+ },
+ -- Installed sources:
+ sources = {
+ { name = 'path' }, -- file paths
+ { name = 'nvim_lsp', keyword_length = 3 }, -- from language server
+ { name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized
+ { name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.*
+ { name = 'buffer', keyword_length = 2 }, -- source current buffer
+ { name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip
+ { name = 'calc'}, -- source for math calculation
+ },
+ window = {
+ completion = cmp.config.window.bordered(),
+ documentation = cmp.config.window.bordered(),
+ },
+ formatting = {
+ fields = {'menu', 'abbr', 'kind'},
+ format = function(entry, item)
+ local menu_icon ={
+ nvim_lsp = 'λ',
+ vsnip = '⋗',
+ buffer = 'Ω',
+ path = '🖫',
+ }
+ item.menu = menu_icon[entry.source.name]
+ return item
+ end,
+ },
+})
+
+-- Treesitter Plugin Setup
+require('nvim-treesitter.configs').setup {
+ ensure_installed = { "lua", "rust", "toml" },
+ auto_install = true,
+ highlight = {
+ enable = true,
+ additional_vim_regex_highlighting=false,
+ },
+ ident = { enable = true },
+ rainbow = {
+ enable = true,
+ extended_mode = true,
+ max_file_lines = nil,
+ }
+}
+
+-- disable netrw at the very start of your init.lua
+vim.g.loaded_netrw = 1
+vim.g.loaded_netrwPlugin = 1
+
+-- optionally enable 24-bit colour
+vim.opt.termguicolors = true
+
+-- empty setup using defaults
+require("nvim-tree").setup()
+
+-- OR setup with some options
+require("nvim-tree").setup({
+ sort = {
+ sorter = "case_sensitive",
+ },
+ view = {
+ width = 30,
+ },
+ renderer = {
+ group_empty = true,
+ },
+ filters = {
+ dotfiles = true,
+ },
+})
--- /dev/null
+-- Vimspector
+vim.cmd([[
+nmap <F9> <cmd>call vimspector#Launch()<cr>
+nmap <F5> <cmd>call vimspector#StepOver()<cr>
+nmap <F8> <cmd>call vimspector#Reset()<cr>
+nmap <F11> <cmd>call vimspector#StepOver()<cr>")
+nmap <F12> <cmd>call vimspector#StepOut()<cr>")
+nmap <F10> <cmd>call vimspector#StepInto()<cr>")
+]])
+map('n', "Db", ":call vimspector#ToggleBreakpoint()<cr>")
+map('n', "Dw", ":call vimspector#AddWatch()<cr>")
+map('n', "De", ":call vimspector#Evaluate()<cr>")
+
+-- FloaTerm configuration
+map('n', "<leader>ft", ":FloatermNew --name=myfloat --height=0.8 --width=0.7 --autoclose=2 fish <CR> ")
+map('n', "t", ":FloatermToggle myfloat<CR>")
+map('t', "<Esc>", "<C-\\><C-n>:q<CR>")
--- /dev/null
+--Set completeopt to have a better completion experience
+-- :help completeopt
+-- menuone: popup even when there's only one match
+-- noinsert: Do not insert text until a selection is made
+-- noselect: Do not select, force to select one from the menu
+-- shortness: avoid showing extra messages when using completion
+-- updatetime: set updatetime for CursorHold
+vim.opt.completeopt = {'menuone', 'noselect', 'noinsert'}
+vim.opt.shortmess = vim.opt.shortmess + { c = true}
+vim.api.nvim_set_option('updatetime', 300)
+
+-- Fixed column for diagnostics to appear
+-- Show autodiagnostic popup on cursor hover_range
+-- Goto previous / next diagnostic warning / error
+-- Show inlay_hints more frequently
+vim.cmd([[
+set signcolumn=yes
+autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false })
+]])
+
+-- Treesitter folding
+vim.wo.foldmethod = 'expr'
+vim.wo.foldexpr = 'nvim_treesitter#foldexpr()'
+
+-- Vimspector options
+vim.cmd([[
+let g:vimspector_sidebar_width = 85
+let g:vimspector_bottombar_height = 15
+let g:vimspector_terminal_maxwidth = 70
+]])
+
--- /dev/null
+return require('packer').startup(function()
+ -- other plugins...
+
+ use 'williamboman/mason.nvim'
+ use 'williamboman/mason-lspconfig.nvim'
+ use 'neovim/nvim-lspconfig'
+ use 'simrat39/rust-tools.nvim'
+
+ -- Completion framework:
+ use 'hrsh7th/nvim-cmp'
+
+ -- LSP completion source:
+ use 'hrsh7th/cmp-nvim-lsp'
+
+ -- Useful completion sources:
+ use 'hrsh7th/cmp-nvim-lua'
+ use 'hrsh7th/cmp-nvim-lsp-signature-help'
+ use 'hrsh7th/cmp-vsnip'
+ use 'hrsh7th/cmp-path'
+ use 'hrsh7th/cmp-buffer'
+ use 'hrsh7th/vim-vsnip'
+
+ -- Treesitter
+ use 'nvim-treesitter/nvim-treesitter'
+ -- Viminspector (for debugging)
+ use 'puremourning/vimspector'
+
+ use 'voldikss/vim-floaterm'
+ use 'phaazon/hop.nvim'
+ use { 'nvim-tree/nvim-tree.lua',
+ requires = {
+ 'nvim-tree/nvim-web-devicons', -- optional
+ },
+ }
+end)