diff --git a/lua/config/keymap.lua b/lua/config/keymap.lua index ddad173..5299f90 100644 --- a/lua/config/keymap.lua +++ b/lua/config/keymap.lua @@ -299,13 +299,11 @@ wk.register({ f = { 'Telescope find_files', '[f]iles' }, h = { 'Telescope help_tags', '[h]elp' }, k = { 'Telescope keymaps', '[k]eymaps' }, - r = { 'Telescope lsp_references', '[r]eferences' }, g = { 'Telescope live_grep', '[g]rep' }, b = { 'Telescope current_buffer_fuzzy_find', '[b]uffer fuzzy find' }, m = { 'Telescope marks', '[m]arks' }, M = { 'Telescope man_pages', '[M]an pages' }, c = { 'Telescope git_commits', 'git [c]ommits' }, - s = { 'Telescope lsp_document_symbols', 'document [s]ymbols' }, [''] = { 'Telescope buffers', '[ ] buffers' }, d = { 'Telescope buffers', '[d] buffers' }, q = { 'Telescope quickfix', '[q]uickfix' }, @@ -347,21 +345,26 @@ wk.register({ }, l = { name = '[l]anguage/lsp', - r = { 'Telescope lsp_references', '[r]eferences' }, + r = { vim.lsp.buf.references, '[r]eferences' }, R = { '[R]ename' }, D = { vim.lsp.buf.type_definition, 'type [D]efinition' }, a = { vim.lsp.buf.code_action, 'code [a]ction' }, e = { vim.diagnostic.open_float, 'diagnostics (show hover [e]rror)' }, d = { name = '[d]iagnostics', - d = { vim.diagnostic.disable, '[d]isable' }, + d = { + function() + vim.diagnostic.enable(false) + end, + '[d]isable', + }, e = { vim.diagnostic.enable, '[e]nable' }, }, g = { ':Neogen', 'neo[g]en docstring' }, }, o = { name = '[o]tter & c[o]de', - a = { require('otter').dev_setup, 'otter [a]ctivate' }, + a = { require('otter').activate, 'otter [a]ctivate' }, d = { require('otter').deactivate, 'otter [d]eactivate' }, c = { 'O# %%', 'magic [c]omment code chunk # %%' }, r = { insert_r_chunk, '[r] code chunk' }, diff --git a/lua/plugins/colorthemes.lua b/lua/plugins/colorthemes.lua index 71196e1..40ef99d 100644 --- a/lua/plugins/colorthemes.lua +++ b/lua/plugins/colorthemes.lua @@ -36,6 +36,17 @@ return { lazy = false, priority = 1000, config = function() + require('kanagawa').setup { + colors = { + theme = { + all = { + ui = { + bg_gutter = 'none', + }, + }, + }, + }, + } vim.cmd.colorscheme 'kanagawa' vim.api.nvim_set_hl(0, 'TermCursor', { fg = '#A6E3A1', bg = '#A6E3A1' }) end, diff --git a/lua/plugins/completion.lua b/lua/plugins/completion.lua index a9c102f..9a4752d 100644 --- a/lua/plugins/completion.lua +++ b/lua/plugins/completion.lua @@ -120,7 +120,7 @@ return { }, }, sources = { - { name = 'otter' }, -- for code chunks in quarto + -- { name = 'otter' }, -- for code chunks in quarto { name = 'path' }, { name = 'nvim_lsp' }, { name = 'nvim_lsp_signature_help' }, @@ -155,7 +155,7 @@ return { { -- gh copilot 'zbirenbaum/copilot.lua', - enabled = false, + enabled = true, config = function() require('copilot').setup { suggestion = { diff --git a/lua/plugins/editing.lua b/lua/plugins/editing.lua index 7d629bc..53b958c 100644 --- a/lua/plugins/editing.lua +++ b/lua/plugins/editing.lua @@ -39,6 +39,7 @@ return { formatters_by_ft = { lua = { 'mystylua' }, python = { 'isort', 'black' }, + quarto = { 'injected' }, }, formatters = { mystylua = { @@ -88,6 +89,7 @@ return { { 'chrishrb/gx.nvim', + enabled = false, keys = { { 'gx', 'Browse', mode = { 'n', 'x' } } }, cmd = { 'Browse' }, init = function() diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index beb2a4b..bd350c4 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -1,4 +1,5 @@ return { + { -- for lsp features in code cells / embedded code @@ -8,21 +9,9 @@ return { { 'neovim/nvim-lspconfig', 'nvim-treesitter/nvim-treesitter', - 'hrsh7th/nvim-cmp', - }, - }, - opts = { - lsp = { - hover = { - border = require('misc.style').border, - }, - }, - buffers = { - set_filetype = true, - write_to_disk = false, }, - handle_leading_whitespace = true, }, + opts = {}, }, { @@ -37,7 +26,31 @@ return { enabled = false, opts = {}, }, - { 'folke/neodev.nvim', opts = {}, enabled = true }, + { + { + 'folke/lazydev.nvim', + ft = 'lua', -- only load on lua files + opts = { + library = { + -- See the configuration section for more details + -- Load luvit types when the `vim.uv` word is found + { path = 'luvit-meta/library', words = { 'vim%.uv' } }, + }, + }, + }, + { 'Bilal2453/luvit-meta', lazy = true }, -- optional `vim.uv` typings + { -- optional completion source for require statements and module annotations + 'hrsh7th/nvim-cmp', + opts = function(_, opts) + opts.sources = opts.sources or {} + table.insert(opts.sources, { + name = 'lazydev', + group_index = 0, -- set group index to 0 to skip loading LuaLS completions + }) + end, + }, + -- { "folke/neodev.nvim", enabled = false }, -- make sure to uninstall or disable neodev.nvim + }, { 'folke/neoconf.nvim', opts = {}, enabled = false }, }, config = function() @@ -62,10 +75,12 @@ return { vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), callback = function(event) - local telescope = require 'telescope.builtin' local function map(keys, func, desc) vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) end + local function vmap(keys, func, desc) + vim.keymap.set('v', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) + end local client = vim.lsp.get_client_by_id(event.data.client_id) assert(client, 'LSP client not found') @@ -73,18 +88,19 @@ return { ---@diagnostic disable-next-line: inject-field client.server_capabilities.document_formatting = true - map('gS', telescope.lsp_document_symbols, '[g]o so [S]ymbols') - map('gD', telescope.lsp_type_definitions, '[g]o to type [D]efinition') - map('gd', telescope.lsp_definitions, '[g]o to [d]efinition') - map('K', 'lua vim.lsp.buf.hover()', '[K] hover documentation') - map('gh', 'lua vim.lsp.buf.signature_help()', '[g]o to signature [h]elp') - map('gI', telescope.lsp_implementations, '[g]o to [I]mplementation') - map('gr', telescope.lsp_references, '[g]o to [r]eferences') + map('gS', vim.lsp.buf.document_symbol, '[g]o so [S]ymbols') + map('gD', vim.lsp.buf.type_definition, '[g]o to type [D]efinition') + map('gd', vim.lsp.buf.definition, '[g]o to [d]efinition') + map('K', vim.lsp.buf.hover, '[K] hover documentation') + map('gh', vim.lsp.buf.signature_help, '[g]o to signature [h]elp') + map('gI', vim.lsp.buf.implementation, '[g]o to [I]mplementation') + map('gr', vim.lsp.buf.references, '[g]o to [r]eferences') map('[d', vim.diagnostic.goto_prev, 'previous [d]iagnostic ') map(']d', vim.diagnostic.goto_next, 'next [d]iagnostic ') map('ll', vim.lsp.codelens.run, '[l]ens run') map('lR', vim.lsp.buf.rename, '[l]sp [R]ename') map('lf', vim.lsp.buf.format, '[l]sp [f]ormat') + vmap('lf', vim.lsp.buf.format, '[l]sp [f]ormat') map('lq', vim.diagnostic.setqflist, '[l]sp diagnostic [q]uickfix') end, }) @@ -93,8 +109,11 @@ return { allow_incremental_sync = true, debounce_text_changes = 150, } + vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { border = require('misc.style').border }) vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = require('misc.style').border }) + -- TODO: handle this + -- vim.lsp.handlers['textDocument/references'] = telescope_builtin.lsp_references local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) @@ -150,6 +169,11 @@ return { }, } + lspconfig.jsonls.setup { + capabilities = capabilities, + flags = lsp_flags, + } + lspconfig.dotls.setup { capabilities = capabilities, flags = lsp_flags, @@ -196,16 +220,18 @@ return { }, runtime = { version = 'LuaJIT', - plugin = lua_plugin_paths, + -- plugin = lua_plugin_paths, }, diagnostics = { - globals = { 'vim', 'quarto', 'pandoc', 'io', 'string', 'print', 'require', 'table' }, disable = { 'trailing-space' }, }, workspace = { - library = lua_library_files, + -- library = lua_library_files, checkThirdParty = false, }, + doc = { + privateName = { '^_' }, + }, telemetry = { enable = false, }, @@ -248,6 +274,11 @@ return { -- } -- } + -- lspconfig.ruff_lsp.setup { + -- capabilities = capabilities, + -- flags = lsp_flags, + -- } + -- See https://github.com/neovim/neovim/issues/23291 -- disable lsp watcher. -- Too lags on linux for python projects diff --git a/lua/plugins/quarto.lua b/lua/plugins/quarto.lua index 7b33333..3a2a946 100644 --- a/lua/plugins/quarto.lua +++ b/lua/plugins/quarto.lua @@ -7,7 +7,7 @@ return { dev = false, opts = { lspFeatures = { - languages = { 'r', 'python', 'julia', 'bash', 'lua', 'html', 'dot', 'javascript', 'typescript', 'ojs' }, + languages = { 'r', 'python', 'julia', 'bash', 'lua', 'html', 'dot', 'javascript', 'typescript', 'ojs', 'lua' }, }, codeRunner = { enabled = true, diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index 82f6f58..e170a2d 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -1,8 +1,14 @@ return { { 'nvim-treesitter/nvim-treesitter', + dev = false, dependencies = { - { 'nvim-treesitter/nvim-treesitter-textobjects' }, + -- { + -- -- currently broken for R + -- 'nvim-treesitter/nvim-treesitter-textobjects', + -- dev = false, + -- enabled = false, + -- }, }, run = ':TSUpdate', config = function() diff --git a/lua/plugins/ui.lua b/lua/plugins/ui.lua index 9ec17c0..76c538a 100644 --- a/lua/plugins/ui.lua +++ b/lua/plugins/ui.lua @@ -51,7 +51,6 @@ return { vimgrep_arguments = vimgrep_arguments, file_ignore_patterns = { 'node_modules', - '%_files/', '%_cache', '.git/', 'site_libs', @@ -334,15 +333,6 @@ return { enabled = true, dev = false, ft = { 'markdown', 'quarto', 'vimwiki' }, - dependencies = { - { - 'vhyrro/luarocks.nvim', - priority = 1001, -- this plugin needs to run before anything else - opts = { - rocks = { 'magick' }, - }, - }, - }, config = function() -- Requirements -- https://github.com/3rd/image.nvim?tab=readme-ov-file#requirements @@ -351,6 +341,7 @@ return { -- sudo apt install imagemagick -- sudo apt install libmagickwand-dev -- sudo apt install liblua5.1-0-dev + -- sudo apt install lua5.1 -- sudo apt installl luajit local image = require 'image' diff --git a/snips/snippets/quarto.json b/snips/snippets/quarto.json index a78a9e1..83a400b 100644 --- a/snips/snippets/quarto.json +++ b/snips/snippets/quarto.json @@ -1,4 +1,16 @@ { + "ipython_interactive": { + "prefix": ["ipyinteractive"], + "body": [ + "```{python}", + "from IPython.core.getipython import get_ipython", + "ip = get_ipython()", + "interactive = False", + "if ip is not None and 'interactiveshell.TerminalInteractiveShell' in str(ip):", + " interactive = True", + "```" + ] + }, "iframe": { "prefix": ["iframe"], "body": [