diff --git a/tree/.config/nvim/init.lua b/tree/.config/nvim/init.lua index b3c9756..3fd20f0 100644 --- a/tree/.config/nvim/init.lua +++ b/tree/.config/nvim/init.lua @@ -25,9 +25,9 @@ require('fns') require('keys') require('theme') require('statusline') +--require('debugger') -- TODO: local lspconfig = require("lspconfig") -local rust_tools = require("rust-tools") -- Mason Setup require("mason").setup({ @@ -38,31 +38,20 @@ require("mason").setup({ package_uninstalled = "", }, }, - ensure_installed = { "pylsp", "rust_analyzer", "eslint", "gopls", "wgsl_analyzer" }, + ensure_installed = { "pylsp", "eslint", "gopls", "wgsl_analyzer" }, }) +require("mason-lspconfig").setup_handlers { + -- rust_analyzer is managed by rustaceanvim + ['rust_analyzer'] = function() end +} require("mason-lspconfig").setup() lspconfig.pylsp.setup {} -lspconfig.rust_analyzer.setup {} lspconfig.eslint.setup {} lspconfig.gopls.setup {} lspconfig.wgsl_analyzer.setup {} require("todo-comments").setup() -rust_tools.setup({ - server = { - on_attach = function(_, bufnr) - -- Hover actions - vim.keymap.set("n", "", rust_tools.hover_actions.hover_actions, { buffer = bufnr }) - -- Code action groups - vim.keymap.set("n", "a", rust_tools.code_action_group.code_action_group, { desc = "Code actions", buffer = bufnr }) - end, - settings = { - ["rust-analyzer"] = {}, - } - }, -}) - -- Format file on save vim.cmd [[autocmd BufWritePre * lua vim.lsp.buf.format()]] diff --git a/tree/.config/nvim/lua/color-scheme.lua.tpl b/tree/.config/nvim/lua/color-scheme.lua.tpl new file mode 100644 index 0000000..ba1c779 --- /dev/null +++ b/tree/.config/nvim/lua/color-scheme.lua.tpl @@ -0,0 +1,5 @@ +{% if light %} +vim.o.background = "light" +{% else %} +vim.o.background = "dark" +{% end %} diff --git a/tree/.config/nvim/lua/debugger.lua b/tree/.config/nvim/lua/debugger.lua new file mode 100644 index 0000000..7b7c072 --- /dev/null +++ b/tree/.config/nvim/lua/debugger.lua @@ -0,0 +1,176 @@ +local dap = require('dap') + +local codelldb_bin = "/usr/bin/codelldb" + +-- Rust, C++, C +dap.adapters.codelldb = { + type = 'server', + port = "${port}", + executable = { + command = codelldb_bin, + args = {"--port", "${port}"}, + } +} + +local function get_default_rust_program_path() + local workspace = vim.fn.getcwd() + local program_name = vim.fn.fnamemodify(workspace, ":t") + return workspace .. '/target/debug/' .. program_name +end + +dap.configurations.cpp = { + { + port = 1234, + host = '127.0.0.1', + name = "Attach to name", + type = "codelldb", + request = "attach", + pid = function() + -- Lets user enter the name of a running process instead of looking up the pid themselves + local name = vim.fn.input('Enter pidof name: ') + local handle = io.popen("pidof " .. name) + local pid = handle:read("*a") + handle:close() + + -- Trim the result + pid = pid:match( "^%s*(.-)%s*$" ) + return pid + end, + stopOnEntry = true, + }, + { + port = 1234, + host = '127.0.0.1', + name = "Attach to PID", + type = "codelldb", + request = "attach", + pid = function() + return tonumber(vim.fn.input('Enter PID: ')) + end, + stopOnEntry = true, + }, + { + port = 1234, + host = '127.0.0.1', + name = "Manually launch file", + type = "codelldb", + request = "launch", + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + end, + cwd = '${workspaceFolder}', + stopOnEntry = true, + }, + { + -- To debug programs that need to run as root you can run a remote lldb-server as root + -- sudo lldb-server platform --server --listen '*:1234' + name = "Remote attach to name", + type = "codelldb", + request = "attach", + pid = function() + -- Lets user enter the name of a running process instead of looking up the pid themselves + local name = vim.fn.input('Enter pidof name: ') + local handle = io.popen("pidof " .. name) + local pid = handle:read("*a") + handle:close() + + -- Trim the result + pid = pid:match( "^%s*(.-)%s*$" ) + return pid + end, + initCommands = { + "platform select remote-linux", + "platform connect connect://127.0.0.1:1234", + "settings set target.inherit-env false", + }, + }, + { + -- To debug programs that need to run as root you can run a remote lldb-server as root + -- sudo lldb-server platform --server --listen '*:1234' + name = "Remote launch", + type = "codelldb", + request = "launch", + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + end, + initCommands = { + "platform select remote-linux", + "platform connect connect://127.0.0.1:1234", + "settings set target.inherit-env false", + }, + }, +} +dap.configurations.c = dap.configurations.cpp +dap.configurations.rust = dap.configurations.cpp + +-- Insert this config as a rust specific one before the C++ configs +table.insert(dap.configurations.rust, 1, { + port = 1234, + host = '127.0.0.1', + name = "Launch Default Rust Program", + type = "codelldb", + request = "launch", + program = get_default_rust_program_path, + cwd = '${workspaceFolder}', + stopOnEntry = true, +}) + +-- Python +--dap.adapters.python = function(cb, config) +-- if config.request == 'attach' then +-- ---@diagnostic disable-next-line: undefined-field +-- local port = (config.connect or config).port +-- ---@diagnostic disable-next-line: undefined-field +-- local host = (config.connect or config).host or '127.0.0.1' +-- cb({ +-- type = 'server', +-- port = assert(port, '`connect.port` is required for a python `attach` configuration'), +-- host = host, +-- options = { +-- source_filetype = 'python', +-- }, +-- }) +-- else +-- local home = os.getenv("HOME") +-- cb({ +-- type = 'executable', +-- -- You need to install debugpy in $HOME/.virtualenvs/ +-- -- Like this: +-- -- $ mkdir .virtualenvs +-- -- $ cd .virtualenvs +-- -- $ python -m venv debugpy +-- -- $ debugpy/bin/python -m pip install debugpy +-- command = home .. '/.virtualenvs/debugpy/bin/python', +-- args = { '-m', 'debugpy.adapter' }, +-- options = { +-- source_filetype = 'python', +-- }, +-- }) +-- end +--end + +--dap.configurations.python = { +-- { +-- -- The first three options are required by nvim-dap +-- type = 'python'; -- the type here established the link to the adapter definition: `dap.adapters.python` +-- request = 'launch'; +-- name = "Launch file"; +-- +-- -- Options below are for debugpy, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for supported options +-- +-- program = "${file}"; -- This configuration will launch the current file if used. +-- pythonPath = function() +-- -- debugpy supports launching an application with a different interpreter then the one used to launch debugpy itself. +-- -- The code below looks for a `venv` or `.venv` folder in the current directly and uses the python within. +-- -- You could adapt this - to for example use the `VIRTUAL_ENV` environment variable. +-- local cwd = vim.fn.getcwd() +-- if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then +-- return cwd .. '/venv/bin/python' +-- elseif vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then +-- return cwd .. '/.venv/bin/python' +-- else +-- return '/usr/bin/python' +-- end +-- end; +-- }, +--} diff --git a/tree/.config/nvim/lua/keys.lua b/tree/.config/nvim/lua/keys.lua index 9ee7d7d..80f5717 100644 --- a/tree/.config/nvim/lua/keys.lua +++ b/tree/.config/nvim/lua/keys.lua @@ -36,11 +36,33 @@ vim.api.nvim_create_autocmd('LspAttach', { end, { desc = "List workspace folders", buffer = ev.buf }) vim.keymap.set('n', 'r', vim.lsp.buf.rename, { desc = "Rename symbol", buffer = ev.buf }) + vim.keymap.set('n', "a", function() + vim.cmd.RustLsp('codeAction') -- supports rust-analyzer's grouping + -- or vim.lsp.buf.codeAction() if you don't want grouping. + end, + { silent = true, buffer = ev.buf }) + --vim.keymap.set({ 'n', 'v' }, 'la', vim.lsp.buf.code_action, { desc = "Code actions", buffer = ev.buf }) -- TODO: figure out how to fall back to this option lang isnt rust + wk.add({ { "l", desc = "Language server stuff" }, { "w", desc = "Workspace stuff" }, }) - --vim.keymap.set({ 'n', 'v' }, 'la', vim.lsp.buf.code_action, { desc = "Code actions", buffer = ev.buf }) -- TODO: figure out how to fall back to this option lang isnt rust end, }) + +--local rust_tools = require("rust-tools") + +--rust_tools.setup({ +-- server = { +-- on_attach = function(_, bufnr) +-- -- Hover actions +-- vim.keymap.set("n", "", rust_tools.hover_actions.hover_actions, { buffer = bufnr }) +-- -- Code action groups +-- vim.keymap.set("n", "a", rust_tools.code_action_group.code_action_group, { desc = "Code actions", buffer = bufnr }) +-- end, +-- settings = { +-- ["rust-analyzer"] = {}, +-- } +-- }, +--}) diff --git a/tree/.config/nvim/lua/plugins.lua b/tree/.config/nvim/lua/plugins.lua index 8dcb713..69fcc2d 100644 --- a/tree/.config/nvim/lua/plugins.lua +++ b/tree/.config/nvim/lua/plugins.lua @@ -22,12 +22,18 @@ require("lazy").setup({ -- refer to the configuration section below } }, + { 'rktjmp/fwatch.nvim' }, -- -- language server stuff - {'williamboman/mason.nvim' }, - {'williamboman/mason-lspconfig.nvim' }, - {'neovim/nvim-lspconfig' }, - {'simrat39/rust-tools.nvim' }, + { 'williamboman/mason.nvim' }, + { 'williamboman/mason-lspconfig.nvim' }, + { 'neovim/nvim-lspconfig' }, + { + 'mrcjkb/rustaceanvim', + version = '^4', + lazy = false, -- This plugin is already lazy + }, + { 'mfussenegger/nvim-dap' }, -- -- nushell support -- --use { 'LhKipp/nvim-nu', run = function() vim.fn[':TSInstall nu'] end} } diff --git a/tree/.config/nvim/lua/theme.lua.tpl b/tree/.config/nvim/lua/theme.lua similarity index 80% rename from tree/.config/nvim/lua/theme.lua.tpl rename to tree/.config/nvim/lua/theme.lua index da21eb7..7353363 100644 --- a/tree/.config/nvim/lua/theme.lua.tpl +++ b/tree/.config/nvim/lua/theme.lua @@ -25,10 +25,9 @@ require("gruvbox").setup({ transparent_mode = false, }) -{% if light %} -vim.o.background = "light" -{% else %} -vim.o.background = "dark" -{% end %} +require('color-scheme') + +local color_scheme_file = "~/.cache/dotfiles/.config/nvim/lua/color-scheme.lua" +require('fwatch').watch(color_scheme_file, "luafile " .. color_scheme_file) vim.cmd([[colorscheme gruvbox]])