From e9556df285195c4e907d8c2ce9817e6c2f7d0e5e Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Thu, 6 Aug 2026 06:26:21 +0200 Subject: [PATCH] Split out personal modules. --- config/nvim/lua/extra/build/init.lua | 30 +++++++++ config/nvim/lua/extra/lsp/init.lua | 11 +++ config/nvim/lua/extra/terminal/init.lua | 90 +++++++++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 config/nvim/lua/extra/build/init.lua create mode 100644 config/nvim/lua/extra/lsp/init.lua create mode 100644 config/nvim/lua/extra/terminal/init.lua diff --git a/config/nvim/lua/extra/build/init.lua b/config/nvim/lua/extra/build/init.lua new file mode 100644 index 0000000..9f1d1f5 --- /dev/null +++ b/config/nvim/lua/extra/build/init.lua @@ -0,0 +1,30 @@ +-- ------------------------------------------------------------ +-- BUILD SYSTEM +-- ------------------------------------------------------------ +local function build(args) + if vim.fn.filereadable("build.sh") == 0 then + vim.notify("No build.sh found in current directory.", vim.log.levels.WARN) + return + end + + vim.cmd("wall") + + local command = "./build.sh" + + if #args > 0 then + command = command .. " " .. table.concat(args, " ") + end + + send("clear && " .. command) +end + +vim.api.nvim_create_user_command( + "Build", + function(opts) build(opts.fargs) end, + { + nargs = "*", + desc = "Run project build.sh", + } +) +map("n", "", function() build({}) end, { desc = "Build project", }) +map("t", "", function() build({}) end, { desc = "Build project", }) diff --git a/config/nvim/lua/extra/lsp/init.lua b/config/nvim/lua/extra/lsp/init.lua new file mode 100644 index 0000000..62ced47 --- /dev/null +++ b/config/nvim/lua/extra/lsp/init.lua @@ -0,0 +1,11 @@ +-- ------------------------------------------------------------ +-- LSP +local capabilities = require("blink.cmp").get_lsp_capabilities() +vim.lsp.config("gopls", { capabilities = capabilities, }) +vim.lsp.config("ols", { capabilities = capabilities, }) +vim.lsp.enable({ "gopls", "ols", }) +map("n", "gd", vim.lsp.buf.definition) +map("i", "", vim.lsp.buf.signature_help) + +vim.api.nvim_create_user_command("Rename", function() vim.lsp.buf.rename() end, {}) +vim.api.nvim_create_user_command("Actions", function() vim.lsp.buf.code_action() end, {}) diff --git a/config/nvim/lua/extra/terminal/init.lua b/config/nvim/lua/extra/terminal/init.lua new file mode 100644 index 0000000..03b5fba --- /dev/null +++ b/config/nvim/lua/extra/terminal/init.lua @@ -0,0 +1,90 @@ +-- ------------------------------------------------------------ +-- TERMINAL SYSTEM +-- ------------------------------------------------------------ +local term_buf = nil + +local function open_term_split() + vim.cmd("botright vsplit") + + local win = vim.api.nvim_get_current_win() + + if term_buf and vim.api.nvim_buf_is_valid(term_buf) then + vim.api.nvim_win_set_buf(win, term_buf) + else + vim.cmd("terminal") + term_buf = vim.api.nvim_get_current_buf() + end + + vim.api.nvim_win_set_width(win, math.floor(vim.o.columns * 0.37)) + vim.cmd("startinsert") +end + +local function toggle_term() + for _, win in ipairs(vim.api.nvim_list_wins()) do + if vim.api.nvim_win_get_buf(win) == term_buf then + vim.api.nvim_win_close(win, false) + return + end + end + + open_term_split() +end + +local function open_term_fullscreen() + if term_buf and vim.api.nvim_buf_is_valid(term_buf) then + vim.api.nvim_set_current_buf(term_buf) + else + vim.cmd("terminal") + term_buf = vim.api.nvim_get_current_buf() + end + + vim.cmd("startinsert") +end + +local function prev_non_term_buf() + local current = vim.api.nvim_get_current_buf() + local buffers = vim.fn.getbufinfo({ buflisted = 1 }) + local candidates = {} + + for _, buffer in ipairs(buffers) do + if buffer.bufnr ~= current and vim.bo[buffer.bufnr].buftype ~= "terminal" then + table.insert(candidates, buffer) + end + end + + if #candidates == 0 then + print("No previous non-terminal buffer") + return + end + + table.sort(candidates, function(a, b) + return a.lastused > b.lastused + end) + + vim.api.nvim_set_current_buf(candidates[1].bufnr) +end + +function send(command) + local terminal_visible = false + + for _, win in ipairs(vim.api.nvim_list_wins()) do + if term_buf and vim.api.nvim_win_get_buf(win) == term_buf then + terminal_visible = true + break + end + end + + if not terminal_visible then + open_term_split() + end + + local job = vim.b[term_buf].terminal_job_id + + if job then + vim.api.nvim_chan_send(job, command .. "\n") + end +end +map("n", "", toggle_term, { desc = "Toggle terminal split", }) +map("n", "", open_term_fullscreen, { desc = "Open terminal fullscreen", }) +map("t", "", toggle_term, { desc = "Toggle terminal split", }) +map("t", "", prev_non_term_buf, { desc = "Return to previous buffer", })