1
0
Fork 0
dotfiles/.config/nvim/lua/plugins/editor.lua

308 lines
14 KiB
Lua

---@type LazySpec
return {
{
"ggandor/flit.nvim",
enabled = false,
},
{
"NvChad/nvim-colorizer.lua",
cmd = { "ColorizerToggle", "ColorizerAttachToBuffer", "ColorizerDetachFromBuffer", "ColorizerReloadAllBuffers" },
opts = { user_default_options = { names = false } },
keys = { { "<leader>uH", "<cmd>ColorizerToggle<cr>", desc = "Toggle Colorizer" } },
},
{
"CopilotC-Nvim/CopilotChat.nvim",
dependencies = {
{ "zbirenbaum/copilot.lua" },
{ "nvim-lua/plenary.nvim" },
{
"folke/which-key.nvim",
optional = true,
opts = { defaults = { ["<leader>a"] = { name = "+ai" }, ["<leader>ac"] = { name = "+copilot" } } },
},
},
keys = {
{ "<leader>acc", "<cmd>CopilotChatToggle<cr>", desc = "Toggle Chat", mode = { "n", "v" } },
{ "<leader>acx", "<cmd>CopilotChatReset<cr>", desc = "Reset Chat", mode = { "n", "v" } },
{ "<leader>acf", "<cmd>CopilotChatFix<cr>", desc = "Fix Selection", mode = { "v" } },
{ "<leader>ace", "<cmd>CopilotChatExplain<cr>", desc = "Explain Selection", mode = { "v" } },
{ "<leader>acr", "<cmd>CopilotChatExplain<cr>", desc = "Review Selection", mode = { "v" } },
{ "<leader>aco", "<cmd>CopilotChatOptimize<cr>", desc = "Optimize Selection", mode = { "v" } },
{ "<leader>acd", "<cmd>CopilotChatDocs<cr>", desc = "Document Selection", mode = { "v" } },
{ "<leader>act", "<cmd>CopilotChatTests<cr>", desc = "Unittest Selection", mode = { "v" } },
},
opts = {
window = {
layout = "float",
width = 0.9,
height = 0.8,
},
mappings = {
complete = {
detail = "Use @<Tab> or /<Tab> for options.",
insert = "<Tab>",
},
close = {
normal = "q",
insert = "<C-c>",
},
reset = {
normal = "<C-l>",
insert = "<C-l>",
},
submit_prompt = {
normal = "<CR>",
insert = "<C-CR>",
},
accept_diff = {
normal = "<C-y>",
insert = "<C-y>",
},
yank_diff = {
normal = "gy",
},
show_diff = {
normal = "gd",
},
show_system_prompt = {
normal = "gp",
},
show_user_selection = {
normal = "gs",
},
},
},
},
{
"jackMort/ChatGPT.nvim",
cmd = { "ChatGPT", "ChatGPTActAs", "ChatGPTEditWithInstructions", "ChatGPTRun" },
dependencies = {
"MunifTanjim/nui.nvim",
"nvim-lua/plenary.nvim",
"folke/trouble.nvim",
"nvim-telescope/telescope.nvim",
{
"folke/which-key.nvim",
optional = true,
opts = {
defaults = {
["<leader>a"] = { name = "+ai" },
["<leader>ag"] = { name = "+chatgpt" },
["<leader>agt"] = { name = "+translate" },
},
},
},
},
config = function(_, opts)
local key = Lib.get_secret("openai")
if key then
require("chatgpt.api").OPENAI_API_KEY = key
require("chatgpt.api").AUTHORIZATION_HEADER = "Authorization: Bearer " .. key
require("chatgpt").setup(opts)
end
end,
--stylua: ignore
keys = {
{ "<leader>agc", function() require("chatgpt").openChat() end, desc = "Toggle Chat" },
{ "<leader>age", function() require("chatgpt").edit_with_instructions() end, desc = "Edit with instruction", mode = { "n", "v" } },
{ "<leader>agg", function() require("chatgpt").run_action("grammar_correction") end, desc = "Grammar Correction", mode = { "n", "v" } },
{ "<leader>agtg", function() require("chatgpt").run_action({ fargs = { "translate", "german" } }) end, desc = "German", mode = { "n", "v" } },
{ "<leader>agte", function() require("chatgpt").run_action({ fargs = { "translate", "english" } }) end, desc = "English", mode = { "n", "v" } },
{ "<leader>agtf", function() require("chatgpt").run_action({ fargs = { "translate", "french" } }) end, desc = "French", mode = { "n", "v" } },
{ "<leader>agtr", function() require("chatgpt").run_action({ fargs = { "translate", "russian" } }) end, desc = "Russian", mode = { "n", "v" } },
{ "<leader>agk", function() require("chatgpt").run_action({ fargs = { "keywords" } }) end, desc = "Keywords", mode = { "n", "v" } },
{ "<leader>agd", function() require("chatgpt").run_action({ fargs = { "docstring" } }) end, desc = "Docstring", mode = { "n", "v" } },
{ "<leader>aga", function() require("chatgpt").run_action({ fargs = { "add_tests" } }) end, desc = "Add Tests", mode = { "n", "v" } },
{ "<leader>ago", function() require("chatgpt").run_action({ fargs = { "optimize_code" } }) end, desc = "Optimize Code", mode = { "n", "v" } },
{ "<leader>ags", function() require("chatgpt").run_action({ fargs = { "summarize" } }) end, desc = "Summarize", mode = { "n", "v" } },
{ "<leader>agf", function() require("chatgpt").run_action({ fargs = { "fix_bugs" } }) end, desc = "Fix Bugs", mode = { "n", "v" } },
{ "<leader>agx", function() require("chatgpt").run_action({ fargs = { "explain_code" } }) end, desc = "Explain Code", mode = { "n", "v" } },
{ "<leader>agr", function() require("chatgpt").run_action({ fargs = { "roxygen_edit" } }) end, desc = "Roxygen Edit", mode = { "n", "v" } },
{ "<leader>agl", function() require("chatgpt").run_action({ fargs = { "code_readability_analysis" } }) end, desc = "Code Readability Analysis", mode = { "n", "v" } },
},
opts = {
edit_with_instructions = {
keymaps = {
close = "<C-c>",
accept = "<C-y>",
toggle_diff = "<C-d>",
toggle_settings = "<C-o>",
toggle_help = "<C-.>",
cycle_windows = "<Tab>",
use_output_as_input = "<C-,>",
},
},
chat = {
question_sign = "",
answer_sign = "󰚩",
sessions_window = {
active_sign = " 󰭹 ",
inactive_sign = " 󰻞 ",
current_line_sign = "",
border = {
style = "single",
},
win_options = {
winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder",
},
},
keymaps = {
close = "<C-c>",
yank_last = "<C-y>",
yank_last_code = "<C-p>",
scroll_up = "<C-u>",
scroll_down = "<C-d>",
new_session = "<C-g>",
cycle_windows = "<Tab>",
cycle_modes = "<C-f>",
next_message = "<C-n>",
prev_message = "<C-p>",
select_session = "<Space>",
rename_session = "r",
delete_session = "d",
draft_message = "<C-r>",
edit_message = "e",
delete_message = "d",
toggle_settings = "<C-o>",
toggle_sessions = "<C-s>",
toggle_help = "<C-.>",
toggle_message_role = "<C-,>",
toggle_system_role_open = "<C-'>",
stop_generating = "<C-x>",
},
},
popup_layout = {
default = "center",
center = {
width = "90%",
height = "80%",
},
right = {
width = "30%",
width_settings_open = "50%",
},
},
popup_window = {
border = {
style = "single",
},
win_options = {
winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder",
},
},
system_window = {
border = {
style = "single",
},
win_options = {
winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder",
},
},
popup_input = {
border = {
style = "single",
},
win_options = {
winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder",
},
submit = "<C-Enter>",
submit_n = "<Enter>",
},
settings_window = {
border = {
style = "single",
},
win_options = {
winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder",
},
},
help_window = {
border = {
style = "single",
},
win_options = {
winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder",
},
},
openai_params = {
-- model = "gpt-3.5-turbo",
model = "gpt-4-turbo",
},
openai_edit_params = {
-- model = "gpt-3.5-turbo",
model = "gpt-4-turbo",
},
},
},
{
"nvim-neo-tree/neo-tree.nvim",
opts = {
filesystem = {
window = {
mappings = Lib.generate_shortcut_maps(),
},
},
},
},
{
"folke/todo-comments.nvim",
opts = {
highlight = {
multiline = false,
},
},
},
{
"zk-org/zk-nvim",
ft = { "markdown" },
main = "zk",
dependencies = {
{
"folke/which-key.nvim",
optional = true,
opts = { defaults = { ["<leader>z"] = { name = "+zk" } } },
},
},
opts = {
picker = "telescope",
lsp = {
cmd = { "zk", "lsp" },
name = "zk",
config = {
on_attach = function(client)
if client.name == "zk" then
require("zk").cd()
end
end,
},
auto_attach = {
enabled = true,
filetypes = { "markdown" },
},
},
},
--stylua: ignore
keys = {
{ "<leader>zn", function() require("zk.commands").get("ZkNew")({ title = vim.fn.input('Title: ') }) end, desc = "New Note", mode = { "n", "v" } },
{ "<leader>znt", function() require("zk.commands").get("ZkNewFromTitleSelection")() end, desc = "Title from selection", mode = { "v" } },
{
"<leader>znc",
function()
require("zk.commands").get("ZkNewFromContentSelection")({
title = vim.fn.input(
'Title: ')
})
end,
desc = "Content from selection",
mode = { "v" }
},
{ "<leader>zb", function() require("zk.commands").get("ZkBacklinks")() end, desc = "Links" },
{ "<leader>zl", function() require("zk.commands").get("ZkLinks")() end, desc = "Backlinks" },
{ "<leader>zx", function() require("zk.commands").get("ZkIndex")() end, desc = "Index" },
{ "<leader>zf", function() require("zk.commands").get("ZkNotes")({ sort = { 'modified' } }) end, desc = "Find Notes" },
{ "<leader>zt", function() require("zk.commands").get("ZkTags")() end, desc = "Find Note Tags" },
{ "<leader>zf", function() require("zk.commands").get("ZkMatch")() end, desc = "Find Notes (Match Selection)", mode = { "v" } },
{ "<leader>zi", function() require("zk.commands").get("ZkInsertLinkAtSelection")() end, desc = "Insert Link", mode = { "n", "v" } },
},
},
}