From 1210ef507b93be7c55025d3590f19f74c4521327 Mon Sep 17 00:00:00 2001 From: Ray Andrew <4437323+rayandrew@users.noreply.github.com> Date: Thu, 4 Jan 2024 22:03:52 -0600 Subject: [PATCH] update --- lazy-lock.json | 8 +- lua/rayandrew/commands.lua | 33 + lua/rayandrew/init.lua | 1 + lua/rayandrew/plugins/editor.lua | 159 ++++ lua/rayandrew/plugins/file.lua | 239 +++--- lua/rayandrew/plugins/general.lua | 1019 +------------------------- lua/rayandrew/plugins/lsp.lua | 176 ++++- lua/rayandrew/plugins/telescope.lua | 6 +- lua/rayandrew/plugins/theme.lua | 23 - lua/rayandrew/plugins/treesitter.lua | 13 + lua/rayandrew/plugins/ui.lua | 142 ++++ lua/rayandrew/plugins/utilities.lua | 398 ++++++++++ lua/rayandrew/theme.lua | 3 +- 13 files changed, 1015 insertions(+), 1205 deletions(-) create mode 100644 lua/rayandrew/commands.lua create mode 100644 lua/rayandrew/plugins/editor.lua delete mode 100644 lua/rayandrew/plugins/theme.lua create mode 100644 lua/rayandrew/plugins/ui.lua create mode 100644 lua/rayandrew/plugins/utilities.lua diff --git a/lazy-lock.json b/lazy-lock.json index c6cb915..e30fa0a 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -4,8 +4,9 @@ "cellular-automaton.nvim": { "branch": "main", "commit": "b7d056dab963b5d3f2c560d92937cb51db61cb5b" }, "cloak.nvim": { "branch": "main", "commit": "951b163e55ce7639eb320c450bde9283c4fe968b" }, "cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" }, + "conform.nvim": { "branch": "master", "commit": "c4b2efb8aee4af0ef179a9b49ba401de3c4ef5d2" }, "copilot.vim": { "branch": "release", "commit": "5b19fb001d7f31c4c7c5556d7a97b243bd29f45f" }, - "distant.nvim": { "branch": "v0.3", "commit": "998724f62386c8022a4e6c885f4509cf9477451a" }, + "everforest": { "branch": "main", "commit": "06a600c4fa49e7a4c44848d14c353ecbaab8eb9f" }, "focus.nvim": { "branch": "master", "commit": "c83be53de558f6f0824c8cefcad61719c87ce157" }, "gitsigns.nvim": { "branch": "main", "commit": "d195f0c35ced5174d3ecce1c4c8ebb3b5bc23fa9" }, "glow.nvim": { "branch": "main", "commit": "238070a686c1da3bccccf1079700eb4b5e19aea4" }, @@ -22,8 +23,6 @@ "mini.comment": { "branch": "main", "commit": "67f00d3ebbeae15e84584d971d0c32aad4f4f3a4" }, "nabla.nvim": { "branch": "master", "commit": "27a6ea9ed7452bb9e0b19eb0942b5bcf7d051b2f" }, "neo-tree.nvim": { "branch": "v3.x", "commit": "77d9f484b88fd380386b46ed9206e5374d69d9d8" }, - "neorg": { "branch": "main", "commit": "a489e7c4f9d7edb3caa04250d07bb6c6a5b9b890" }, - "neorg-telescope": { "branch": "main", "commit": "6a7a677c40fa3c348924a4e2a06a513e0b34c056" }, "nui.nvim": { "branch": "main", "commit": "35da9ca1de0fc4dda96c2e214d93d363c145f418" }, "nvim-bqf": { "branch": "main", "commit": "bdc2a4e5bb670b3c0e33ada9c0eec636d93a0748" }, "nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" }, @@ -35,9 +34,11 @@ "nvim-treesitter-textobjects": { "branch": "master", "commit": "85b9d0cbd4ff901abcda862b50dbb34e0901848b" }, "nvim-ts-context-commentstring": { "branch": "main", "commit": "1277b4a1f451b0f18c0790e1a7f12e1e5fdebfee" }, "nvim-web-devicons": { "branch": "master", "commit": "3e24abe1ae66532135cec911562f553fe247cb56" }, + "oil.nvim": { "branch": "master", "commit": "a128e6f75c6a71b7b9ac7ea663949a5209771cd5" }, "playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" }, "plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" }, "rasmus": { "branch": "main", "commit": "f824de95d446686e479781c0c2b778c177da528f" }, + "readline.nvim": { "branch": "main", "commit": "5cb27349bc01cdcdb3d3494e5337d8b3834aef1a" }, "refactoring.nvim": { "branch": "master", "commit": "258041a596d733dc51f6ad1e092ed1f23e3faa70" }, "rose-pine": { "branch": "main", "commit": "92762f4fa2144c05db760ea254f4c399a56a7ef5" }, "smart-splits.nvim": { "branch": "master", "commit": "403ad1a4fd7eb39388690a5657e7cbfb16da6668" }, @@ -52,7 +53,6 @@ "vim-dispatch": { "branch": "master", "commit": "6cc2691576f97d43f8751664d1a1a908b99927e5" }, "vim-fugitive": { "branch": "master", "commit": "59659093581aad2afacedc81f009ed6a4bfad275" }, "vim-illuminate": { "branch": "master", "commit": "3bd2ab64b5d63b29e05691e624927e5ebbf0fb86" }, - "vim-rsi": { "branch": "master", "commit": "45540637ead22f011e8215f1c90142e49d946a54" }, "vim-startuptime": { "branch": "master", "commit": "454b3de856b7bd298700de33d79774ca9b9e3875" }, "vim-tmux-navigator": { "branch": "master", "commit": "38b1d0402c4600543281dc85b3f51884205674b6" }, "vimtex": { "branch": "master", "commit": "f9b19d09ee6f0ba70dad0b5c2e710dd700681000" }, diff --git a/lua/rayandrew/commands.lua b/lua/rayandrew/commands.lua new file mode 100644 index 0000000..6c7af22 --- /dev/null +++ b/lua/rayandrew/commands.lua @@ -0,0 +1,33 @@ +-- https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#lazy-loading-with-lazynvim +vim.api.nvim_create_user_command("FormatDisable", function(args) + if args.bang then + -- FormatDisable! will disable formatting just for this buffer + vim.b.disable_autoformat = true + else + vim.g.disable_autoformat = true + end +end, { + desc = "Disable autoformat-on-save", + bang = true, +}) + +-- https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#lazy-loading-with-lazynvim +vim.api.nvim_create_user_command("FormatEnable", function() + vim.b.disable_autoformat = false + vim.g.disable_autoformat = false +end, { + desc = "Re-enable autoformat-on-save", +}) + +-- https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#format-command +vim.api.nvim_create_user_command("Format", function(args) + local range = nil + if args.count ~= -1 then + local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] + range = { + start = { args.line1, 0 }, + ["end"] = { args.line2, end_line:len() }, + } + end + require("conform").format({ async = true, lsp_fallback = true, range = range }) +end, { range = true }) diff --git a/lua/rayandrew/init.lua b/lua/rayandrew/init.lua index fabf2e1..3006a24 100644 --- a/lua/rayandrew/init.lua +++ b/lua/rayandrew/init.lua @@ -6,6 +6,7 @@ function M.setup() require("rayandrew.autocmds") require("rayandrew.remap") require("rayandrew.theme").setup() + require("rayandrew.commands") -- require("rayandrew.filetype").setup() -- require("rayandrew.statusline").setup() end diff --git a/lua/rayandrew/plugins/editor.lua b/lua/rayandrew/plugins/editor.lua new file mode 100644 index 0000000..965a9ca --- /dev/null +++ b/lua/rayandrew/plugins/editor.lua @@ -0,0 +1,159 @@ +return { + { + "folke/todo-comments.nvim", + cmd = { "TodoTrouble", "TodoTelescope" }, + event = { "BufReadPost", "BufNewFile" }, + config = true, + -- stylua: ignore + keys = { + { "]t", function() require("todo-comments").jump_next() end, desc = "Next todo comment" }, + { "[t", function() require("todo-comments").jump_prev() end, desc = "Previous todo comment" }, + { "xt", "TodoTrouble", desc = "Todo (Trouble)" }, + { "xT", "TodoTrouble keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme (Trouble)" }, + { "st", "TodoTelescope", desc = "Todo" }, + { "sT", "TodoTelescope keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme" }, + }, + }, + + { + "jbyuki/venn.nvim", + keys = { + { + "nv", + function() + function Toggle_venn() + local venn_enabled = vim.inspect(vim.b.venn_enabled) + if venn_enabled == "nil" then + vim.b.venn_enabled = true + vim.cmd([[setlocal ve=all]]) + -- draw a line on HJKL keystokes + vim.api.nvim_buf_set_keymap(0, "n", "J", "j:VBox", { noremap = true }) + vim.api.nvim_buf_set_keymap(0, "n", "K", "k:VBox", { noremap = true }) + vim.api.nvim_buf_set_keymap(0, "n", "L", "l:VBox", { noremap = true }) + vim.api.nvim_buf_set_keymap(0, "n", "H", "h:VBox", { noremap = true }) + -- draw a box by pressing "f" with visual selection + vim.api.nvim_buf_set_keymap(0, "v", "f", ":VBox", { noremap = true }) + else + vim.cmd([[setlocal ve=]]) + vim.cmd([[mapclear ]]) + vim.b.venn_enabled = nil + end + end + + Toggle_venn() + end, + desc = "Open Venn panel", + }, + }, + }, + + { + "ellisonleao/glow.nvim", + config = true, + cmd = "Glow", + ft = "markdown", + keys = { + { + "pm", + "Glow", + desc = "Preview Markdown", + }, + }, + }, + + { + "jbyuki/nabla.nvim", + lazy = true, + -- ft = { "tex", "latex", "markdown" }, + -- opts = { + -- autogen = true, -- auto-regenerate ASCII art when exiting insert mode + -- silent = true, -- silents error messages + -- }, + -- config = function() + -- local nabla = require("nabla") + -- nabla.enable_virt() + -- end, + keys = { + { + "pe", + function() + require("nabla").toggle_virt() + end, + desc = "Preview Math Equation", + }, + }, + }, + + { + "lervag/vimtex", + config = function() + -- vim.g.vimtex_compiler_progname = "nvr" + -- vim.g.vimtex_view_method = "zathura" + end, + }, + + { + "3rd/image.nvim", + opts = { + backend = "kitty", + integrations = { + markdown = { + enabled = true, + clear_in_insert_mode = false, + download_remote_images = true, + only_render_image_at_cursor = false, + filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here + }, + neorg = { + enabled = true, + clear_in_insert_mode = false, + download_remote_images = true, + only_render_image_at_cursor = false, + filetypes = { "norg" }, + }, + }, + max_width = nil, + max_height = nil, + max_width_window_percentage = nil, + max_height_window_percentage = 50, + window_overlap_clear_enabled = false, -- toggles images when windows are overlapped + window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "" }, + editor_only_render_when_focused = false, -- auto show/hide images when the editor gains/looses focus + tmux_show_only_in_active_window = false, -- auto show/hide images in the correct Tmux window (needs visual-activity off) + hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp" }, -- render image files as images when opened + }, + config = true, + }, + + { + "laytan/cloak.nvim", + event = { + "BufEnter .env", + "BufEnter .env.*", + }, + cmd = { + "CloakEnable", + "CloakDisable", + "CloakToggle", + }, + opts = { + enabled = true, + cloak_character = "*", + -- The applied highlight group (colors) on the cloaking, see `:h highlight`. + highlight_group = "Comment", + patterns = { + { + file_pattern = { + ".env", + ".env.*", + ".dev.vars", + }, + cloak_pattern = "=.+", + }, + }, + }, + config = function(_, opts) + require("cloak").setup(opts) + end, + }, +} diff --git a/lua/rayandrew/plugins/file.lua b/lua/rayandrew/plugins/file.lua index 8ab0ac1..71427ae 100644 --- a/lua/rayandrew/plugins/file.lua +++ b/lua/rayandrew/plugins/file.lua @@ -60,15 +60,15 @@ return { }, }, keys = { + -- { + -- "E", + -- function() + -- vim.cmd("Neotree toggle position=current") + -- end, + -- desc = "Toggle NeoTree as Buffer", + -- }, { - "E", - function() - vim.cmd("Neotree toggle position=current") - end, - desc = "Toggle NeoTree as Buffer", - }, - { - "e", + "fe", function() vim.cmd("Neotree toggle") end, @@ -78,14 +78,14 @@ return { deactivate = function() vim.cmd([[Neotree close]]) end, - init = function() - if vim.fn.argc(-1) == 1 then - local stat = vim.loop.fs_stat(vim.fn.argv(0)) - if stat and stat.type == "directory" then - require("neo-tree") - end - end - end, + -- init = function() + -- if vim.fn.argc(-1) == 1 then + -- local stat = vim.loop.fs_stat(vim.fn.argv(0)) + -- if stat and stat.type == "directory" then + -- require("neo-tree") + -- end + -- end + -- end, config = function(_, opts) local function on_move(data) Util.lsp.on_rename(data.source, data.destination) @@ -109,127 +109,88 @@ return { end, }, - -- { - -- "X3eRo0/dired.nvim", - -- dependencies = { "MunifTanjim/nui.nvim" }, - -- opts = { - -- path_separator = "/", -- Use '/' as the path separator - -- show_hidden = true, -- Show hidden files - -- show_banner = false, -- Do not show the banner - -- hide_details = false, -- Show file details by default - -- sort_order = "name", -- Sort files by name by default - -- - -- -- Define keybindings for various 'dired' actions - -- keybinds = { - -- dired_enter = "", - -- dired_back = "-", - -- dired_up = "_", - -- dired_rename = "R", - -- dired_quit = "q", - -- dired_create = "+", - -- dired_toggle_colors = "@", - -- }, - -- }, - -- keys = { - -- { "e", "Dired", desc = "Dired" }, - -- }, - -- config = function(_, opts) - -- require("dired").setup(opts) - -- vim.api.nvim_create_autocmd("FileType", { - -- pattern = "dired", - -- callback = function() - -- local Util = require("rayandrew.util") - -- Util.map("n", "c", "DiredCreate") - -- Util.map("n", "g", "edit") - -- end, - -- }) - -- end, - -- }, - - -- { - -- "stevearc/oil.nvim", - -- dependencies = { "nvim-tree/nvim-web-devicons" }, - -- cmd = { "Oil" }, - -- keys = { - -- { - -- "e", - -- function() - -- -- disable in oil filetype - -- if vim.bo.filetype == "oil" then - -- return - -- end - -- require("oil").open_float() - -- end, - -- desc = "Open current directory", - -- }, - -- { - -- "E", - -- function() - -- -- disable in oil filetype - -- if vim.bo.filetype == "oil" then - -- return - -- end - -- require("oil").open(".") - -- end, - -- desc = "Open current directory", - -- }, - -- }, - -- opts = { - -- columns = { - -- -- "icon", - -- -- "permissions", - -- -- "size", - -- -- "mtime", - -- }, - -- default_file_explorer = true, - -- restore_win_options = true, - -- float = { - -- padding = 2, - -- max_width = 240, - -- max_height = 70, - -- -- width = 0.2, - -- -- max_height = 0.5, - -- border = "rounded", - -- win_options = { - -- winblend = 10, - -- }, - -- }, - -- keymaps = { - -- [""] = { - -- callback = function() - -- if vim.bo.filetype == "oil" then - -- local oil = require("oil") - -- vim.g.oil_show_info = not vim.g.oil_show_info - -- if vim.g.oil_show_info then - -- oil.set_columns({ - -- "permissions", - -- "size", - -- "mtime", - -- "icon", - -- }) - -- else - -- oil.set_columns({}) - -- end - -- return - -- end - -- end, - -- desc = "Toggle info", - -- }, - -- ["q"] = "actions.close", - -- [""] = "actions.toggle_hidden", - -- ["?"] = "actions.show_help", - -- }, - -- }, - -- init = function() - -- vim.g.oil_show_info = false - -- -- if vim.fn.argc() == 1 then - -- -- local stat = vim.loop.fs_stat(vim.fn.argv(0)) - -- -- if stat and stat.type == "directory" then - -- -- require("oil") - -- -- end - -- -- end - -- end, - -- }, - - + { + "stevearc/oil.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + cmd = { "Oil" }, + keys = { + -- { + -- "e", + -- function() + -- -- disable in oil filetype + -- if vim.bo.filetype == "oil" then + -- return + -- end + -- require("oil").open_float() + -- end, + -- desc = "Open current directory", + -- }, + { + "fE", + function() + -- disable in oil filetype + if vim.bo.filetype == "oil" then + return + end + require("oil").open(".") + end, + desc = "Open current directory", + }, + }, + opts = { + columns = { + -- "icon", + -- "permissions", + -- "size", + -- "mtime", + }, + default_file_explorer = true, + restore_win_options = true, + float = { + padding = 2, + max_width = 240, + max_height = 70, + -- width = 0.2, + -- max_height = 0.5, + border = "rounded", + win_options = { + winblend = 10, + }, + }, + keymaps = { + [""] = { + callback = function() + if vim.bo.filetype == "oil" then + local oil = require("oil") + vim.g.oil_show_info = not vim.g.oil_show_info + if vim.g.oil_show_info then + oil.set_columns({ + "permissions", + "size", + "mtime", + "icon", + }) + else + oil.set_columns({}) + end + return + end + end, + desc = "Toggle info", + }, + ["q"] = "actions.close", + [""] = "actions.toggle_hidden", + ["?"] = "actions.show_help", + }, + }, + init = function() + vim.g.oil_show_info = false + if vim.fn.argc() == 1 then + local stat = vim.loop.fs_stat(vim.fn.argv(0)) + if stat and stat.type == "directory" then + require("oil") + end + end + end, + }, } diff --git a/lua/rayandrew/plugins/general.lua b/lua/rayandrew/plugins/general.lua index 0738d20..027cc88 100644 --- a/lua/rayandrew/plugins/general.lua +++ b/lua/rayandrew/plugins/general.lua @@ -1,5 +1,3 @@ -local load_textobjects = false - return { { "folke/lazy.nvim", version = "*" }, { "nvim-lua/plenary.nvim", lazy = true }, @@ -12,1023 +10,28 @@ return { end, }, - -- search/replace in multiple files - { - "nvim-pack/nvim-spectre", - cmd = "Spectre", - opts = { open_cmd = "noswapfile vnew" }, - keys = { - { - "sr", - function() - require("spectre").open() - end, - desc = "Replace in files (Spectre)", - }, - }, - }, - - -- buffer remove - { - "echasnovski/mini.bufremove", - -- stylua: ignore - keys = { - { "bd", function() require("mini.bufremove").delete(0, false) end, desc = "Delete Buffer" }, - { "bD", function() require("mini.bufremove").delete(0, true) end, desc = "Delete Buffer (Force)" }, - }, - }, - ------------------------------ - -- User Interface + -- Color Scheme ------------------------------ - { - "nvim-lualine/lualine.nvim", - event = "VeryLazy", - opts = function() - local icons = require("rayandrew.theme").icons - local Util = require("rayandrew.util") - - return { - options = { - theme = "auto", - globalstatus = true, - disabled_filetypes = { statusline = { "dashboard", "alpha" } }, - }, - sections = { - lualine_a = { - { - "mode", - fmt = function(str) - return str:sub(1, 1) - end, - }, - }, - lualine_b = { "branch" }, - lualine_c = { - { - "diagnostics", - symbols = { - error = icons.diagnostics.Error, - warn = icons.diagnostics.Warn, - info = icons.diagnostics.Info, - hint = icons.diagnostics.Hint, - }, - }, - { "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } }, - { "filename", path = 1, symbols = { modified = "  ", readonly = "", unnamed = "" } }, - }, - lualine_x = { - { require("lazy.status").updates, cond = require("lazy.status").has_updates, color = Util.fg("Special") }, - { - "diff", - symbols = { - added = icons.git.added, - modified = icons.git.modified, - removed = icons.git.removed, - }, - }, - }, - lualine_y = {}, - lualine_z = { - function() - return " " .. os.date("%R") - end, - }, - }, - extensions = { "neo-tree", "lazy" }, - } - end, - }, - - { - "lukas-reineke/indent-blankline.nvim", - main = "ibl", - event = { "BufReadPost", "BufNewFile" }, - opts = { - -- char = "▏", - indent = { - char = "│", - }, - exclude = { - filetypes = { - "help", - "alpha", - "dashboard", - "neo-tree", - "Trouble", - "lazy", - "mason", - "notify", - "toggleterm", - "lazyterm", - "qf", - }, - buftypes = { - "terminal", - "nofile", - "quickfix", - "prompt", - }, - }, - scope = { - enabled = true, - }, - -- show_trailing_blankline_indent = false, - }, - }, - - { "kevinhwang91/nvim-bqf", ft = "qf" }, - - -- icons - { "nvim-tree/nvim-web-devicons", lazy = true }, - - ------------------------------ - -- LSP Configuration - ------------------------------ - - -- -- Mason - -- { - -- "williamboman/mason-lspconfig.nvim", - -- name = "mason-lspconfig", - -- dependencies = { - -- { "williamboman/mason.nvim", lazy = true }, - -- { "neovim/nvim-lspconfig", lazy = true }, - -- }, - -- opts = { - -- ensure_installed = { - -- "clangd", - -- "pyright", - -- -- "rnix", - -- "rust_analyzer", - -- "texlab", - -- "lua_ls", - -- "tsserver", - -- }, - -- }, - -- }, - - { - "lewis6991/gitsigns.nvim", - event = { "BufReadPre", "BufNewFile" }, - opts = { - signs = { - add = { text = "▎" }, - change = { text = "▎" }, - delete = { text = "" }, - topdelete = { text = "" }, - changedelete = { text = "▎" }, - untracked = { text = "▎" }, - }, - on_attach = function(buffer) - local gs = package.loaded.gitsigns - - local function map(mode, l, r, desc) - vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc }) - end - - -- stylua: ignore start - map("n", "]h", gs.next_hunk, "Next Hunk") - map("n", "[h", gs.prev_hunk, "Prev Hunk") - map({ "n", "v" }, "ghs", ":Gitsigns stage_hunk", "Stage Hunk") - map({ "n", "v" }, "ghr", ":Gitsigns reset_hunk", "Reset Hunk") - map("n", "ghS", gs.stage_buffer, "Stage Buffer") - map("n", "ghu", gs.undo_stage_hunk, "Undo Stage Hunk") - map("n", "ghR", gs.reset_buffer, "Reset Buffer") - map("n", "ghp", gs.preview_hunk, "Preview Hunk") - map("n", "ghb", function() gs.blame_line({ full = true }) end, "Blame Line") - map("n", "ghd", gs.diffthis, "Diff This") - map("n", "ghD", function() gs.diffthis("~") end, "Diff This ~") - map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "GitSigns Select Hunk") - end, - }, - }, - - ------------------------------ - -- Formatter - ------------------------------ - -- { - -- "jay-babu/mason-null-ls.nvim", - -- event = { "BufReadPre", "BufNewFile" }, - -- dependencies = { - -- "williamboman/mason.nvim", - -- "jose-elias-alvarez/null-ls.nvim", - -- }, - -- opts = function() - -- local nls = require("null-ls") - -- - -- return { - -- ensure_installed = { - -- "taplo", - -- - -- "prettier", - -- "eslint_d", - -- - -- "black", - -- "isort", - -- - -- "shfmt", - -- "jq", - -- - -- "stylua", - -- - -- "nixpkgs_fmt", - -- - -- "latexindent", - -- }, - -- automatic_installation = false, - -- handlers = {}, - -- } - -- end, - -- config = function(_, opts) - -- local nls = require("null-ls") - -- nls.setup({ - -- root_dir = require("null-ls.utils").root_pattern(".null-ls-root", ".neoconf.json", "Makefile", ".git"), - -- sources = { - -- nls.builtins.completion.spell, - -- nls.builtins.code_actions.gitsigns, - -- - -- -- web - -- nls.builtins.formatting.prettier.with({ - -- extra_filetypes = { "svelte" }, - -- }), -- js/ts formatter - -- nls.builtins.diagnostics.eslint_d.with({ - -- -- js/ts linter - -- -- only enable eslint if root has .eslintrc.js (not in youtube nvim video) - -- condition = function(utils) - -- return utils.root_has_file(".eslintrc.js") or utils.root_has_file(".eslintrc.cjs") - -- end, - -- filetypes = { - -- "javascript", - -- "javascriptreact", - -- "typescript", - -- "typescriptreact", - -- "vue", - -- "svelte", - -- }, - -- }), - -- nls.builtins.code_actions.eslint_d.with({ - -- filetypes = { - -- "javascript", - -- "javascriptreact", - -- "typescript", - -- "typescriptreact", - -- "vue", - -- "svelte", - -- }, - -- }), - -- - -- -- python - -- -- nls.builtins.formatting.black, - -- nls.builtins.formatting.isort, - -- - -- -- shell - -- nls.builtins.formatting.shfmt, - -- nls.builtins.formatting.jq, - -- - -- -- rust - -- nls.builtins.formatting.rustfmt, - -- - -- -- nix - -- nls.builtins.formatting.nixpkgs_fmt, - -- - -- -- config - -- nls.builtins.formatting.taplo, - -- - -- -- lua - -- nls.builtins.formatting.stylua, - -- - -- -- latex - -- nls.builtins.formatting.latexindent, - -- }, - -- }) - -- require("mason-null-ls").setup(opts) - -- end, - -- }, - - ------------------------------ - -- Utilities - ------------------------------ - - { - "nvim-focus/focus.nvim", - version = "*", - opts = {}, - cmd = { "FocusToggle", "FocusSplitNicely", "FocusSplitCycle", "FocusSplitCycleReverse" }, - keys = { - { - "wf", - "FocusToggle", - desc = "Toggle Focus", - }, - }, - }, - - { - "simrat39/symbols-outline.nvim", - opts = {}, - cmd = { "SymbolsOutline", "SymbolsOutlineOpen", "SymbolsOutlineClose" }, - keys = { - { "so", "SymbolsOutline", desc = "Symbols Outline" }, - }, - }, - - { - "kylechui/nvim-surround", - version = "*", - event = "VeryLazy", - opts = {}, - }, - - { - "RRethy/vim-illuminate", - event = { "BufReadPost", "BufNewFile" }, - opts = { - delay = 200, - large_file_cutoff = 2000, - large_file_overrides = { - providers = { "lsp" }, - }, - }, - config = function(_, opts) - require("illuminate").configure(opts) - - local function map(key, dir, buffer) - vim.keymap.set("n", key, function() - require("illuminate")["goto_" .. dir .. "_reference"](false) - end, { - desc = dir:sub(1, 1):upper() .. dir:sub(2) .. " Reference", - buffer = buffer, - }) - end - - map("]]", "next") - map("[[", "prev") - - -- also set it after loading ftplugins, since a lot overwrite [[ and ]] - vim.api.nvim_create_autocmd("FileType", { - callback = function() - local buffer = vim.api.nvim_get_current_buf() - map("]]", "next", buffer) - map("[[", "prev", buffer) - end, - }) - end, - keys = { - { "]]", desc = "Next Reference" }, - { "[[", desc = "Prev Reference" }, - }, - }, - - -- comments - { - "echasnovski/mini.comment", - event = "VeryLazy", - dependencies = { - { "JoosepAlviste/nvim-ts-context-commentstring", lazy = true }, - }, - opts = { - options = { - custom_commentstring = function() - return require("ts_context_commentstring.internal").calculate_commentstring() or vim.bo.commentstring - end, - }, - }, - }, - - -- RSI compatibility - { - "tpope/vim-rsi", - }, - -- { - -- "assistcontrol/readline.nvim", - -- event = "VeryLazy", - -- keys = { - -- { - -- "", - -- function() - -- require("readline").forward_word() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").backward_word() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").kill_word() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").backward_kill_word() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").unix_word_rubout() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").kill_line() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").backward_kill_line() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").beginning_of_line() - -- end, - -- mode = "!", - -- }, - -- { - -- "", - -- function() - -- require("readline").end_of_line() - -- end, - -- mode = "!", - -- }, - -- { "", "", mode = "!" }, -- forward-char - -- { "", "", mode = "!" }, -- backward-char - -- { "", "", mode = "!" }, -- next-line - -- { "", "", mode = "!" }, -- previous-line - -- { "", "", mode = "!" }, -- delete-char - -- { "", "", mode = "!" }, -- backward-delete-char - -- }, - -- }, - - { - "tpope/vim-fugitive", - cmd = { "Git" }, - }, - - { - "laytan/cloak.nvim", - event = { - "BufEnter .env", - "BufEnter .env.*", - }, - cmd = { - "CloakEnable", - "CloakDisable", - "CloakToggle", - }, - opts = { - enabled = true, - cloak_character = "*", - -- The applied highlight group (colors) on the cloaking, see `:h highlight`. - highlight_group = "Comment", - patterns = { - { - file_pattern = { - ".env", - ".env.*", - ".dev.vars", - }, - cloak_pattern = "=.+", - }, - }, - }, - config = function(_, opts) - require("cloak").setup(opts) - end, - }, - - { - "theprimeagen/harpoon", - event = "VeryLazy", - keys = { - { - "ha", - function() - local mark = require("harpoon.mark") - mark.add_file() - vim.print("Added to Harpoon " .. vim.fn.expand("%")) - end, - desc = "Harpoon Add File", - }, - { - "he", - function() - local ui = require("harpoon.ui") - ui.toggle_quick_menu() - end, - desc = "Harpoon UI", - }, - { - "h1", - function() - local ui = require("harpoon.ui") - ui.nav_file(1) - end, - }, - { - "h2", - function() - local ui = require("harpoon.ui") - ui.nav_file(2) - end, - }, - { - "h3", - function() - local ui = require("harpoon.ui") - ui.nav_file(3) - end, - }, - { - "h4", - function() - local ui = require("harpoon.ui") - ui.nav_file(4) - end, - }, - { - "h5", - function() - local ui = require("harpoon.ui") - ui.nav_file(5) - end, - }, - }, - }, - - { - "theprimeagen/refactoring.nvim", - }, - - { - "github/copilot.vim", - init = function() - -- vim.g.copilot_no_tab_map = true - -- vim.g.copilot_assume_mapped = true - -- vim.g.copilot_tab_fallback = "" - vim.g.copilot_filetypes = { - ["*"] = true, - ["text"] = false, - } - end, - }, - - { - "eandrju/cellular-automaton.nvim", - }, - - { - "laytan/cloak.nvim", - }, - - { - "mbbill/undotree", - }, - - -- { - -- "skywind3000/asyncrun.vim", - -- cmd = { "AsyncRun", "AsyncStop" }, - -- keys = { - -- { - -- "cc", - -- function() - -- local input = vim.fn.input("Command: ") - -- vim.cmd("AsyncRun " .. input) - -- -- vim.cmd("sleep 1") - -- -- vim.cmd("copen") - -- end, - -- desc = "AsyncRun", - -- }, - -- { "ck", desc = "AsyncStop" }, - -- }, - -- config = function() - -- vim.g.asyncrun_open = 6 - -- end, - -- }, - - -- Folke - { - "folke/trouble.nvim", - cmd = { "TroubleToggle", "Trouble" }, - opts = { use_diagnostic_signs = true }, - keys = { - { - "xx", - "TroubleToggle document_diagnostics", - desc = "Document Diagnostics (Trouble)", - }, - { - "xX", - "TroubleToggle workspace_diagnostics", - desc = "Workspace Diagnostics (Trouble)", - }, - { - "xL", - "TroubleToggle loclist", - desc = "Location List (Trouble)", - }, - { - "xQ", - "TroubleToggle quickfix", - desc = "Quickfix List (Trouble)", - }, - { - "[q", - function() - if require("trouble").is_open() then - require("trouble").previous({ skip_groups = true, jump = true }) - else - local ok, err = pcall(vim.cmd.cprev) - if not ok then - vim.notify(err, vim.log.levels.ERROR) - end - end - end, - desc = "Previous trouble/quickfix item", - }, - { - "]q", - function() - if require("trouble").is_open() then - require("trouble").next({ skip_groups = true, jump = true }) - else - local ok, err = pcall(vim.cmd.cnext) - if not ok then - vim.notify(err, vim.log.levels.ERROR) - end - end - end, - desc = "Next trouble/quickfix item", - }, - }, - }, - - { - "folke/todo-comments.nvim", - cmd = { "TodoTrouble", "TodoTelescope" }, - event = { "BufReadPost", "BufNewFile" }, - config = true, - -- stylua: ignore - keys = { - { "]t", function() require("todo-comments").jump_next() end, desc = "Next todo comment" }, - { "[t", function() require("todo-comments").jump_prev() end, desc = "Previous todo comment" }, - { "xt", "TodoTrouble", desc = "Todo (Trouble)" }, - { "xT", "TodoTrouble keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme (Trouble)" }, - { "st", "TodoTelescope", desc = "Todo" }, - { "sT", "TodoTelescope keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme" }, - }, - }, - - { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - plugins = { spelling = true }, - defaults = { - mode = { "n", "v" }, - ["g"] = { name = "+goto" }, - ["gz"] = { name = "+surround" }, - ["]"] = { name = "+next" }, - ["["] = { name = "+prev" }, - [""] = { name = "+tabs" }, - ["b"] = { name = "+buffer" }, - ["c"] = { name = "+code" }, - ["f"] = { name = "+file/find" }, - ["g"] = { name = "+git" }, - ["n"] = { name = "+note" }, - ["gh"] = { name = "+hunks" }, - ["q"] = { name = "+quit/session" }, - ["s"] = { name = "+search" }, - ["u"] = { name = "+ui" }, - ["w"] = { name = "+windows" }, - ["x"] = { name = "+diagnostics/quickfix" }, - }, - }, - config = function(_, opts) - local wk = require("which-key") - wk.setup(opts) - wk.register(opts.defaults) - end, - }, - - -- zen - { - "folke/zen-mode.nvim", - opts = { - window = { - width = 100, - }, - plugins = { - tmux = { - enabled = true, - }, - }, - on_open = function() - vim.wo.wrap = false - vim.wo.number = false - vim.wo.rnu = false - vim.wo.signcolumn = "no" - end, - on_close = function() - vim.wo.wrap = true - vim.wo.number = true - vim.wo.rnu = true - vim.wo.signcolumn = "yes" - end, - }, - keys = { - { - "z", - function() - require("zen-mode").toggle() - require("rayandrew.theme").recolor() - end, - }, - }, - }, - - -- Tmux - { - "mrjones2014/smart-splits.nvim", + "rose-pine/neovim", + name = "rose-pine", lazy = true, - -- event = "VeryLazy", - dependencies = { - { - "kwkarlwang/bufresize.nvim", - opts = {}, - }, - }, - config = function() - require("smart-splits").setup({ - resize_mode = { - hooks = { - on_leave = require("bufresize").register, - }, - }, - }) - end, }, { - "christoomey/vim-tmux-navigator", - cmd = { - "TmuxNavigateLeft", - "TmuxNavigateDown", - "TmuxNavigateUp", - "TmuxNavigateRight", - }, - keys = { "", "", "", "" }, - config = function() - vim.g.tmux_navigator_no_wrap = 1 - end, - }, - - ------------------------------ - -- Note Taking - ------------------------------ - - { - "nvim-neorg/neorg", - build = ":Neorg sync-parsers", - dependencies = { - { "nvim-lua/plenary.nvim" }, - { "nvim-neorg/neorg-telescope" }, - }, - cond = function() - return vim.fn.isdirectory(vim.fn.expand("~/Notes")) == 1 - end, - event = "VeryLazy", - cmd = { "Neorg" }, - keys = { - { - "na", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("files", { - prompt_title = "Neorg", - cwd = "~/Notes", - }) - fn() - end, - desc = "Find Notes", - }, - { - "fn", - function() - vim.cmd("Telescope neorg find_norg_files") - end, - desc = "Find Notes", - }, - { - "nf", - "fn", - desc = "Find Notes", - remap = true, - }, - { - "sn", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("live_grep", { - prompt_title = "Neorg Grep", - cwd = "~/Notes", - }) - fn() - end, - desc = "Search Notes", - }, - }, - opts = { - load = { - ["core.defaults"] = {}, - ["core.concealer"] = {}, - ["core.dirman"] = { - config = { - workspaces = { - notes = "~/Notes", - }, - default_workspace = "notes", - }, - }, - ["core.completion"] = { - config = { - engine = "nvim-cmp", - }, - }, - ["core.clipboard"] = {}, - ["core.clipboard.code-blocks"] = {}, - ["core.integrations.telescope"] = {}, - }, - }, - config = function(_, opts) - require("neorg").setup(opts) - local neorg_callbacks = require("neorg.core.callbacks") - - neorg_callbacks.on_event("core.keybinds.events.enable_keybinds", function(_, keybinds) - keybinds.map_event_to_mode("norg", { - n = { - { "", "core.integrations.telescope.find_linkable" }, - { "", "core.integrations.telescope.insert_link" }, - { "", "core.integrations.telescope.search_headings" }, - { "", "core.integrations.telescope.insert_file_link" }, - }, - - i = {}, - }, { - silent = true, - noremap = true, - }) - end) - end, - }, - - { - "jbyuki/venn.nvim", - keys = { - { - "nv", - function() - function Toggle_venn() - local venn_enabled = vim.inspect(vim.b.venn_enabled) - if venn_enabled == "nil" then - vim.b.venn_enabled = true - vim.cmd([[setlocal ve=all]]) - -- draw a line on HJKL keystokes - vim.api.nvim_buf_set_keymap(0, "n", "J", "j:VBox", { noremap = true }) - vim.api.nvim_buf_set_keymap(0, "n", "K", "k:VBox", { noremap = true }) - vim.api.nvim_buf_set_keymap(0, "n", "L", "l:VBox", { noremap = true }) - vim.api.nvim_buf_set_keymap(0, "n", "H", "h:VBox", { noremap = true }) - -- draw a box by pressing "f" with visual selection - vim.api.nvim_buf_set_keymap(0, "v", "f", ":VBox", { noremap = true }) - else - vim.cmd([[setlocal ve=]]) - vim.cmd([[mapclear ]]) - vim.b.venn_enabled = nil - end - end - - Toggle_venn() - end, - desc = "Open Venn panel", - }, - }, - }, - - { - "ellisonleao/glow.nvim", - config = true, - cmd = "Glow", - ft = "markdown", - keys = { - { - "pm", - "Glow", - desc = "Preview Markdown", - }, - }, - }, - - { - "jbyuki/nabla.nvim", + "davidosomething/vim-colors-meh", + name = "meh", lazy = true, - -- ft = { "tex", "latex", "markdown" }, - -- opts = { - -- autogen = true, -- auto-regenerate ASCII art when exiting insert mode - -- silent = true, -- silents error messages - -- }, - -- config = function() - -- local nabla = require("nabla") - -- nabla.enable_virt() - -- end, - keys = { - { - "pe", - function() - require("nabla").toggle_virt() - end, - desc = "Preview Math Equation", - }, - }, }, { - "lervag/vimtex", - config = function() - -- vim.g.vimtex_compiler_progname = "nvr" - -- vim.g.vimtex_view_method = "zathura" - end, + "kvrohit/rasmus.nvim", + name = "rasmus", + lazy = true, }, - { - "tpope/vim-dispatch", - commands = { "Make", "Dispatch", "Copen" }, - keys = { - { - "cc", - function() - local input = vim.fn.input("Command: ") - vim.cmd("Dispatch " .. input) - end, - desc = "AsyncRun", - }, - { "ck", desc = "AsyncStop" }, - }, - }, - - { - "chipsenkbeil/distant.nvim", - branch = "v0.3", - config = function() - require("distant"):setup() - end, - }, - - { - "3rd/image.nvim", - opts = { - backend = "kitty", - integrations = { - markdown = { - enabled = true, - clear_in_insert_mode = false, - download_remote_images = true, - only_render_image_at_cursor = false, - filetypes = { "markdown", "vimwiki" }, -- markdown extensions (ie. quarto) can go here - }, - neorg = { - enabled = true, - clear_in_insert_mode = false, - download_remote_images = true, - only_render_image_at_cursor = false, - filetypes = { "norg" }, - }, - }, - max_width = nil, - max_height = nil, - max_width_window_percentage = nil, - max_height_window_percentage = 50, - window_overlap_clear_enabled = false, -- toggles images when windows are overlapped - window_overlap_clear_ft_ignore = { "cmp_menu", "cmp_docs", "" }, - editor_only_render_when_focused = false, -- auto show/hide images when the editor gains/looses focus - tmux_show_only_in_active_window = false, -- auto show/hide images in the correct Tmux window (needs visual-activity off) - hijack_file_patterns = { "*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp" }, -- render image files as images when opened - }, - config = true, - }, + { "neanias/everforest-nvim", lazy = true, name = "everforest", opts = { + background = "hard", + } }, } diff --git a/lua/rayandrew/plugins/lsp.lua b/lua/rayandrew/plugins/lsp.lua index c0ec96f..3bd7635 100644 --- a/lua/rayandrew/plugins/lsp.lua +++ b/lua/rayandrew/plugins/lsp.lua @@ -1,8 +1,14 @@ +------------------------------ +-- LSP CONFIGURATION -- +------------------------------ + +local slow_format_filetypes = {} + return { { { - 'VonHeikemen/lsp-zero.nvim', - branch = 'v3.x', + "VonHeikemen/lsp-zero.nvim", + branch = "v3.x", lazy = true, config = false, init = function() @@ -12,72 +18,186 @@ return { end, }, { - 'williamboman/mason.nvim', + "williamboman/mason.nvim", lazy = false, config = true, }, -- Autocompletion { - 'hrsh7th/nvim-cmp', - event = 'InsertEnter', + "hrsh7th/nvim-cmp", + event = "InsertEnter", dependencies = { - {'L3MON4D3/LuaSnip'}, + { "L3MON4D3/LuaSnip" }, }, config = function() -- Here is where you configure the autocompletion settings. - local lsp_zero = require('lsp-zero') + local lsp_zero = require("lsp-zero") lsp_zero.extend_cmp() -- And you can configure cmp even more, if you want to. - local cmp = require('cmp') + local cmp = require("cmp") local cmp_action = lsp_zero.cmp_action() cmp.setup({ formatting = lsp_zero.cmp_format(), mapping = cmp.mapping.preset.insert({ - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp_action.luasnip_jump_forward(), - [''] = cmp_action.luasnip_jump_backward(), - }) + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp_action.luasnip_jump_forward(), + [""] = cmp_action.luasnip_jump_backward(), + }), }) - end + end, }, -- LSP { - 'neovim/nvim-lspconfig', - cmd = {'LspInfo', 'LspInstall', 'LspStart'}, - event = {'BufReadPre', 'BufNewFile'}, + "neovim/nvim-lspconfig", + cmd = { "LspInfo", "LspInstall", "LspStart" }, + event = { "BufReadPre", "BufNewFile" }, dependencies = { - {'hrsh7th/cmp-nvim-lsp'}, - {'williamboman/mason-lspconfig.nvim'}, + { "hrsh7th/cmp-nvim-lsp" }, + { "williamboman/mason-lspconfig.nvim" }, }, config = function() -- This is where all the LSP shenanigans will live - local lsp_zero = require('lsp-zero') + local lsp_zero = require("lsp-zero") lsp_zero.extend_lspconfig() lsp_zero.on_attach(function(client, bufnr) -- see :help lsp-zero-keybindings -- to learn the available actions - lsp_zero.default_keymaps({buffer = bufnr}) + lsp_zero.default_keymaps({ buffer = bufnr }) end) - require('mason-lspconfig').setup({ + require("mason-lspconfig").setup({ ensure_installed = {}, handlers = { lsp_zero.default_setup, lua_ls = function() -- (Optional) Configure lua language server for neovim local lua_opts = lsp_zero.nvim_lua_ls() - require('lspconfig').lua_ls.setup(lua_opts) + require("lspconfig").lua_ls.setup(lua_opts) end, - } + }, }) - end - } - } + end, + }, + }, + + -- Formatter + { + "stevearc/conform.nvim", + event = { "BufWritePre" }, + cmd = { "ConformInfo" }, + keys = { + { + -- Customize or remove this keymap to your liking + "cf", + function() + require("conform").format({ async = true, lsp_fallback = true }) + end, + mode = "", + desc = "Format buffer", + }, + }, + opts = { + formatters_by_ft = { + lua = { "stylua" }, + python = { "isort", "black" }, + typescript = { { "prettierd", "prettier" }, { "eslint_d", "eslint" } }, + javascript = { { "prettierd", "prettier" }, { "eslint_d", "eslint" } }, + nix = { "nixfmt" }, + }, + format_on_save = function(bufnr) + if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then + return + end + + if slow_format_filetypes[vim.bo[bufnr].filetype] then + return + end + local function on_format(err) + if err and err:match("timeout$") then + slow_format_filetypes[vim.bo[bufnr].filetype] = true + end + end + + return { timeout_ms = 200, lsp_fallback = true }, on_format + end, + format_after_save = function(bufnr) + if not slow_format_filetypes[vim.bo[bufnr].filetype] then + return + end + return { lsp_fallback = true } + end, + formatters = { + shfmt = { + prepend_args = { "-i", "2" }, + }, + }, + }, + init = function() + -- If you want the formatexpr, here is the place to set it + vim.o.formatexpr = "v:lua.require'conform'.formatexpr()" + end, + }, + + { + "folke/trouble.nvim", + cmd = { "TroubleToggle", "Trouble" }, + opts = { use_diagnostic_signs = true }, + keys = { + { + "xx", + "TroubleToggle document_diagnostics", + desc = "Document Diagnostics (Trouble)", + }, + { + "xX", + "TroubleToggle workspace_diagnostics", + desc = "Workspace Diagnostics (Trouble)", + }, + { + "xL", + "TroubleToggle loclist", + desc = "Location List (Trouble)", + }, + { + "xQ", + "TroubleToggle quickfix", + desc = "Quickfix List (Trouble)", + }, + { + "[q", + function() + if require("trouble").is_open() then + require("trouble").previous({ skip_groups = true, jump = true }) + else + local ok, err = pcall(vim.cmd.cprev) + if not ok then + vim.notify(err, vim.log.levels.ERROR) + end + end + end, + desc = "Previous trouble/quickfix item", + }, + { + "]q", + function() + if require("trouble").is_open() then + require("trouble").next({ skip_groups = true, jump = true }) + else + local ok, err = pcall(vim.cmd.cnext) + if not ok then + vim.notify(err, vim.log.levels.ERROR) + end + end + end, + desc = "Next trouble/quickfix item", + }, + }, + }, } diff --git a/lua/rayandrew/plugins/telescope.lua b/lua/rayandrew/plugins/telescope.lua index 17398ae..6a6140e 100644 --- a/lua/rayandrew/plugins/telescope.lua +++ b/lua/rayandrew/plugins/telescope.lua @@ -1,7 +1,9 @@ +------------------------------ +-- Telescope -- +------------------------------ + return { - -- Telescope - ------------------------------ { "nvim-telescope/telescope.nvim", cmd = "Telescope", diff --git a/lua/rayandrew/plugins/theme.lua b/lua/rayandrew/plugins/theme.lua deleted file mode 100644 index 2c01ee3..0000000 --- a/lua/rayandrew/plugins/theme.lua +++ /dev/null @@ -1,23 +0,0 @@ -return { - - ------------------------------ - -- Color Scheme - ------------------------------ - { - "rose-pine/neovim", - name = "rose-pine", - lazy = true, - }, - - { - "davidosomething/vim-colors-meh", - name = "meh", - lazy = true, - }, - - { - "kvrohit/rasmus.nvim", - name = "rasmus", - lazy = true, - }, -} diff --git a/lua/rayandrew/plugins/treesitter.lua b/lua/rayandrew/plugins/treesitter.lua index 8fdd509..64157eb 100644 --- a/lua/rayandrew/plugins/treesitter.lua +++ b/lua/rayandrew/plugins/treesitter.lua @@ -1,3 +1,5 @@ +local load_textobjects = false + return { ------------------------------ -- TreeSitter @@ -141,9 +143,11 @@ return { end end, }, + { "nvim-treesitter/playground", }, + { "nvim-treesitter/nvim-treesitter-context", opts = { @@ -151,4 +155,13 @@ return { }, config = true, }, + + { + "simrat39/symbols-outline.nvim", + opts = {}, + cmd = { "SymbolsOutline", "SymbolsOutlineOpen", "SymbolsOutlineClose" }, + keys = { + { "so", "SymbolsOutline", desc = "Symbols Outline" }, + }, + }, } diff --git a/lua/rayandrew/plugins/ui.lua b/lua/rayandrew/plugins/ui.lua new file mode 100644 index 0000000..01d72e5 --- /dev/null +++ b/lua/rayandrew/plugins/ui.lua @@ -0,0 +1,142 @@ +------------------------------ +-- User Interface +------------------------------ + +return { + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function() + local icons = require("rayandrew.theme").icons + local Util = require("rayandrew.util") + + return { + options = { + theme = "auto", + globalstatus = true, + disabled_filetypes = { statusline = { "dashboard", "alpha" } }, + }, + sections = { + lualine_a = { + { + "mode", + fmt = function(str) + return str:sub(1, 1) + end, + }, + }, + lualine_b = { "branch" }, + lualine_c = { + { + "diagnostics", + symbols = { + error = icons.diagnostics.Error, + warn = icons.diagnostics.Warn, + info = icons.diagnostics.Info, + hint = icons.diagnostics.Hint, + }, + }, + { "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } }, + { "filename", path = 1, symbols = { modified = "  ", readonly = "", unnamed = "" } }, + }, + lualine_x = { + { require("lazy.status").updates, cond = require("lazy.status").has_updates, color = Util.fg("Special") }, + { + "diff", + symbols = { + added = icons.git.added, + modified = icons.git.modified, + removed = icons.git.removed, + }, + }, + }, + lualine_y = {}, + lualine_z = { + function() + return " " .. os.date("%R") + end, + }, + }, + extensions = { "neo-tree", "lazy" }, + } + end, + }, + + { + "lukas-reineke/indent-blankline.nvim", + main = "ibl", + event = { "BufReadPost", "BufNewFile" }, + opts = { + -- char = "▏", + indent = { + char = "│", + }, + exclude = { + filetypes = { + "help", + "alpha", + "dashboard", + "neo-tree", + "Trouble", + "lazy", + "mason", + "notify", + "toggleterm", + "lazyterm", + "qf", + }, + buftypes = { + "terminal", + "nofile", + "quickfix", + "prompt", + }, + }, + scope = { + enabled = true, + }, + -- show_trailing_blankline_indent = false, + }, + }, + + { "kevinhwang91/nvim-bqf", ft = "qf" }, + + -- icons + { "nvim-tree/nvim-web-devicons", lazy = true }, + + { + "lewis6991/gitsigns.nvim", + event = { "BufReadPre", "BufNewFile" }, + opts = { + signs = { + add = { text = "▎" }, + change = { text = "▎" }, + delete = { text = "" }, + topdelete = { text = "" }, + changedelete = { text = "▎" }, + untracked = { text = "▎" }, + }, + on_attach = function(buffer) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, desc) + vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc }) + end + + -- stylua: ignore start + map("n", "]h", gs.next_hunk, "Next Hunk") + map("n", "[h", gs.prev_hunk, "Prev Hunk") + map({ "n", "v" }, "ghs", ":Gitsigns stage_hunk", "Stage Hunk") + map({ "n", "v" }, "ghr", ":Gitsigns reset_hunk", "Reset Hunk") + map("n", "ghS", gs.stage_buffer, "Stage Buffer") + map("n", "ghu", gs.undo_stage_hunk, "Undo Stage Hunk") + map("n", "ghR", gs.reset_buffer, "Reset Buffer") + map("n", "ghp", gs.preview_hunk, "Preview Hunk") + map("n", "ghb", function() gs.blame_line({ full = true }) end, "Blame Line") + map("n", "ghd", gs.diffthis, "Diff This") + map("n", "ghD", function() gs.diffthis("~") end, "Diff This ~") + map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "GitSigns Select Hunk") + end, + }, + }, +} diff --git a/lua/rayandrew/plugins/utilities.lua b/lua/rayandrew/plugins/utilities.lua new file mode 100644 index 0000000..a348b5f --- /dev/null +++ b/lua/rayandrew/plugins/utilities.lua @@ -0,0 +1,398 @@ +------------------------------ +-- Utilities +------------------------------ + +return { + { + "nvim-focus/focus.nvim", + version = "*", + opts = {}, + cmd = { "FocusToggle", "FocusSplitNicely", "FocusSplitCycle", "FocusSplitCycleReverse" }, + keys = { + { + "wf", + "FocusToggle", + desc = "Toggle Focus", + }, + }, + }, + + { + "kylechui/nvim-surround", + version = "*", + event = "VeryLazy", + opts = {}, + }, + + { + "RRethy/vim-illuminate", + event = { "BufReadPost", "BufNewFile" }, + opts = { + delay = 200, + large_file_cutoff = 2000, + large_file_overrides = { + providers = { "lsp" }, + }, + }, + config = function(_, opts) + require("illuminate").configure(opts) + + local function map(key, dir, buffer) + vim.keymap.set("n", key, function() + require("illuminate")["goto_" .. dir .. "_reference"](false) + end, { + desc = dir:sub(1, 1):upper() .. dir:sub(2) .. " Reference", + buffer = buffer, + }) + end + + map("]]", "next") + map("[[", "prev") + + -- also set it after loading ftplugins, since a lot overwrite [[ and ]] + vim.api.nvim_create_autocmd("FileType", { + callback = function() + local buffer = vim.api.nvim_get_current_buf() + map("]]", "next", buffer) + map("[[", "prev", buffer) + end, + }) + end, + keys = { + { "]]", desc = "Next Reference" }, + { "[[", desc = "Prev Reference" }, + }, + }, + + -- comments + { + "echasnovski/mini.comment", + event = "VeryLazy", + dependencies = { + { "JoosepAlviste/nvim-ts-context-commentstring", lazy = true }, + }, + opts = { + options = { + custom_commentstring = function() + return require("ts_context_commentstring.internal").calculate_commentstring() or vim.bo.commentstring + end, + }, + }, + }, + + -- RSI compatibility + -- { + -- "tpope/vim-rsi", + -- }, + { + "assistcontrol/readline.nvim", + event = "VeryLazy", + keys = { + { + "", + function() + require("readline").forward_word() + end, + mode = "!", + }, + { + "", + function() + require("readline").backward_word() + end, + mode = "!", + }, + { + "", + function() + require("readline").kill_word() + end, + mode = "!", + }, + { + "", + function() + require("readline").backward_kill_word() + end, + mode = "!", + }, + { + "", + function() + require("readline").unix_word_rubout() + end, + mode = "!", + }, + { + "", + function() + require("readline").kill_line() + end, + mode = "!", + }, + { + "", + function() + require("readline").backward_kill_line() + end, + mode = "!", + }, + { + "", + function() + require("readline").beginning_of_line() + end, + mode = "!", + }, + { + "", + function() + require("readline").end_of_line() + end, + mode = "!", + }, + { "", "", mode = "!" }, -- forward-char + { "", "", mode = "!" }, -- backward-char + { "", "", mode = "!" }, -- next-line + { "", "", mode = "!" }, -- previous-line + { "", "", mode = "!" }, -- delete-char + { "", "", mode = "!" }, -- backward-delete-char + { "", "", mode = "!" }, -- abort + }, + }, + + { + "tpope/vim-fugitive", + cmd = { "Git" }, + }, + + { + "theprimeagen/harpoon", + event = "VeryLazy", + keys = { + { + "ha", + function() + local mark = require("harpoon.mark") + mark.add_file() + vim.print("Added to Harpoon " .. vim.fn.expand("%")) + end, + desc = "Harpoon Add File", + }, + { + "he", + function() + local ui = require("harpoon.ui") + ui.toggle_quick_menu() + end, + desc = "Harpoon UI", + }, + { + "h1", + function() + local ui = require("harpoon.ui") + ui.nav_file(1) + end, + }, + { + "h2", + function() + local ui = require("harpoon.ui") + ui.nav_file(2) + end, + }, + { + "h3", + function() + local ui = require("harpoon.ui") + ui.nav_file(3) + end, + }, + { + "h4", + function() + local ui = require("harpoon.ui") + ui.nav_file(4) + end, + }, + { + "h5", + function() + local ui = require("harpoon.ui") + ui.nav_file(5) + end, + }, + }, + }, + + { + "theprimeagen/refactoring.nvim", + }, + + { + "github/copilot.vim", + init = function() + -- vim.g.copilot_no_tab_map = true + -- vim.g.copilot_assume_mapped = true + -- vim.g.copilot_tab_fallback = "" + vim.g.copilot_filetypes = { + ["*"] = true, + ["text"] = false, + } + end, + }, + + { + "eandrju/cellular-automaton.nvim", + }, + + { + "mbbill/undotree", + }, + + { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + plugins = { spelling = true }, + defaults = { + mode = { "n", "v" }, + ["g"] = { name = "+goto" }, + ["gz"] = { name = "+surround" }, + ["]"] = { name = "+next" }, + ["["] = { name = "+prev" }, + [""] = { name = "+tabs" }, + ["b"] = { name = "+buffer" }, + ["c"] = { name = "+code" }, + ["f"] = { name = "+file/find" }, + ["g"] = { name = "+git" }, + ["n"] = { name = "+note" }, + ["gh"] = { name = "+hunks" }, + ["q"] = { name = "+quit/session" }, + ["s"] = { name = "+search" }, + ["u"] = { name = "+ui" }, + ["w"] = { name = "+windows" }, + ["x"] = { name = "+diagnostics/quickfix" }, + }, + }, + config = function(_, opts) + local wk = require("which-key") + wk.setup(opts) + wk.register(opts.defaults) + end, + }, + + -- zen + { + "folke/zen-mode.nvim", + opts = { + window = { + width = 100, + }, + plugins = { + tmux = { + enabled = true, + }, + }, + on_open = function() + vim.wo.wrap = false + vim.wo.number = false + vim.wo.rnu = false + vim.wo.signcolumn = "no" + end, + on_close = function() + vim.wo.wrap = true + vim.wo.number = true + vim.wo.rnu = true + vim.wo.signcolumn = "yes" + end, + }, + keys = { + { + "z", + function() + require("zen-mode").toggle() + require("rayandrew.theme").recolor() + end, + }, + }, + }, + + -- Tmux + { + "mrjones2014/smart-splits.nvim", + lazy = true, + -- event = "VeryLazy", + dependencies = { + { + "kwkarlwang/bufresize.nvim", + opts = {}, + }, + }, + config = function() + require("smart-splits").setup({ + resize_mode = { + hooks = { + on_leave = require("bufresize").register, + }, + }, + }) + end, + }, + + { + "christoomey/vim-tmux-navigator", + cmd = { + "TmuxNavigateLeft", + "TmuxNavigateDown", + "TmuxNavigateUp", + "TmuxNavigateRight", + }, + keys = { "", "", "", "" }, + config = function() + vim.g.tmux_navigator_no_wrap = 1 + end, + }, + + -- search/replace in multiple files + { + "nvim-pack/nvim-spectre", + cmd = "Spectre", + opts = { open_cmd = "noswapfile vnew" }, + keys = { + { + "sr", + function() + require("spectre").open() + end, + desc = "Replace in files (Spectre)", + }, + }, + }, + + -- buffer remove + { + "echasnovski/mini.bufremove", + -- stylua: ignore + keys = { + { "bd", function() require("mini.bufremove").delete(0, false) end, desc = "Delete Buffer" }, + { "bD", function() require("mini.bufremove").delete(0, true) end, desc = "Delete Buffer (Force)" }, + }, + }, + + { + "tpope/vim-dispatch", + commands = { "Make", "Dispatch", "Copen" }, + keys = { + { + "cc", + function() + local input = vim.fn.input("Command: ") + vim.cmd("Dispatch " .. input) + end, + desc = "AsyncRun", + }, + { "ck", desc = "AsyncStop" }, + }, + }, +} diff --git a/lua/rayandrew/theme.lua b/lua/rayandrew/theme.lua index 054c6b9..54447fb 100644 --- a/lua/rayandrew/theme.lua +++ b/lua/rayandrew/theme.lua @@ -2,7 +2,8 @@ local M = {} -- M.colorscheme = "rose-pine" -- M.colorscheme = "meh" -M.colorscheme = "rasmus" +-- M.colorscheme = "rasmus" +M.colorscheme = "everforest" -- M.colorscheme = "" function M.setup()