diff --git a/homes/aarch64-darwin/evanreichard@mac-va-mbp-work/default.nix b/homes/aarch64-darwin/evanreichard@mac-va-mbp-work/default.nix index 81a442b..1a3ef80 100755 --- a/homes/aarch64-darwin/evanreichard@mac-va-mbp-work/default.nix +++ b/homes/aarch64-darwin/evanreichard@mac-va-mbp-work/default.nix @@ -38,14 +38,8 @@ in programs.jq = enabled; programs.pandoc = enabled; home.packages = with pkgs; [ - android-tools - imagemagick - python312 - texliveSmall # Pandoc PDF Dep - google-cloud-sdk - tldr - - # AI Assistants + colima + docker reichard.qwen-code codex ]; diff --git a/modules/home/programs/terminal/nvim/config/lua/aerial-config.lua b/modules/home/programs/terminal/nvim/config/lua/aerial-config.lua deleted file mode 100755 index 2e75b4c..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/aerial-config.lua +++ /dev/null @@ -1,8 +0,0 @@ -require('aerial').setup({ - on_attach = function(bufnr) - vim.keymap.set('n', '{', 'AerialPrev', {buffer = bufnr}) - vim.keymap.set('n', '}', 'AerialNext', {buffer = bufnr}) - end -}) - -vim.keymap.set('n', 'a', 'AerialToggle!') diff --git a/modules/home/programs/terminal/nvim/config/lua/base.lua b/modules/home/programs/terminal/nvim/config/lua/base.lua index 1892f6e..6bbcae6 100755 --- a/modules/home/programs/terminal/nvim/config/lua/base.lua +++ b/modules/home/programs/terminal/nvim/config/lua/base.lua @@ -6,7 +6,7 @@ vim.cmd("colorscheme catppuccin-mocha") -- Set User Shell -vim.o.shell = "/usr/bin/env bash" +vim.o.shell = require("nix-vars").bash -- Set Leader vim.keymap.set("n", "", "", { silent = true }) @@ -38,35 +38,3 @@ vim.opt.shiftwidth = 2 vim.opt.foldmethod = "indent" vim.opt.foldnestmax = 10 vim.opt.foldlevel = 2 - --- Diagnostics Mappings -local diagnostics_active = true -local toggle_diagnostics = function() - diagnostics_active = not diagnostics_active - if diagnostics_active then - vim.diagnostic.enable() - else - vim.diagnostic.disable() - end -end - -local diagnostics_loclist_active = false -local toggle_diagnostics_loclist = function() - diagnostics_loclist_active = not diagnostics_loclist_active - if diagnostics_loclist_active then - vim.diagnostic.setloclist() - else - vim.cmd("lclose") - end -end - -local opts = { noremap = true, silent = true } -vim.keymap.set("n", "qt", toggle_diagnostics, opts) -vim.keymap.set("n", "qN", function() - vim.diagnostic.goto_prev({ float = false }) -end, opts) -vim.keymap.set("n", "qn", function() - vim.diagnostic.goto_next({ float = false }) -end, opts) -vim.keymap.set("n", "qq", toggle_diagnostics_loclist, opts) -vim.keymap.set("n", "qe", vim.diagnostic.open_float, opts) diff --git a/modules/home/programs/terminal/nvim/config/lua/dap-config.lua b/modules/home/programs/terminal/nvim/config/lua/dap-config.lua index 35eb73f..d95645a 100755 --- a/modules/home/programs/terminal/nvim/config/lua/dap-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/dap-config.lua @@ -3,48 +3,48 @@ local dapui = require("dapui") local dapgo = require("dap-go") dapui.setup({ - controls = { - element = "repl", - enabled = true, - icons = { - disconnect = "", - pause = "", - play = "", - run_last = "", - step_back = "", - step_into = "", - step_out = "", - step_over = "", - terminate = "" - } - }, - element_mappings = {}, - expand_lines = false, - floating = {border = "single", mappings = {close = {"q", ""}}}, - force_buffers = true, - icons = {collapsed = "", current_frame = "", expanded = ""}, - layouts = { - { - elements = {{id = "repl", size = 0.5}, {id = "scopes", size = 0.5}}, - position = "bottom", - size = 10 - }, { - elements = { - {id = "breakpoints", size = 0.5}, {id = "stacks", size = 0.5} - }, - position = "left", - size = 40 - } - }, - mappings = { - edit = "e", - expand = {"", "<2-LeftMouse>"}, - open = "o", - remove = "d", - repl = "r", - toggle = "t" - }, - render = {indent = 1, max_value_lines = 100} + controls = { + element = "repl", + enabled = true, + icons = { + disconnect = "", + pause = "", + play = "", + run_last = "", + step_back = "", + step_into = "", + step_out = "", + step_over = "", + terminate = "" + } + }, + element_mappings = {}, + expand_lines = false, + floating = { border = "single", mappings = { close = { "q", "" } } }, + force_buffers = true, + icons = { collapsed = "", current_frame = "", expanded = "" }, + layouts = { + { + elements = { { id = "repl", size = 0.5 }, { id = "scopes", size = 0.5 } }, + position = "bottom", + size = 10 + }, { + elements = { + { id = "breakpoints", size = 0.5 }, { id = "stacks", size = 0.5 } + }, + position = "left", + size = 40 + } + }, + mappings = { + edit = "e", + expand = { "", "<2-LeftMouse>" }, + open = "o", + remove = "d", + repl = "r", + toggle = "t" + }, + render = { indent = 1, max_value_lines = 100 } }) dapgo.setup() @@ -54,17 +54,17 @@ dap.listeners.before.launch.dapui_config = function() dapui.open() end -- Continue Hotkey ("c") vim.api.nvim_create_autocmd("FileType", { - pattern = "dap-repl", - callback = function() - vim.api.nvim_buf_set_keymap(0, 'n', 'c', - "lua require'dap'.continue()", - {noremap = true, silent = true}) - end + pattern = "dap-repl", + callback = function() + vim.api.nvim_buf_set_keymap(0, 'n', 'c', + "lua require'dap'.continue()", + { noremap = true, silent = true }) + end }) --- Leader Keys -local opts = {noremap = true, silent = true} -vim.keymap.set('n', 'db', dap.toggle_breakpoint, opts) -vim.keymap.set('n', 'du', dapui.toggle, opts) -vim.keymap.set('n', 'dc', dap.continue, opts) -vim.keymap.set('n', 'dt', dapgo.debug_test, opts) +-- Create KeyMaps +local opts = { noremap = true, silent = true } +vim.keymap.set('n', 'db', dap.toggle_breakpoint, vim.tbl_extend("force", { desc = "Toggle Breakpoint" }, opts)) +vim.keymap.set('n', 'dc', dap.continue, vim.tbl_extend("force", { desc = "Continue" }, opts)) +vim.keymap.set('n', 'dt', dapgo.debug_test, vim.tbl_extend("force", { desc = "Run Test" }, opts)) +vim.keymap.set('n', 'du', dapui.toggle, vim.tbl_extend("force", { desc = "Toggle UI" }, opts)) diff --git a/modules/home/programs/terminal/nvim/config/lua/diagnostics-config.lua b/modules/home/programs/terminal/nvim/config/lua/diagnostics-config.lua new file mode 100644 index 0000000..73682d6 --- /dev/null +++ b/modules/home/programs/terminal/nvim/config/lua/diagnostics-config.lua @@ -0,0 +1,35 @@ +-- Diagnostics Mappings +local diagnostics_active = true +local toggle_diagnostics = function() + diagnostics_active = not diagnostics_active + if diagnostics_active then + vim.diagnostic.enable() + else + vim.diagnostic.disable() + end +end + +local diagnostics_loclist_active = false +local toggle_diagnostics_loclist = function() + diagnostics_loclist_active = not diagnostics_loclist_active + if diagnostics_loclist_active then + vim.diagnostic.setloclist() + else + vim.cmd("lclose") + end +end + +-- Create KeyMaps +local opts = { noremap = true, silent = true } +vim.keymap.set("n", "qN", function() + vim.diagnostic.goto_prev({ float = false }) +end, vim.tbl_extend("force", { desc = "Previous Diagnostic" }, opts)) +vim.keymap.set("n", "qe", vim.diagnostic.open_float, + vim.tbl_extend("force", { desc = "Open Diagnostics" }, opts)) +vim.keymap.set("n", "qt", toggle_diagnostics, + vim.tbl_extend("force", { desc = "Toggle Inline Diagnostics" }, opts)) +vim.keymap.set("n", "qn", function() + vim.diagnostic.goto_next({ float = false }) +end, vim.tbl_extend("force", { desc = "Next Diagnostic" }, opts)) +vim.keymap.set("n", "qq", toggle_diagnostics_loclist, + vim.tbl_extend("force", { desc = "Toggle Diagnostic List" }, opts)) diff --git a/modules/home/programs/terminal/nvim/config/lua/diffview-config.lua b/modules/home/programs/terminal/nvim/config/lua/diffview-config.lua deleted file mode 100755 index c941eb6..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/diffview-config.lua +++ /dev/null @@ -1,6 +0,0 @@ -vim.keymap.set('n', 'go', 'DiffviewOpen') -vim.keymap.set('n', 'gO', 'DiffviewOpen origin/main...HEAD') -vim.keymap.set('n', 'gh', 'DiffviewFileHistory') -vim.keymap.set('n', 'gH', - 'DiffviewFileHistory --range=origin..HEAD') -vim.keymap.set('n', 'gc', 'DiffviewClose') diff --git a/modules/home/programs/terminal/nvim/config/lua/git-config.lua b/modules/home/programs/terminal/nvim/config/lua/git-config.lua new file mode 100644 index 0000000..cfce6a8 --- /dev/null +++ b/modules/home/programs/terminal/nvim/config/lua/git-config.lua @@ -0,0 +1,69 @@ +require("gitsigns").setup({ + current_line_blame = true, + current_line_blame_opts = { delay = 0 }, + on_attach = function(bufnr) + local gitsigns = require("gitsigns") + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + map("n", "gb", gitsigns.toggle_current_line_blame, { desc = "Git Blame Line" }) + map("n", "gB", function() + gitsigns.blame_line({ full = true }) + end, { desc = "Git Blame Full" }) + end, +}) + + +local function get_git_info() + local abs_path = vim.fn.expand("%:p") + local git_root = vim.fn.systemlist( + "git -C " .. vim.fn.escape(vim.fn.fnamemodify(abs_path, ":h"), " ") .. " rev-parse --show-toplevel" + )[1] + + if vim.v.shell_error ~= 0 then + return + end + + local git_repo = vim.fn.system("git remote get-url origin"):match("([^/:]+/[^/.]+)%.?[^/]*$"):gsub("\n", "") + local git_branch = vim.fn.system("git rev-parse --abbrev-ref HEAD"):gsub("\n", "") + + return { + file = vim.fn.fnamemodify(abs_path, ":s?" .. git_root .. "/??"), + branch = git_branch, + repo = git_repo, + } +end + +local function copy_git_link() + local git_info = get_git_info() + if git_info == nil then + vim.notify("Failed to get git info", vim.log.levels.ERROR) + return + end + + local start_line = vim.fn.line("v") + local end_line = vim.fn.line(".") + + local message = string.format( + "https://github.com/%s/blob/%s/%s#L%d-L%d", + git_info.repo, + git_info.branch, + git_info.file, + start_line, + end_line + ) + vim.fn.setreg("+", message) + vim.notify("Copied:\n\t" .. message, vim.log.levels.INFO) +end + +-- Create KeyMaps +vim.keymap.set("v", "gy", function() copy_git_link() end, { desc = "Copy GitHub Link" }) +vim.keymap.set('n', 'go', 'DiffviewOpen', { desc = "Open Diff - Current" }) +vim.keymap.set('n', 'gO', 'DiffviewOpen origin/main...HEAD', { desc = "Open Diff - Main" }) +vim.keymap.set('n', 'gh', 'DiffviewFileHistory', { desc = "Diff History" }) +vim.keymap.set('n', 'gH', 'DiffviewFileHistory --range=origin..HEAD', { desc = "Diff History - Main" }) +vim.keymap.set('n', 'gc', 'DiffviewClose', { desc = "Close Diff" }) diff --git a/modules/home/programs/terminal/nvim/config/lua/git-ref.lua b/modules/home/programs/terminal/nvim/config/lua/git-ref.lua deleted file mode 100755 index b60aa2a..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/git-ref.lua +++ /dev/null @@ -1,41 +0,0 @@ -local function get_git_info() - local abs_path = vim.fn.expand("%:p") - local git_root = vim.fn.systemlist( - "git -C " .. vim.fn.escape(vim.fn.fnamemodify(abs_path, ":h"), " ") .. " rev-parse --show-toplevel" - )[1] - - if vim.v.shell_error ~= 0 then - return - end - - local git_repo = vim.fn.system("git remote get-url origin"):match("([^/:]+/[^/.]+)%.?[^/]*$"):gsub("\n", "") - local git_branch = vim.fn.system("git rev-parse --abbrev-ref HEAD"):gsub("\n", "") - - return { - file = vim.fn.fnamemodify(abs_path, ":s?" .. git_root .. "/??"), - branch = git_branch, - repo = git_repo, - } -end - -vim.keymap.set("v", "gy", function() - local git_info = get_git_info() - if git_info == nil then - vim.notify("Failed to get git info", vim.log.levels.ERROR) - return - end - - local start_line = vim.fn.line("v") - local end_line = vim.fn.line(".") - - local message = string.format( - "https://github.com/%s/blob/%s/%s#L%d-L%d", - git_info.repo, - git_info.branch, - git_info.file, - start_line, - end_line - ) - vim.fn.setreg("+", message) - vim.notify("Copied:\n\t" .. message, vim.log.levels.INFO) -end, { noremap = true, silent = true, desc = "Copy GitHub Link" }) diff --git a/modules/home/programs/terminal/nvim/config/lua/git-signs.lua b/modules/home/programs/terminal/nvim/config/lua/git-signs.lua deleted file mode 100755 index 2db7ce6..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/git-signs.lua +++ /dev/null @@ -1,18 +0,0 @@ -require("gitsigns").setup({ - current_line_blame = true, - current_line_blame_opts = { delay = 0 }, - on_attach = function(bufnr) - local gitsigns = require("gitsigns") - - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end - - map("n", "gb", gitsigns.toggle_current_line_blame) - map("n", "gB", function() - gitsigns.blame_line({ full = true }) - end) - end, -}) diff --git a/modules/home/programs/terminal/nvim/config/lua/init.lua b/modules/home/programs/terminal/nvim/config/lua/init.lua index 510328f..dbba8c2 100755 --- a/modules/home/programs/terminal/nvim/config/lua/init.lua +++ b/modules/home/programs/terminal/nvim/config/lua/init.lua @@ -1,23 +1,18 @@ require("base") -require("aerial-config") require("autopairs-config") require("cmp-config") require("comment-config") require("dap-config") -require("diffview-config") -require("git-ref") -require("git-signs") +require("diagnostics-config") +require("git-config") require("leap-config") -require("llm") +require("llm-config") require("lsp-config") -require("lsp-lines-config") require("lualine-config") -require("neotree-config") require("noice-config") require("numb-config") require("octo-config") -require("silicon-config") -require("telescope-config") +require("snacks-config") require("toggleterm-config") require("ts-config") require("weird-chars") diff --git a/modules/home/programs/terminal/nvim/config/lua/llm-config.lua b/modules/home/programs/terminal/nvim/config/lua/llm-config.lua new file mode 100755 index 0000000..eaef1b8 --- /dev/null +++ b/modules/home/programs/terminal/nvim/config/lua/llm-config.lua @@ -0,0 +1,67 @@ +local llm_endpoint = "https://llm-api.va.reichard.io" +-- local llm_assistant_model = "gpt-oss-20b-thinking" +-- local llm_infill_model = "qwen2.5-coder-3b-instruct" + +-- Available models: qwen3-30b-2507-instruct, qwen2.5-coder-3b-instruct +local llm_assistant_model = "qwen3-30b-2507-instruct" +local llm_infill_model = llm_assistant_model + +-- Default Llama - Toggle Llama & Copilot +-- vim.g.copilot_filetypes = { ["*"] = false } +local current_mode = "copilot" +local function toggle_llm_fim_provider() + if current_mode == "llama" then + vim.g.copilot_filetypes = { ["*"] = true } + vim.cmd("Copilot enable") + vim.cmd("LlamaDisable") + current_mode = "copilot" + vim.notify("Copilot FIM enabled", vim.log.levels.INFO) + else + vim.g.copilot_filetypes = { ["*"] = true } + vim.cmd("Copilot disable") + vim.cmd("LlamaEnable") + current_mode = "llama" + vim.notify("Llama FIM enabled", vim.log.levels.INFO) + end +end + +-- OpenCode Configuration +vim.g.opencode_opts = { + provider = { + enabled = "snacks", + snacks = { + win = { + -- position = "float", + enter = true, + width = 0.5, + -- height = 0.75, + }, + start_insert = true, + auto_insert = true, + } + } +} + +-- Copilot Configuration +vim.g.copilot_no_tab_map = true + +-- LLama LLM FIM +vim.g.llama_config = { + endpoint = llm_endpoint .. "/infill", + model = llm_infill_model, + n_predict = 2048, + ring_n_chunks = 32, + enable_at_startup = false, +} + +-- Create KeyMaps +vim.keymap.set("n", "af", toggle_llm_fim_provider, { desc = "Toggle FIM (Llama / Copilot)" }) +vim.keymap.set({ "n", "x" }, "ai", function() require("opencode").ask("@this: ", { submit = true }) end, + { desc = "Ask OpenCode" }) +vim.keymap.set({ "n", "x" }, "aa", function() require("opencode").select() end, + { desc = "Execute OpenCode Action" }) +vim.keymap.set({ "n", "t" }, "at", function() require("opencode").toggle() end, { desc = "Toggle OpenCode" }) +vim.keymap.set('i', '', 'copilot#Accept("\\")', { + expr = true, + replace_keycodes = false +}) diff --git a/modules/home/programs/terminal/nvim/config/lua/llm.lua b/modules/home/programs/terminal/nvim/config/lua/llm.lua deleted file mode 100755 index 3069cc9..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/llm.lua +++ /dev/null @@ -1,90 +0,0 @@ -local llm_endpoint = "https://llm-api.va.reichard.io" --- local llm_assistant_model = "gpt-oss-20b-thinking" --- local llm_infill_model = "qwen2.5-coder-3b-instruct" - -local llm_assistant_model = "qwen3-30b-2507-instruct" -local llm_infill_model = llm_assistant_model - --- Default Llama - Toggle Llama & Copilot --- vim.g.copilot_filetypes = { ["*"] = false } -local current_mode = "copilot" -local function toggle_llm_fim_provider() - if current_mode == "llama" then - vim.g.copilot_filetypes = { ["*"] = true } - vim.cmd("Copilot enable") - vim.cmd("LlamaDisable") - current_mode = "copilot" - vim.notify("Copilot FIM enabled", vim.log.levels.INFO) - else - vim.g.copilot_filetypes = { ["*"] = true } - vim.cmd("Copilot disable") - vim.cmd("LlamaEnable") - current_mode = "llama" - vim.notify("Llama FIM enabled", vim.log.levels.INFO) - end -end -vim.keymap.set("n", "cf", toggle_llm_fim_provider, { desc = "Toggle FIM (Llama / Copilot)" }) - --- Copilot Accept Shortcut -vim.keymap.set('i', '', 'copilot#Accept("\\")', { - expr = true, - replace_keycodes = false -}) -vim.g.copilot_no_tab_map = true - --- Configure LLama LLM FIM -vim.g.llama_config = { - endpoint = llm_endpoint .. "/infill", - model = llm_infill_model, - n_predict = 2048, - ring_n_chunks = 32, - enable_at_startup = false, -} - --- Configure Code Companion -require("plugins.codecompanion.fidget-spinner"):init() -require("codecompanion").setup({ - display = { chat = { window = { layout = "float", width = 0.6 } } }, - adapters = { - http = { - opts = { show_defaults = false, }, - ["llama-swap"] = function() - return require("codecompanion.adapters").extend("openai_compatible", { - name = "llama-swap", - formatted_name = "LlamaSwap", - schema = { model = { default = llm_assistant_model } }, - env = { url = llm_endpoint }, - }) - end, - copilot = require("codecompanion.adapters.http.copilot"), - }, - acp = { opts = { show_defaults = false } }, - }, - strategies = { - chat = { adapter = "llama-swap" }, - inline = { adapter = "llama-swap" }, - cmd = { adapter = "llama-swap" }, - }, - chat = { dispay = "telescope" }, - memory = { - opts = { chat = { enabled = true } }, - default = { - description = "Collection of common files for all projects", - files = { - ".clinerules", - ".cursorrules", - ".goosehints", - ".rules", - ".windsurfrules", - ".github/copilot-instructions.md", - "AGENT.md", - "AGENTS.md", - ".cursor/rules/", - { path = "CLAUDE.md", parser = "claude" }, - { path = "CLAUDE.local.md", parser = "claude" }, - { path = "~/.claude/CLAUDE.md", parser = "claude" }, - }, - is_default = true, - }, - }, -}) diff --git a/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua b/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua index 02ac353..01cb811 100755 --- a/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua @@ -20,6 +20,15 @@ require('render-markdown').setup({ }, }) +------------------------------------------------------ +---------------------- LSP Lines --------------------- +------------------------------------------------------ +require("lsp_lines").setup() +vim.diagnostic.config({ + virtual_text = false, + virtual_lines = true, +}) + ------------------------------------------------------ -------------------- Built-in LSP -------------------- ------------------------------------------------------ @@ -27,8 +36,6 @@ local nix_vars = require("nix-vars") local augroup = vim.api.nvim_create_augroup("LspFormatting", { clear = false }) local on_attach = function(client, bufnr) - local bufopts = { noremap = true, silent = true, buffer = bufnr } - if client:supports_method("textDocument/formatting") then vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { @@ -40,17 +47,25 @@ local on_attach = function(client, bufnr) }) end - vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts) - vim.keymap.set("n", "", vim.lsp.buf.signature_help, bufopts) - vim.keymap.set("n", "lD", vim.lsp.buf.declaration, bufopts) - vim.keymap.set("n", "ld", vim.lsp.buf.definition, bufopts) - vim.keymap.set("n", "li", vim.lsp.buf.implementation, bufopts) - vim.keymap.set("n", "ln", vim.lsp.buf.rename, bufopts) - vim.keymap.set("n", "lr", vim.lsp.buf.references, bufopts) - vim.keymap.set("n", "lt", vim.lsp.buf.type_definition, bufopts) + -- Create KeyMaps + local bufopts = { noremap = true, silent = true, buffer = bufnr } + vim.keymap.set("n", "K", vim.lsp.buf.hover, vim.tbl_extend("force", { desc = 'Hover documentation' }, bufopts)) + vim.keymap.set("n", "", vim.lsp.buf.signature_help, + vim.tbl_extend("force", { desc = "Show signature help" }, bufopts)) + vim.keymap.set("n", "lD", vim.lsp.buf.declaration, + vim.tbl_extend("force", { desc = "Go to declaration" }, bufopts)) + vim.keymap.set("n", "ld", vim.lsp.buf.definition, + vim.tbl_extend("force", { desc = "Go to definition" }, bufopts)) + vim.keymap.set("n", "li", vim.lsp.buf.implementation, + vim.tbl_extend("force", { desc = "Go to implementation" }, bufopts)) + vim.keymap.set("n", "ln", vim.lsp.buf.rename, vim.tbl_extend("force", { desc = "Rename symbol" }, bufopts)) + vim.keymap.set("n", "lr", vim.lsp.buf.references, + vim.tbl_extend("force", { desc = "Show references" }, bufopts)) + vim.keymap.set("n", "lt", vim.lsp.buf.type_definition, + vim.tbl_extend("force", { desc = "Go to type definition" }, bufopts)) vim.keymap.set("n", "lf", function() vim.lsp.buf.format({ async = true, timeout_ms = 2000 }) - end, bufopts) + end, vim.tbl_extend("force", { desc = "Format file" }, bufopts)) end local on_attach_no_formatting = function(client, bufnr) diff --git a/modules/home/programs/terminal/nvim/config/lua/lsp-lines-config.lua b/modules/home/programs/terminal/nvim/config/lua/lsp-lines-config.lua deleted file mode 100755 index 09a6ce6..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/lsp-lines-config.lua +++ /dev/null @@ -1,5 +0,0 @@ -require("lsp_lines").setup() -vim.diagnostic.config({ - virtual_text = false, - virtual_lines = true, -}) diff --git a/modules/home/programs/terminal/nvim/config/lua/lualine-config.lua b/modules/home/programs/terminal/nvim/config/lua/lualine-config.lua index b7fa8d3..01bb20e 100755 --- a/modules/home/programs/terminal/nvim/config/lua/lualine-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/lualine-config.lua @@ -50,5 +50,8 @@ end require("lualine").setup({ options = { theme = "catppuccin" }, - sections = { lualine_c = { { pr_status } } }, + sections = { + lualine_c = { { pr_status } }, + lualine_z = { require("opencode").statusline } + }, }) diff --git a/modules/home/programs/terminal/nvim/config/lua/neotree-config.lua b/modules/home/programs/terminal/nvim/config/lua/neotree-config.lua deleted file mode 100755 index 4e4aa21..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/neotree-config.lua +++ /dev/null @@ -1,2 +0,0 @@ -require("neo-tree").setup({ window = { mappings = { [""] = "none" } } }) -vim.keymap.set("n", "t", ":Neotree toggle", { silent = true }) diff --git a/modules/home/programs/terminal/nvim/config/lua/noice-config.lua b/modules/home/programs/terminal/nvim/config/lua/noice-config.lua index 02e8e38..7007697 100755 --- a/modules/home/programs/terminal/nvim/config/lua/noice-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/noice-config.lua @@ -1,26 +1,14 @@ --- Noice Doc Scrolling -vim.keymap.set("n", "", function() - if not require("noice.lsp").scroll(4) then return "" end -end, {silent = true, expr = true}) - -vim.keymap.set("n", "", function() - if not require("noice.lsp").scroll(-4) then return "" end -end, {silent = true, expr = true}) - -- Noice Setup require("noice").setup({ - lsp = { - override = { - ["vim.lsp.util.convert_input_to_markdown_lines"] = true, - ["vim.lsp.util.stylize_markdown"] = true, - ["cmp.entry.get_documentation"] = false - }, - signature = {enabled = false} - }, - presets = { - command_palette = true, -- position the cmdline and popupmenu together - long_message_to_split = true, -- long messages will be sent to a split - inc_rename = false, -- enables an input dialog for inc-rename.nvim - lsp_doc_border = false -- add a border to hover docs and signature help - } + -- Ignore (Snacks Priority) + routes = { + { + filter = { event = "ui", kind = "input", }, + opts = { skip = true }, + }, + { + filter = { event = "ui", kind = "select", }, + opts = { skip = true }, + }, + }, }) diff --git a/modules/home/programs/terminal/nvim/config/lua/octo-config.lua b/modules/home/programs/terminal/nvim/config/lua/octo-config.lua index 4bfd56d..7b3630e 100644 --- a/modules/home/programs/terminal/nvim/config/lua/octo-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/octo-config.lua @@ -1,5 +1,6 @@ require("octo").setup() +-- Create KeyMaps vim.keymap.set("n", "rs", "Octo review start") vim.keymap.set("n", "rd", "Octo review discard") vim.keymap.set("n", "rr", "Octo review resume") @@ -8,23 +9,5 @@ vim.keymap.set("n", "rca", "Octo review comments") vim.keymap.set("n", "rcs", "Octo comment suggest") vim.keymap.set("n", "rcc", "Octo comment add") vim.keymap.set("n", "rcr", "Octo comment reply") - vim.keymap.set("n", "pd", "Octo pr diff") vim.keymap.set("n", "pc", "Octo pr changes") - --- vim.api.nvim_create_autocmd("FileType", { --- pattern = "octo", --- callback = function() --- vim.keymap.set("n", "rs", "Octo review start", { buffer = true }) --- vim.keymap.set("n", "rd", "Octo review discard", { buffer = true }) --- vim.keymap.set("n", "rr", "Octo review resume", { buffer = true }) --- vim.keymap.set("n", "re", "Octo review submit", { buffer = true }) --- vim.keymap.set("n", "rca", "Octo review comments", { buffer = true }) --- vim.keymap.set("n", "rcs", "Octo comment suggest", { buffer = true }) --- vim.keymap.set("n", "rcc", "Octo comment add", { buffer = true }) --- vim.keymap.set("n", "rcr", "Octo comment reply", { buffer = true }) --- --- vim.keymap.set("n", "pd", "Octo pr diff", { buffer = true }) --- vim.keymap.set("n", "pc", "Octo pr changes", { buffer = true }) --- end, --- }) diff --git a/modules/home/programs/terminal/nvim/config/lua/plugins/codecompanion/fidget-spinner.lua b/modules/home/programs/terminal/nvim/config/lua/plugins/codecompanion/fidget-spinner.lua deleted file mode 100644 index 05066e2..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/plugins/codecompanion/fidget-spinner.lua +++ /dev/null @@ -1,71 +0,0 @@ -local progress = require("fidget.progress") - -local M = {} - -function M:init() - local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {}) - - vim.api.nvim_create_autocmd({ "User" }, { - pattern = "CodeCompanionRequestStarted", - group = group, - callback = function(request) - local handle = M:create_progress_handle(request) - M:store_progress_handle(request.data.id, handle) - end, - }) - - vim.api.nvim_create_autocmd({ "User" }, { - pattern = "CodeCompanionRequestFinished", - group = group, - callback = function(request) - local handle = M:pop_progress_handle(request.data.id) - if handle then - M:report_exit_status(handle, request) - handle:finish() - end - end, - }) -end - -M.handles = {} - -function M:store_progress_handle(id, handle) - M.handles[id] = handle -end - -function M:pop_progress_handle(id) - local handle = M.handles[id] - M.handles[id] = nil - return handle -end - -function M:create_progress_handle(request) - return progress.handle.create({ - title = " Requesting assistance (" .. request.data.strategy .. ")", - message = "In progress...", - lsp_client = { - name = M:llm_role_title(request.data.adapter), - }, - }) -end - -function M:llm_role_title(adapter) - local parts = {} - table.insert(parts, adapter.formatted_name) - if adapter.model and adapter.model ~= "" then - table.insert(parts, "(" .. adapter.model .. ")") - end - return table.concat(parts, " ") -end - -function M:report_exit_status(handle, request) - if request.data.status == "success" then - handle.message = "Completed" - elseif request.data.status == "error" then - handle.message = " Error" - else - handle.message = "󰜺 Cancelled" - end -end - -return M diff --git a/modules/home/programs/terminal/nvim/config/lua/silicon-config.lua b/modules/home/programs/terminal/nvim/config/lua/silicon-config.lua deleted file mode 100755 index 82a442f..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/silicon-config.lua +++ /dev/null @@ -1,10 +0,0 @@ -local silicon = require('silicon') -silicon.setup({}) - -vim.keymap.set('v', 'ss', function() silicon.visualise_api({}) end) -vim.keymap.set('v', 'sb', - function() silicon.visualise_api({show_buf = true}) end) -vim.keymap.set('n', 'sv', - function() silicon.visualise_api({visible = true}) end) -vim.keymap.set('n', 'sb', - function() silicon.visualise_api({show_buf = true}) end) diff --git a/modules/home/programs/terminal/nvim/config/lua/snacks-config.lua b/modules/home/programs/terminal/nvim/config/lua/snacks-config.lua new file mode 100644 index 0000000..0bafd72 --- /dev/null +++ b/modules/home/programs/terminal/nvim/config/lua/snacks-config.lua @@ -0,0 +1,23 @@ +-- Snacks Setup +local snacks = require("snacks") +snacks.setup({ + input = { enabled = true, style = "popup" }, + select = { enabled = true, style = "popup" }, +}) + +-- Create KeyMaps +vim.keymap.set("n", "fb", snacks.picker.buffers, { desc = "Buffers" }) +vim.keymap.set("n", "fd", snacks.picker.diagnostics, { desc = "Diagnostics" }) +vim.keymap.set("n", "ff", snacks.picker.files, { desc = "Find Files" }) +vim.keymap.set("n", "fg", snacks.picker.grep, { desc = "Grep Files" }) +vim.keymap.set("n", "fh", snacks.picker.help, { desc = "Help Tags" }) +vim.keymap.set("n", "fj", snacks.picker.jumps, { desc = "Jump List" }) +vim.keymap.set("n", "fl", function() snacks.terminal("lazygit") end, { desc = "LazyGit" }) +vim.keymap.set("n", "fp", snacks.picker.gh_pr, { desc = "GitHub Pull Requests" }) +vim.keymap.set("n", "fs", snacks.picker.lsp_symbols, { desc = "Symbols" }) +vim.keymap.set("n", "fu", snacks.picker.undo, { desc = "Undo History" }) +vim.keymap.set("n", "gI", snacks.picker.lsp_implementations, { desc = "LSP Implementations" }) +vim.keymap.set("n", "gi", snacks.picker.lsp_incoming_calls, { desc = "LSP Incoming Calls" }) +vim.keymap.set("n", "go", snacks.picker.lsp_outgoing_calls, { desc = "LSP Outgoing Calls" }) +vim.keymap.set("n", "gr", snacks.picker.lsp_references, { desc = "LSP References" }) +vim.keymap.set("n", [[]], function() snacks.terminal() end, { desc = "Toggle Terminal" }) diff --git a/modules/home/programs/terminal/nvim/config/lua/telescope-config.lua b/modules/home/programs/terminal/nvim/config/lua/telescope-config.lua deleted file mode 100755 index 0283898..0000000 --- a/modules/home/programs/terminal/nvim/config/lua/telescope-config.lua +++ /dev/null @@ -1,23 +0,0 @@ -require("telescope").setup({ - extensions = { - fzf = { - fuzzy = true, - override_generic_sorter = true, - override_file_sorter = true, - case_mode = "smart_case", - }, - }, -}) - -require("telescope").load_extension("fzf") -require("telescope").load_extension("ui-select") -require("telescope").load_extension("undo") - -local builtin = require("telescope.builtin") -vim.keymap.set("n", "ff", builtin.find_files) -vim.keymap.set("n", "fg", builtin.live_grep) -vim.keymap.set("n", "fb", builtin.buffers) -vim.keymap.set("n", "fh", builtin.help_tags) -vim.keymap.set("n", "fj", builtin.jumplist) -vim.keymap.set("n", "fu", "Telescope undo") -vim.keymap.set("n", "fp", "Octo pr list") diff --git a/modules/home/programs/terminal/nvim/config/lua/toggleterm-config.lua b/modules/home/programs/terminal/nvim/config/lua/toggleterm-config.lua index c705c1d..904d616 100755 --- a/modules/home/programs/terminal/nvim/config/lua/toggleterm-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/toggleterm-config.lua @@ -1,20 +1,20 @@ -require("toggleterm").setup({open_mapping = [[]]}) - --- Get PR status on terminal load --- require("toggleterm").setup({ --- open_mapping = [[]], --- on_create = function(term) --- vim.cmd("startinsert") --- term:send("gh pr checks") --- end --- }) - --- Duplicate C-w & Esc Behavior -function _G.set_terminal_keymaps() - local opts = {buffer = 0} - vim.opt.signcolumn = "no" - vim.keymap.set('t', '', [[]], opts) - vim.keymap.set('t', '', [[]], opts) -end - -vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') +-- require("toggleterm").setup({open_mapping = [[]]}) +-- +-- -- Get PR status on terminal load +-- -- require("toggleterm").setup({ +-- -- open_mapping = [[]], +-- -- on_create = function(term) +-- -- vim.cmd("startinsert") +-- -- term:send("gh pr checks") +-- -- end +-- -- }) +-- +-- -- Duplicate C-w & Esc Behavior +-- function _G.set_terminal_keymaps() +-- local opts = {buffer = 0} +-- vim.opt.signcolumn = "no" +-- vim.keymap.set('t', '', [[]], opts) +-- vim.keymap.set('t', '', [[]], opts) +-- end +-- +-- vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') diff --git a/modules/home/programs/terminal/nvim/config/lua/which-key-config.lua b/modules/home/programs/terminal/nvim/config/lua/which-key-config.lua index 461db46..7ae1d9b 100755 --- a/modules/home/programs/terminal/nvim/config/lua/which-key-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/which-key-config.lua @@ -1,52 +1,9 @@ local wk = require("which-key") - -wk.setup({}) - wk.add({ - { "", desc = "Signature Help" }, - { "K", desc = "Definition Hover" }, - { "a", desc = "Aerial" }, - { "c", desc = "CodeCompanion" }, - { "cn", "CodeCompanionChat", desc = "New Chat", mode = { "v", "n" } }, - { "ct", "CodeCompanionChat Toggle", desc = "Toggle Chat" }, - { "ci", "CodeCompanion", desc = "Inline Prompt", mode = "v" }, - { "db", desc = "Toggle Breakpoint" }, - { "dc", desc = "Continue" }, - { "d", group = "Debug" }, - { "dt", desc = "Run Test" }, - { "du", desc = "Toggle UI" }, - { "fb", "Telescope buffers", desc = "Find Buffer" }, - { "ff", "Telescope find_files", desc = "Find File" }, - { "fg", "Telescope live_grep", desc = "Live Grep" }, - { "f", group = "Find - Telescope" }, - { "fh", "Telescope help_tags", desc = "Help Tags" }, - { "fj", "Telescope jumplist", desc = "Jump List" }, - { "fp", "Octo pr list", desc = "PR List" }, - { "gB", desc = "Git Blame Full" }, - { "gb", desc = "Git Blame Line" }, - { "gc", "DiffviewClose", desc = "Close Diff" }, - { "g", group = "DiffView" }, - { "gh", "DiffviewFileHistory", desc = "Diff History" }, - { "gH", "DiffviewFileHistory --range=origin..HEAD", desc = "Diff History - Main" }, - { "go", "DiffviewOpen", desc = "Open Diff - Current" }, - { "gO", "DiffviewOpen origin/main...HEAD", desc = "Open Diff - Main" }, - { "lD", desc = "Declaration" }, - { "ld", desc = "Definition" }, - { "lf", desc = "Format" }, - { "l", group = "LSP" }, - { "li", desc = "Implementation" }, - { "ln", desc = "Rename" }, - { "lr", desc = "References" }, - { "lt", desc = "Type Definition" }, - { "qe", desc = "Open Diagnostic Float" }, - { "q", group = "Diagnostics" }, - { "qn", desc = "Next Diagnostic" }, - { "qN", desc = "Previous Diagnostic" }, - { "qq", desc = "Toggle Diagnostic List" }, - { "qt", desc = "Toggle Inline Diagnostics" }, - { "sb", desc = "Buffer Screenshot", mode = { "n", "v" } }, - { "s", group = "Screenshot", mode = { "n", "v" } }, - { "ss", desc = "Selected Screenshot", mode = "v" }, - { "sv", desc = "Visual Screenshot" }, - { "t", desc = "NeoTree" }, + { "a", group = "LLM" }, -- llm-config.lua + { "f", group = "Find" }, -- snacks-config.lua + { "l", group = "LSP" }, -- lsp-config.lua + { "g", group = "Git" }, -- git-config.lua + { "q", group = "Diagnostics" }, -- diagnostics-config.lua + { "d", group = "Debug" }, -- dap-config.lua }) diff --git a/modules/home/programs/terminal/nvim/default.nix b/modules/home/programs/terminal/nvim/default.nix index a216a52..e5ed3e9 100755 --- a/modules/home/programs/terminal/nvim/default.nix +++ b/modules/home/programs/terminal/nvim/default.nix @@ -1,8 +1,9 @@ -{ pkgs -, lib -, config -, namespace -, ... +{ + pkgs, + lib, + config, + namespace, + ... }: let inherit (lib) mkIf; @@ -39,26 +40,20 @@ in # ------------------- # ----- Helpers ----- # ------------------- - aerial-nvim # Code Outline - codecompanion-nvim # CodeCompanion comment-nvim # Code Comments copilot-vim # GitHub Copilot diffview-nvim # Diff View - fidget-nvim # Notification Helper gitsigns-nvim # Git Blame leap-nvim # Quick Movement markdown-preview-nvim # Markdown Preview - neo-tree-nvim # File Explorer none-ls-nvim # Formatters numb-nvim # Peek / Jump to Lines nvim-autopairs # Automatically Close Pairs (),[],{} octo-nvim # Git Octo render-markdown-nvim # Markdown Renderer - telescope-fzf-native-nvim # Faster Telescope + snacks-nvim # OpenCode + snacks-nvim # Snacks telescope-nvim # Fuzzy Finder - telescope-ui-select-nvim # UI - telescope-undo-nvim # Undo Tree - toggleterm-nvim # Terminal Helper vim-nix # Nix Helpers which-key-nvim # Shortcut Helper @@ -84,6 +79,22 @@ in nvim-dap-go nvim-dap-ui + # -------------------- + # ----- OPENCODE ----- + # -------------------- + (pkgs.vimUtils.buildVimPlugin { + pname = "opencode.nvim"; + version = "2025-12-17"; + src = pkgs.fetchFromGitHub { + owner = "NickvanDyke"; + repo = "opencode.nvim"; + rev = "39a246b597d6050ca319142b5af5a8b81c74e7d9"; + hash = "sha256-h/Zttho/grrpmcklld15NNGf+3epqLg8RmmRW8eApSo="; + }; + meta.homepage = "https://github.com/NickvanDyke/opencode.nvim/"; + meta.hydraPlatforms = [ ]; + }) + # -------------------- # -- NONE-LS EXTRAS -- # -------------------- @@ -100,22 +111,6 @@ in meta.homepage = "https://github.com/nvimtools/none-ls-extras.nvim/"; }) - # ------------------- - # ----- Silicon ----- - # ------------------- - (pkgs.vimUtils.buildVimPlugin { - pname = "silicon.lua"; - version = "2025-10-28"; - src = pkgs.fetchFromGitHub { - owner = "0oAstro"; - repo = "silicon.lua"; - rev = "54682647a7c1c773dc4c9ab2bc309114a3b9e96f"; - sha256 = "sha256-lM7ALmYHGN5SKftfD7YBPh1gGKORbS6EMXS/ZQXDMSI="; - }; - doCheck = false; - meta.homepage = "https://github.com/0oAstro/silicon.lua"; - }) - # ------------------- # ---- LLAMA.VIM ---- # ------------------- @@ -133,15 +128,7 @@ in ]; extraPackages = with pkgs; [ - # Toggle Term - bashInteractive - - # Telescope Dependencies - fd - ripgrep - tree-sitter - - # LSP Dependencies + # LSP eslint_d go golangci-lint @@ -164,8 +151,9 @@ in sqlfluff stylua - # Silicon - silicon + # Tools + ripgrep + lazygit ]; extraConfig = ":luafile ~/.config/nvim/lua/init.lua"; @@ -181,6 +169,7 @@ in # Generate Nix Vars "nvim/lua/nix-vars.lua".text = '' local nix_vars = { + bash = "${pkgs.bashInteractive}/bin/bash", clangd = "${pkgs.clang-tools}/bin/clangd", golintls = "${pkgs.golangci-lint-langserver}/bin/golangci-lint-langserver", gopls = "${pkgs.gopls}/bin/gopls", diff --git a/modules/home/programs/terminal/opencode/default.nix b/modules/home/programs/terminal/opencode/default.nix index 893a8d4..c58ac64 100755 --- a/modules/home/programs/terminal/opencode/default.nix +++ b/modules/home/programs/terminal/opencode/default.nix @@ -61,7 +61,7 @@ in gopls = { type = "local"; command = [ - "gopls" + "${pkgs.gopls}/bin/gopls" "mcp" ]; enabled = true;