|
|
@@ -2,17 +2,6 @@
|
|
|
vim.g.loaded_netrw = 1
|
|
|
vim.g.loaded_netrwPlugin = 1
|
|
|
|
|
|
--- configure neon theme
|
|
|
-vim.g.neon_style = "doom"
|
|
|
-
|
|
|
-vim.g.mapleader = ' '
|
|
|
-vim.g.maplocalleader = ' '
|
|
|
-
|
|
|
--- prepend ghcup to path
|
|
|
-
|
|
|
-vim.env.PATH = '/home/dora/.cabal/bin:/home/dora/.ghcup/bin:' .. vim.env.PATH
|
|
|
-
|
|
|
-
|
|
|
-- package manager
|
|
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
|
|
if not vim.loop.fs_stat(lazypath) then
|
|
|
@@ -30,38 +19,29 @@ vim.opt.rtp:prepend(lazypath)
|
|
|
require("lazy").setup({
|
|
|
"nvim-tree/nvim-tree.lua",
|
|
|
"nvim-tree/nvim-web-devicons",
|
|
|
+ "nvim-lualine/lualine.nvim",
|
|
|
|
|
|
+ -- color theme
|
|
|
{
|
|
|
- "rafamadriz/neon",
|
|
|
- config = function ()
|
|
|
- vim.cmd.colorscheme("neon")
|
|
|
- end,
|
|
|
- },
|
|
|
-
|
|
|
- {
|
|
|
- "nvim-lualine/lualine.nvim",
|
|
|
- opts = {
|
|
|
- options = {
|
|
|
- theme = "neon",
|
|
|
- },
|
|
|
- },
|
|
|
+ "catppuccin/nvim",
|
|
|
+ name = "catppuccin",
|
|
|
+ priority = 1000,
|
|
|
},
|
|
|
|
|
|
-- LSP
|
|
|
- {
|
|
|
- "neovim/nvim-lspconfig",
|
|
|
- dependencies = {
|
|
|
- {'williamboman/mason.nvim', config = true},
|
|
|
- 'williamboman/mason-lspconfig.nvim',
|
|
|
- { 'j-hui/fidget.nvim', tag = 'legacy', opts = {} },
|
|
|
- 'folke/neodev.nvim',
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- -- Show definitions and referenes in a floating window
|
|
|
- 'rmagatti/goto-preview',
|
|
|
+ "neovim/nvim-lspconfig", -- repo of language server configs
|
|
|
+ "mason-org/mason.nvim", -- package manager (needed for language server)
|
|
|
+ -- mason lspconfig automatically installs language servers mentioned in
|
|
|
+ -- nvim-lspconfig using mason package manager.
|
|
|
+ "mason-org/mason-lspconfig.nvim",
|
|
|
+ -- configure lua language server for nvim config file
|
|
|
+ {
|
|
|
+ "folke/lazydev.nvim",
|
|
|
+ ft = "lua", -- only load for lua files
|
|
|
+ },
|
|
|
|
|
|
-- Autocompletion
|
|
|
+ -- TODO: look into github.com/ms-jpq/coq_nvim
|
|
|
{
|
|
|
'hrsh7th/nvim-cmp',
|
|
|
dependencies = {
|
|
|
@@ -78,10 +58,10 @@ require("lazy").setup({
|
|
|
},
|
|
|
|
|
|
-- Useful plugin to show you pending keybinds.
|
|
|
- { 'folke/which-key.nvim', opts = {} },
|
|
|
+ "folke/which-key.nvim",
|
|
|
|
|
|
-- "gc" to comment visual regions/lines
|
|
|
- { 'numToStr/Comment.nvim', opts = {} },
|
|
|
+ "numToStr/Comment.nvim",
|
|
|
|
|
|
-- Fuzzy Finder (files, lsp, etc)
|
|
|
{
|
|
|
@@ -113,14 +93,22 @@ require("lazy").setup({
|
|
|
build = ':TSUpdate',
|
|
|
},
|
|
|
|
|
|
+ -- Cut text without populating unnamed register
|
|
|
{
|
|
|
"gbprod/cutlass.nvim",
|
|
|
opts = {
|
|
|
cut_key = "<Leader>x",
|
|
|
}
|
|
|
- }
|
|
|
+ },
|
|
|
})
|
|
|
|
|
|
+-- set space key as a leader key
|
|
|
+vim.g.mapleader = ' '
|
|
|
+vim.g.maplocalleader = ' '
|
|
|
+
|
|
|
+-- set the colorscheme
|
|
|
+vim.cmd.colorscheme("catppuccin-macchiato")
|
|
|
+
|
|
|
-- copy to system clipboard by default
|
|
|
vim.o.clipboard = "unnamedplus"
|
|
|
|
|
|
@@ -134,6 +122,8 @@ vim.opt.hlsearch = true
|
|
|
vim.opt.tabstop = 2
|
|
|
vim.opt.shiftwidth = 2
|
|
|
|
|
|
+require("lualine").setup({})
|
|
|
+
|
|
|
require("nvim-tree").setup({
|
|
|
view = {
|
|
|
width = 30,
|
|
|
@@ -156,6 +146,10 @@ vim.api.nvim_set_keymap("n", "<Leader>w", "<C-w>", {noremap=true, silent=true})
|
|
|
vim.api.nvim_set_keymap("n", "<Leader>ft", ":NvimTreeToggle<CR>", {noremap=true, silent=true})
|
|
|
vim.api.nvim_set_keymap("n", "<BS>", ":NvimTreeFocus<CR>", {noremap=true, silent=true})
|
|
|
|
|
|
+-- configure LSP
|
|
|
+require("mason").setup()
|
|
|
+require("mason-lspconfig").setup()
|
|
|
+
|
|
|
-- configure telescope
|
|
|
-- See `:help telescope` and `:help telescope.setup()`
|
|
|
require('telescope').setup {
|
|
|
@@ -270,116 +264,19 @@ require('nvim-treesitter.configs').setup {
|
|
|
}
|
|
|
|
|
|
-- Diagnostic keymaps
|
|
|
-vim.keymap.set('n', '<Leader>dp', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
|
|
|
-vim.keymap.set('n', '<Leader>dn', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
|
|
|
-vim.keymap.set('n', '<leader>de', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
|
|
|
-vim.keymap.set('n', '<leader>dl', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' })
|
|
|
-
|
|
|
-require('goto-preview').setup {
|
|
|
- default_mappings = false,
|
|
|
- references = { -- Configure the telescope UI for slowing the references cycling window.
|
|
|
- telescope = require("telescope.themes").get_dropdown({ hide_preview = false })
|
|
|
- },
|
|
|
-}
|
|
|
-
|
|
|
--- Configure LSP
|
|
|
--- This function gets run when an LSP connects to a particular buffer.
|
|
|
-local on_attach = function(_, bufnr)
|
|
|
- -- NOTE: Remember that lua is a real programming language, and as such it is possible
|
|
|
- -- to define small helper and utility functions so you don't have to repeat yourself
|
|
|
- -- many times.
|
|
|
- --
|
|
|
- -- In this case, we create a function that lets us more easily define mappings specific
|
|
|
- -- for LSP related items. It sets the mode, buffer and description for us each time.
|
|
|
- local nmap = function(keys, func, desc)
|
|
|
- if desc then
|
|
|
- desc = 'LSP: ' .. desc
|
|
|
- end
|
|
|
-
|
|
|
- vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
|
|
|
- end
|
|
|
-
|
|
|
- nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
|
|
|
- nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
|
|
|
-
|
|
|
- nmap('gd', require('goto-preview').goto_preview_definition, '[G]oto [D]efinition')
|
|
|
- nmap('gr', require('goto-preview').goto_preview_references, '[G]oto [R]eferences')
|
|
|
- nmap('gc', require('goto-preview').close_all_win, 'Close all preview windows')
|
|
|
- nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation')
|
|
|
- nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
|
|
|
- nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
|
|
|
- nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
|
|
|
-
|
|
|
- -- See `:help K` for why this keymap
|
|
|
- nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
|
|
|
- nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
|
|
|
-
|
|
|
- -- Lesser used LSP functionality
|
|
|
- nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
|
|
|
- nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
|
|
|
- nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
|
|
|
- nmap('<leader>wl', function()
|
|
|
- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
|
|
- end, '[W]orkspace [L]ist Folders')
|
|
|
-
|
|
|
- -- Create a command `:Format` local to the LSP buffer
|
|
|
- vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
|
|
|
- vim.lsp.buf.format()
|
|
|
- end, { desc = 'Format current buffer with LSP' })
|
|
|
-
|
|
|
- vim.keymap.set("v", "<leader>k", vim.lsp.buf.format, { remap = false })
|
|
|
-end
|
|
|
-
|
|
|
--- Enable the following language servers
|
|
|
--- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
|
|
|
---
|
|
|
--- Add any additional override configuration in the following tables. They will be passed to
|
|
|
--- the `settings` field of the server config. You must look up that documentation yourself.
|
|
|
---
|
|
|
--- If you want to override the default filetypes that your language server will attach to you can
|
|
|
--- define the property 'filetypes' to the map in question.
|
|
|
-local servers = {
|
|
|
- clangd = {},
|
|
|
- gopls = {},
|
|
|
- pyright = {},
|
|
|
- rust_analyzer = {},
|
|
|
- hls = {},
|
|
|
- -- tsserver = {},
|
|
|
- -- html = { filetypes = { 'html', 'twig', 'hbs'} },
|
|
|
-
|
|
|
- lua_ls = {
|
|
|
- Lua = {
|
|
|
- workspace = { checkThirdParty = false },
|
|
|
- telemetry = { enable = false },
|
|
|
- },
|
|
|
- },
|
|
|
-}
|
|
|
-
|
|
|
--- Setup neovim lua configuration
|
|
|
-require('neodev').setup()
|
|
|
+vim.keymap.set('n', '<Leader>dp', vim.diagnostic.goto_prev,
|
|
|
+ { desc = 'Go to previous diagnostic message' })
|
|
|
+vim.keymap.set('n', '<Leader>dn', vim.diagnostic.goto_next,
|
|
|
+ { desc = 'Go to next diagnostic message' })
|
|
|
+vim.keymap.set('n', '<Leader>de', vim.diagnostic.open_float,
|
|
|
+ { desc = 'Open floating diagnostic message' })
|
|
|
+vim.keymap.set('n', '<Leader>dl', vim.diagnostic.setloclist,
|
|
|
+ { desc = 'Open diagnostics list' })
|
|
|
|
|
|
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
|
|
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
|
|
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
|
|
|
|
|
--- Ensure the servers above are installed
|
|
|
-local mason_lspconfig = require 'mason-lspconfig'
|
|
|
-
|
|
|
-mason_lspconfig.setup {
|
|
|
- ensure_installed = vim.tbl_keys(servers),
|
|
|
-}
|
|
|
-
|
|
|
-mason_lspconfig.setup_handlers {
|
|
|
- function(server_name)
|
|
|
- require('lspconfig')[server_name].setup {
|
|
|
- capabilities = capabilities,
|
|
|
- on_attach = on_attach,
|
|
|
- settings = servers[server_name],
|
|
|
- filetypes = (servers[server_name] or {}).filetypes,
|
|
|
- }
|
|
|
- end
|
|
|
-}
|
|
|
-
|
|
|
-- Configure autocompletion nvim-cmp
|
|
|
-- See `:help cmp`
|
|
|
local cmp = require 'cmp'
|