From b04e688eaae0b514584f53c3429f53ff44cdf74c Mon Sep 17 00:00:00 2001 From: Ray Andrew <4437323+rayandrew@users.noreply.github.com> Date: Thu, 4 Jan 2024 21:19:02 -0600 Subject: [PATCH] refactor --- lazy-lock.json | 70 +- lua/rayandrew/plugins.lua | 1769 -------------------------- lua/rayandrew/plugins/file.lua | 235 ++++ lua/rayandrew/plugins/general.lua | 1034 +++++++++++++++ lua/rayandrew/plugins/lsp.lua | 83 ++ lua/rayandrew/plugins/telescope.lua | 141 ++ lua/rayandrew/plugins/theme.lua | 23 + lua/rayandrew/plugins/treesitter.lua | 154 +++ 8 files changed, 1699 insertions(+), 1810 deletions(-) delete mode 100644 lua/rayandrew/plugins.lua create mode 100644 lua/rayandrew/plugins/file.lua create mode 100644 lua/rayandrew/plugins/general.lua create mode 100644 lua/rayandrew/plugins/lsp.lua create mode 100644 lua/rayandrew/plugins/telescope.lua create mode 100644 lua/rayandrew/plugins/theme.lua create mode 100644 lua/rayandrew/plugins/treesitter.lua diff --git a/lazy-lock.json b/lazy-lock.json index b9a0661..c6cb915 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,73 +1,61 @@ { - "LuaSnip": { "branch": "master", "commit": "6a001360cea89df50f7c5cc8c7a75e6a21f1ef5c" }, + "LuaSnip": { "branch": "master", "commit": "8ae1dedd988eb56441b7858bd1e8554dfadaa46d" }, "bufresize.nvim": { "branch": "master", "commit": "3b19527ab936d6910484dcc20fb59bdb12322d8b" }, "cellular-automaton.nvim": { "branch": "main", "commit": "b7d056dab963b5d3f2c560d92937cb51db61cb5b" }, "cloak.nvim": { "branch": "main", "commit": "951b163e55ce7639eb320c450bde9283c4fe968b" }, - "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" }, - "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" }, - "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, - "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, "copilot.vim": { "branch": "release", "commit": "5b19fb001d7f31c4c7c5556d7a97b243bd29f45f" }, "distant.nvim": { "branch": "v0.3", "commit": "998724f62386c8022a4e6c885f4509cf9477451a" }, "focus.nvim": { "branch": "master", "commit": "c83be53de558f6f0824c8cefcad61719c87ce157" }, - "friendly-snippets": { "branch": "main", "commit": "53d3df271d031c405255e99410628c26a8f0d2b0" }, "gitsigns.nvim": { "branch": "main", "commit": "d195f0c35ced5174d3ecce1c4c8ebb3b5bc23fa9" }, - "glow.nvim": { "branch": "main", "commit": "5b38fb7b6e806cac62707a4aba8c10c5f14d5bb5" }, - "harpoon": { "branch": "master", "commit": "867e212ac153e793f95b316d1731f3ca1894625e" }, - "image.nvim": { "branch": "master", "commit": "41f0f2643a09631bc0d8e2837b514667d423e440" }, - "indent-blankline.nvim": { "branch": "master", "commit": "7206c77cb931f79885fc47f88ae18f99148392eb" }, + "glow.nvim": { "branch": "main", "commit": "238070a686c1da3bccccf1079700eb4b5e19aea4" }, + "harpoon": { "branch": "master", "commit": "ccae1b9bec717ae284906b0bf83d720e59d12b91" }, + "image.nvim": { "branch": "master", "commit": "2090055394d5c8efb5f23143cc2f3d9fac68a61e" }, + "indent-blankline.nvim": { "branch": "master", "commit": "3c8a185da4b8ab7aef487219f5e001b11d4b6aaf" }, "lazy.nvim": { "branch": "main", "commit": "96584866b9c5e998cbae300594d0ccfd0c464627" }, - "lsp-zero.nvim": { "branch": "v2.x", "commit": "ffebf6f7b0649f1eb81b37c37b75552f8ff96337" }, - "lualine.nvim": { "branch": "master", "commit": "2248ef254d0a1488a72041cfb45ca9caada6d994" }, - "mason-lspconfig": { "branch": "main", "commit": "9453e3d6cd2ca45d96e20f343e8f1b927364b630" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "9453e3d6cd2ca45d96e20f343e8f1b927364b630" }, - "mason-null-ls.nvim": { "branch": "main", "commit": "d1f7258f80867f718d643d88eee66959671a4bef" }, - "mason.nvim": { "branch": "main", "commit": "41e75af1f578e55ba050c863587cffde3556ffa6" }, + "lsp-zero.nvim": { "branch": "v3.x", "commit": "2def059b9d7c45fddc9c072835710ca9a498657c" }, + "lualine.nvim": { "branch": "master", "commit": "566b7036f717f3d676362742630518a47f132fff" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "56e435e09f8729af2d41973e81a0db440f8fe9c9" }, + "mason.nvim": { "branch": "main", "commit": "a09da6ac634926a299dd439da08bdb547a8ca011" }, "meh": { "branch": "master", "commit": "e2962284bbd53db5cbe2db39efaa3ea74ade0fb1" }, - "mini.bufremove": { "branch": "main", "commit": "f53c7f27e36009fe61563c11cde154b94a0e5b94" }, - "mini.comment": { "branch": "main", "commit": "3d9c8009615857e982f09bc5357fc95f2a2175f3" }, - "nabla.nvim": { "branch": "master", "commit": "f5aff14fa3d60f4be568c444be84400812823648" }, - "neo-tree.nvim": { "branch": "v3.x", "commit": "230ff118613fa07138ba579b89d13ec2201530b9" }, - "neoconf.nvim": { "branch": "main", "commit": "64437787dba70fce50dad7bfbb97d184c5bc340f" }, - "neodev.nvim": { "branch": "main", "commit": "ef351fae5df2559956398923c5d38c9b64e7d898" }, - "neorg": { "branch": "main", "commit": "baaf13a3145534144b795ad37db22bfffd2ad343" }, + "mini.bufremove": { "branch": "main", "commit": "020243bfed8c8b941f2c20626faf3ea39c0c0e1b" }, + "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": "c9b4de623d19a85b353ff70d2ae9c77143abe69c" }, - "null-ls.nvim": { "branch": "main", "commit": "0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7" }, + "nui.nvim": { "branch": "main", "commit": "35da9ca1de0fc4dda96c2e214d93d363c145f418" }, "nvim-bqf": { "branch": "main", "commit": "bdc2a4e5bb670b3c0e33ada9c0eec636d93a0748" }, "nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" }, - "nvim-lspconfig": { "branch": "master", "commit": "84f2dd42efffa20d505ac44c78568d778ca7e0a1" }, - "nvim-spectre": { "branch": "master", "commit": "a18a58015b46f02b4fe537ebfffd82e46110ff24" }, + "nvim-lspconfig": { "branch": "master", "commit": "ce0e625df61be77abe1340fbc9afe9ad39b31dd8" }, + "nvim-spectre": { "branch": "master", "commit": "d8906855f1949ac97b1e77aaf8d3fe12ed158ddc" }, "nvim-surround": { "branch": "main", "commit": "703ec63aa798e5e07d309b35e42def34bebe0174" }, - "nvim-treesitter": { "branch": "master", "commit": "ab818bf5a2ee21515ade9afcf428e98056b6197b" }, - "nvim-treesitter-context": { "branch": "master", "commit": "cfa8ee19ac9bae9b7fb2958eabe2b45b70c56ccb" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "ec1c5bdb3d87ac971749fa6c7dbc2b14884f1f6a" }, + "nvim-treesitter": { "branch": "master", "commit": "8ae4080c5ba59d81b4e49525d4168807bc098e73" }, + "nvim-treesitter-context": { "branch": "master", "commit": "652ec514d6ba8bc4a3c2de76c855fe668e2c7196" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "85b9d0cbd4ff901abcda862b50dbb34e0901848b" }, "nvim-ts-context-commentstring": { "branch": "main", "commit": "1277b4a1f451b0f18c0790e1a7f12e1e5fdebfee" }, - "nvim-ufo": { "branch": "main", "commit": "9fa77fb7e4365a053a5303b773aaf5eaf806d1f4" }, - "nvim-web-devicons": { "branch": "master", "commit": "a1425903ab52a0a0460622519e827f224e5b4fee" }, + "nvim-web-devicons": { "branch": "master", "commit": "3e24abe1ae66532135cec911562f553fe247cb56" }, "playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" }, "plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" }, - "promise-async": { "branch": "main", "commit": "94f6f03c6c1e2aab551aacdf0c1e597a7269abb6" }, "rasmus": { "branch": "main", "commit": "f824de95d446686e479781c0c2b778c177da528f" }, - "refactoring.nvim": { "branch": "master", "commit": "156532476deb10b1b2a32cb38e1078b3f9951c42" }, + "refactoring.nvim": { "branch": "master", "commit": "258041a596d733dc51f6ad1e092ed1f23e3faa70" }, "rose-pine": { "branch": "main", "commit": "92762f4fa2144c05db760ea254f4c399a56a7ef5" }, - "smart-splits.nvim": { "branch": "master", "commit": "f0003bf9c3f11b8b9209264f865b8864453ca926" }, - "symbols-outline.nvim": { "branch": "master", "commit": "512791925d57a61c545bc303356e8a8f7869763c" }, + "smart-splits.nvim": { "branch": "master", "commit": "403ad1a4fd7eb39388690a5657e7cbfb16da6668" }, + "symbols-outline.nvim": { "branch": "master", "commit": "564ee65dfc9024bdde73a6621820866987cbb256" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" }, - "telescope.nvim": { "branch": "master", "commit": "6213322ab56eb27356fdc09a5078e41e3ea7f3bc" }, + "telescope.nvim": { "branch": "master", "commit": "87e92ea31b2b61d45ad044cf7b2d9b66dad2a618" }, "todo-comments.nvim": { "branch": "main", "commit": "4a6737a8d70fe1ac55c64dfa47fcb189ca431872" }, - "tree-sitter-just": { "branch": "main", "commit": "4e5f5f3ff37b12a1bbf664eb3966b3019e924594" }, + "tree-sitter-just": { "branch": "main", "commit": "2262a409a3a5b832fe85ae563cd523c82f15f17c" }, "trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" }, "undotree": { "branch": "master", "commit": "36ff7abb6b60980338344982ad4cdf03f7961ecd" }, "venn.nvim": { "branch": "main", "commit": "e4d68341a73dd56c64955058821a58295fb337b1" }, "vim-dispatch": { "branch": "master", "commit": "6cc2691576f97d43f8751664d1a1a908b99927e5" }, - "vim-fugitive": { "branch": "master", "commit": "46eaf8918b347906789df296143117774e827616" }, + "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": "7db70e08ea03b3e4d91f63713d76134512e28d7e" }, - "vimtex": { "branch": "master", "commit": "29b6c052707b2d713fe2097cd5df54ce12ba2f90" }, + "vim-tmux-navigator": { "branch": "master", "commit": "38b1d0402c4600543281dc85b3f51884205674b6" }, + "vimtex": { "branch": "master", "commit": "f9b19d09ee6f0ba70dad0b5c2e710dd700681000" }, "which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }, "zen-mode.nvim": { "branch": "main", "commit": "50e2e2a36cc97847d9ab3b1a3555ba2ef6839b50" } } \ No newline at end of file diff --git a/lua/rayandrew/plugins.lua b/lua/rayandrew/plugins.lua deleted file mode 100644 index 1d73631..0000000 --- a/lua/rayandrew/plugins.lua +++ /dev/null @@ -1,1769 +0,0 @@ -local load_textobjects = false - -return { - { "folke/lazy.nvim", version = "*" }, - { "nvim-lua/plenary.nvim", lazy = true }, - - { - "dstein64/vim-startuptime", - cmd = "StartupTime", - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - ------------------------------ - -- Telescope - ------------------------------ - { - "nvim-telescope/telescope.nvim", - cmd = "Telescope", - dependencies = { - "nvim-lua/plenary.nvim", - { - "nvim-telescope/telescope-fzf-native.nvim", - -- NOTE: If you are having trouble with this installation, - -- refer to the README for telescope-fzf-native for more instructions. - build = "make", - cond = function() - return vim.fn.executable("make") == 1 - end, - }, - }, - version = false, - opts = { - pickers = { - buffers = { - mappings = { - i = { - [""] = function(prompt_bufnr) - local actions = require("telescope.actions") - actions.delete_buffer(prompt_bufnr) - actions.move_to_top(prompt_bufnr) - end, - [""] = false, - }, - n = { - ["d"] = "delete_buffer", - }, - }, - }, - }, - }, - keys = { - { - "sp", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("live_grep") - fn() - end, - desc = "Find in Files (Grep)", - }, - { - "ps", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("grep_string", { - search = vim.fn.input("Grep > "), - }) - fn() - end, - desc = "Find in Files (Grep)", - }, - { - "bb", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("buffers") - fn() - end, - desc = "List all opened buffers", - }, - { - "fF", - function() - local utils = require("telescope.utils") - local Util = require("rayandrew.util") - local fn = Util.telescope("files", { cwd = utils.buffer_dir() }) - fn() - end, - desc = "Find Files (root dir)", - }, - { - "ff", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("files", { cwd = false }) - fn() - end, - desc = "Find Files (cwd)", - }, - { - "fh", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("files", { cwd = false, hidden = true }) - fn() - end, - desc = "Find Files with Hidden (cwd)", - }, - { - "sm", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("man_pages") - fn() - end, - desc = "Find Manual", - }, - { - "sh", - function() - local Util = require("rayandrew.util") - local fun = Util.telescope("help_tags") - fun() - end, - desc = "Find Help Tags", - }, - { - "/", - function() - -- require("telescope.builtin").current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ - -- winblend = 10, - -- previewer = false, - -- })) - local Util = require("rayandrew.util") - local fn = Util.telescope("current_buffer_fuzzy_find", { - winblend = 10, - previewer = false, - }) - fn() - end, - }, - { - "sd", - function() - local Util = require("rayandrew.util") - local fn = Util.telescope("diagnostics") - fn() - end, - }, - }, - }, - - ------------------------------ - -- TreeSitter - ------------------------------ - { - "nvim-treesitter/nvim-treesitter", - build = ":TSUpdate", - dependencies = { - { - "nvim-treesitter/nvim-treesitter-textobjects", - init = function() - require("lazy.core.loader").disable_rtp_plugin("nvim-treesitter-textobjects") - load_textobjects = true - end, - }, - - { - "IndianBoy42/tree-sitter-just", - dependencies = "nvim-treesitter/nvim-treesitter", - config = function(_, opts) - require("tree-sitter-just").setup({}) - end, - }, - }, - opts = { - highlight = { enable = true }, - indent = { enable = true }, - ensure_installed = { - "bash", - "c", - "html", - "javascript", - "json", - "latex", - "lua", - "luadoc", - "luap", - "markdown", - "markdown_inline", - "nix", - "python", - "query", - "regex", - "rust", - "tsx", - "typescript", - "vim", - "vimdoc", - "yaml", - }, - incremental_selection = { - enable = true, - keymaps = { - init_selection = "", - node_incremental = "", - scope_incremental = false, - node_decremental = "", - }, - }, - textobjects = { - select = { - enable = true, - lookahead = true, - keymaps = { - ["aa"] = "@parameter.outer", - ["ia"] = "@parameter.inner", - ["af"] = "@function.outer", - ["if"] = "@function.inner", - ["ac"] = "@class.outer", - ["ic"] = "@class.inner", - }, - }, - move = { - enable = true, - set_jumps = true, - goto_next_start = { - ["]k"] = { query = "@block.outer", desc = "Next block start" }, - ["]f"] = { query = "@function.outer", desc = "Next function start" }, - ["]a"] = { query = "@parameter.inner", desc = "Next parameter start" }, - }, - goto_next_end = { - ["]K"] = { query = "@block.outer", desc = "Next block end" }, - ["]F"] = { query = "@function.outer", desc = "Next function end" }, - ["]A"] = { query = "@parameter.inner", desc = "Next parameter end" }, - }, - goto_previous_start = { - ["[k"] = { query = "@block.outer", desc = "Previous block start" }, - ["[f"] = { query = "@function.outer", desc = "Previous function start" }, - ["[a"] = { query = "@parameter.inner", desc = "Previous parameter start" }, - }, - goto_previous_end = { - ["[K"] = { query = "@block.outer", desc = "Previous block end" }, - ["[F"] = { query = "@function.outer", desc = "Previous function end" }, - ["[A"] = { query = "@parameter.inner", desc = "Previous parameter end" }, - }, - }, - swap = { - enable = true, - swap_next = { - ["a"] = "@parameter.inner", - }, - swap_previous = { - ["A"] = "@parameter.inner", - }, - }, - }, - }, - cmd = { "TSUpdateSync" }, - keys = { - { "", desc = "Increment selection" }, - { "", desc = "Decrement selection", mode = "x" }, - }, - config = function(_, opts) - require("nvim-treesitter.install").compilers = { "gcc", "clang" } - if type(opts.ensure_installed) == "table" then - ---@type table - local added = {} - opts.ensure_installed = vim.tbl_filter(function(lang) - if added[lang] then - return false - end - added[lang] = true - return true - end, opts.ensure_installed) - end - require("nvim-treesitter.configs").setup(opts) - - if load_textobjects then - -- PERF: no need to load the plugin, if we only need its queries for mini.ai - if opts.textobjects then - for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do - if opts.textobjects[mod] and opts.textobjects[mod].enable then - local Loader = require("lazy.core.loader") - Loader.disabled_rtp_plugins["nvim-treesitter-textobjects"] = nil - local plugin = require("lazy.core.config").plugins["nvim-treesitter-textobjects"] - require("lazy.core.loader").source_runtime(plugin.dir, "plugin") - break - end - end - end - end - end, - }, - { - "nvim-treesitter/playground", - }, - { - "nvim-treesitter/nvim-treesitter-context", - opts = { - multiline_threshold = 1, - }, - config = true, - }, - - ------------------------------ - -- 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, - }, - - ------------------------------ - -- File Management - ------------------------------ - - { - "nvim-neo-tree/neo-tree.nvim", - branch = "v3.x", - cmd = "Neotree", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended - "MunifTanjim/nui.nvim", - "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information - }, - opts = { - sources = { "filesystem", "buffers", "git_status", "document_symbols" }, - open_files_do_not_replace_types = { "terminal", "Trouble", "trouble", "qf", "Outline" }, - filesystem = { - bind_to_cwd = false, - follow_current_file = { enabled = true }, - use_libuv_file_watcher = true, - hijack_netrw_behavior = "open_current", - }, - window = { - mappings = { - [""] = "none", - -- ["C"] = "copy", - ["C"] = { - "copy", - config = { - show_path = "absolute", -- "none", "relative", "absolute" - }, - }, - ["R"] = "rename", - ["y"] = function(state) - local node = state.tree:get_node() - -- get relative path - local filepath = node:get_id() - local filename = vim.fn.fnamemodify(filepath, ":.") - -- local filename = node.name - vim.fn.setreg("+", filename) - vim.notify("Copied: " .. filename) - end, - ["Y"] = function(state) - local node = state.tree:get_node() - local filepath = node:get_id() - vim.fn.setreg("+", filepath) - vim.notify("Copied: " .. filepath) - end, - }, - }, - default_component_configs = { - indent = { - with_expanders = true, -- if nil and file nesting is enabled, will enable expanders - expander_collapsed = "", - expander_expanded = "", - expander_highlight = "NeoTreeExpander", - }, - }, - }, - keys = { - { - "E", - function() - vim.cmd("Neotree toggle position=current") - end, - desc = "Toggle NeoTree as Buffer", - }, - { - "e", - function() - vim.cmd("Neotree toggle") - end, - desc = "Toggle NeoTree", - }, - }, - 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, - config = function(_, opts) - local function on_move(data) - Util.lsp.on_rename(data.source, data.destination) - end - - local events = require("neo-tree.events") - opts.event_handlers = opts.event_handlers or {} - vim.list_extend(opts.event_handlers, { - { event = events.FILE_MOVED, handler = on_move }, - { event = events.FILE_RENAMED, handler = on_move }, - }) - require("neo-tree").setup(opts) - vim.api.nvim_create_autocmd("TermClose", { - pattern = "*lazygit", - callback = function() - if package.loaded["neo-tree.sources.git_status"] then - require("neo-tree.sources.git_status").refresh() - end - end, - }) - 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, - -- }, - - -- 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 - ------------------------------ - - { - "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", - }, - }, - }, - - -- LSP Zero - { - "VonHeikemen/lsp-zero.nvim", - branch = "v2.x", - lazy = true, - config = function() - require("lsp-zero.settings").preset("recommended") - end, - }, - - -- Autocompletion - { - "hrsh7th/nvim-cmp", - event = "InsertEnter", - dependencies = { - { - "L3MON4D3/LuaSnip", - build = "make install_jsregexp", - -- event = "InsertEnter", - config = function() - local luasnip = require("luasnip") - require("luasnip.loaders.from_vscode").lazy_load() - luasnip.config.setup({}) - end, - }, - { "rafamadriz/friendly-snippets" }, - { "hrsh7th/nvim-cmp" }, - { "hrsh7th/cmp-buffer" }, - { "hrsh7th/cmp-path" }, - { "saadparwaiz1/cmp_luasnip" }, - { "hrsh7th/cmp-nvim-lsp" }, - { "hrsh7th/cmp-nvim-lua" }, - }, - config = function() - require("lsp-zero.cmp").extend() - - local cmp = require("cmp") - local cmp_action = require("lsp-zero.cmp").action() - local cmp_select = { behavior = cmp.SelectBehavior.Select } - local sorting = require("cmp.config.default")().sorting - - cmp.setup({ - sources = { - { name = "neorg", group_index = 2 }, - { name = "nvim_lsp", group_index = 2 }, - { name = "path", group_index = 2 }, - { name = "luasnip", group_index = 2 }, - }, - mapping = cmp.mapping.preset.insert({ - [""] = cmp.mapping.complete(), - [""] = cmp_action.luasnip_jump_forward(), - [""] = cmp_action.luasnip_jump_backward(), - [""] = cmp.mapping.select_prev_item(cmp_select), - [""] = cmp.mapping.select_next_item(cmp_select), - [""] = cmp.mapping.confirm({ select = true }), - [""] = nil, - [""] = nil, - [""] = cmp.mapping.confirm({ - behavior = cmp.ConfirmBehavior.Replace, - select = false, - }), - }), - sorting, - snippet = { - expand = function(args) - local luasnip = require("luasnip") - luasnip.lsp_expand(args.body) - end, - }, - }) - end, - }, - - -- LSP - { - "neovim/nvim-lspconfig", - cmd = "LspInfo", - event = { "BufReadPre", "BufNewFile" }, - dependencies = { - { "hrsh7th/cmp-nvim-lsp" }, - { "williamboman/mason-lspconfig.nvim" }, - { "williamboman/mason.nvim" }, - { "folke/neoconf.nvim", cmd = "Neoconf", config = false, dependencies = { "nvim-lspconfig" } }, - { "folke/neodev.nvim", opts = {} }, - { - "kevinhwang91/nvim-ufo", - dependencies = { "kevinhwang91/promise-async" }, - opts = {}, - }, - }, - config = function() - local lsp = require("lsp-zero") - - lsp.on_attach(function(_, bufnr) - -- local opts = { buffer = bufnr, remap = false } - - local nmap = function(keys, func, desc) - if desc then - desc = "LSP: " .. desc - end - - vim.keymap.set("n", keys, func, { buffer = bufnr, desc = desc, remap = false }) - end - - lsp.default_keymaps({ buffer = bufnr }) - - -- stylua: ignore start - nmap("gd", function() vim.lsp.buf.definition() end, "Goto Definition") - -- nmap("ws", function() require('telescope.builtin').lsp_dynamic_workspace_symbols() end, "Workspace Symbol") - nmap("ds", function() require('telescope.builtin').lsp_document_symbols() end, "Document Symbol") - nmap("df", function() vim.diagnostic.open_float() end, "Diagnostic Float") - nmap("gr", require("telescope.builtin").lsp_references, "Goto References") - nmap("[d", function() vim.diagnostic.goto_next() end, "Next Diagnostic") - nmap("]d", function() vim.diagnostic.goto_prev() end, "Prev Diagnostic") - nmap("ca", function() vim.lsp.buf.code_action() end, "Code Action") - nmap("vrr", function() vim.lsp.buf.references() end, "References") - nmap("rn", function() vim.lsp.buf.rename() end, "Rename") - - nmap("K", function() vim.lsp.buf.hover() end, "Hover") - -- nmap("", function() vim.lsp.buf.signature_help() end, "Signature Help") - - nmap("gD", function() vim.lsp.buf.declaration() end, "Goto Declaration") - nmap('wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, '[W]orkspace [L]ist Folders') - - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - vim.lsp.buf.format() - end, { desc = 'Format current buffer with LSP' }) - -- stylua: ignore end - end) - - -- (Optional) Configure lua language server for neovim - require("lspconfig").lua_ls.setup(lsp.nvim_lua_ls({ - settings = { - Lua = { - completion = { - callSnippet = "Replace", - }, - }, - }, - })) - - require("lspconfig").clangd.setup({ - cmd = { - "clangd", - "--offset-encoding=utf-16", - }, - }) - - lsp.set_preferences({ - suggest_lsp_servers = false, - sign_icons = { - error = "E", - warn = "W", - hint = "H", - info = "I", - }, - }) - - lsp.format_on_save({ - format_opts = { - async = false, - timeout_ms = 10000, - }, - servers = { - ["null-ls"] = { "javascript", "typescript", "lua", "python", "nix" }, - }, - }) - - lsp.set_server_config({ - capabilities = { - textDocument = { - foldingRange = { - dynamicRegistration = false, - lineFoldingOnly = true, - }, - }, - }, - }) - - lsp.setup() - - vim.diagnostic.config({ - virtual_text = true, - }) - end, - }, - - { - "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", - 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", - 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, - }, - - { - "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, - }, -} diff --git a/lua/rayandrew/plugins/file.lua b/lua/rayandrew/plugins/file.lua new file mode 100644 index 0000000..8ab0ac1 --- /dev/null +++ b/lua/rayandrew/plugins/file.lua @@ -0,0 +1,235 @@ +return { + ------------------------------ + -- File Management + ------------------------------ + + { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + cmd = "Neotree", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information + }, + opts = { + sources = { "filesystem", "buffers", "git_status", "document_symbols" }, + open_files_do_not_replace_types = { "terminal", "Trouble", "trouble", "qf", "Outline" }, + filesystem = { + bind_to_cwd = false, + follow_current_file = { enabled = true }, + use_libuv_file_watcher = true, + hijack_netrw_behavior = "open_current", + }, + window = { + mappings = { + [""] = "none", + -- ["C"] = "copy", + ["C"] = { + "copy", + config = { + show_path = "absolute", -- "none", "relative", "absolute" + }, + }, + ["R"] = "rename", + ["y"] = function(state) + local node = state.tree:get_node() + -- get relative path + local filepath = node:get_id() + local filename = vim.fn.fnamemodify(filepath, ":.") + -- local filename = node.name + vim.fn.setreg("+", filename) + vim.notify("Copied: " .. filename) + end, + ["Y"] = function(state) + local node = state.tree:get_node() + local filepath = node:get_id() + vim.fn.setreg("+", filepath) + vim.notify("Copied: " .. filepath) + end, + }, + }, + default_component_configs = { + indent = { + with_expanders = true, -- if nil and file nesting is enabled, will enable expanders + expander_collapsed = "", + expander_expanded = "", + expander_highlight = "NeoTreeExpander", + }, + }, + }, + keys = { + { + "E", + function() + vim.cmd("Neotree toggle position=current") + end, + desc = "Toggle NeoTree as Buffer", + }, + { + "e", + function() + vim.cmd("Neotree toggle") + end, + desc = "Toggle NeoTree", + }, + }, + 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, + config = function(_, opts) + local function on_move(data) + Util.lsp.on_rename(data.source, data.destination) + end + + local events = require("neo-tree.events") + opts.event_handlers = opts.event_handlers or {} + vim.list_extend(opts.event_handlers, { + { event = events.FILE_MOVED, handler = on_move }, + { event = events.FILE_RENAMED, handler = on_move }, + }) + require("neo-tree").setup(opts) + vim.api.nvim_create_autocmd("TermClose", { + pattern = "*lazygit", + callback = function() + if package.loaded["neo-tree.sources.git_status"] then + require("neo-tree.sources.git_status").refresh() + end + end, + }) + 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, + -- }, + + +} diff --git a/lua/rayandrew/plugins/general.lua b/lua/rayandrew/plugins/general.lua new file mode 100644 index 0000000..0738d20 --- /dev/null +++ b/lua/rayandrew/plugins/general.lua @@ -0,0 +1,1034 @@ +local load_textobjects = false + +return { + { "folke/lazy.nvim", version = "*" }, + { "nvim-lua/plenary.nvim", lazy = true }, + + { + "dstein64/vim-startuptime", + cmd = "StartupTime", + init = function() + vim.g.startuptime_tries = 10 + 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 + ------------------------------ + + { + "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", + 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", + 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, + }, + + { + "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, + }, +} diff --git a/lua/rayandrew/plugins/lsp.lua b/lua/rayandrew/plugins/lsp.lua new file mode 100644 index 0000000..c0ec96f --- /dev/null +++ b/lua/rayandrew/plugins/lsp.lua @@ -0,0 +1,83 @@ +return { + { + { + 'VonHeikemen/lsp-zero.nvim', + branch = 'v3.x', + lazy = true, + config = false, + init = function() + -- Disable automatic setup, we are doing it manually + vim.g.lsp_zero_extend_cmp = 0 + vim.g.lsp_zero_extend_lspconfig = 0 + end, + }, + { + 'williamboman/mason.nvim', + lazy = false, + config = true, + }, + + -- Autocompletion + { + 'hrsh7th/nvim-cmp', + event = 'InsertEnter', + dependencies = { + {'L3MON4D3/LuaSnip'}, + }, + config = function() + -- Here is where you configure the autocompletion settings. + 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_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(), + }) + }) + end + }, + + -- LSP + { + 'neovim/nvim-lspconfig', + cmd = {'LspInfo', 'LspInstall', 'LspStart'}, + event = {'BufReadPre', 'BufNewFile'}, + dependencies = { + {'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') + 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}) + end) + + 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) + end, + } + }) + end + } + } +} diff --git a/lua/rayandrew/plugins/telescope.lua b/lua/rayandrew/plugins/telescope.lua new file mode 100644 index 0000000..17398ae --- /dev/null +++ b/lua/rayandrew/plugins/telescope.lua @@ -0,0 +1,141 @@ +return { + + -- Telescope + ------------------------------ + { + "nvim-telescope/telescope.nvim", + cmd = "Telescope", + dependencies = { + "nvim-lua/plenary.nvim", + { + "nvim-telescope/telescope-fzf-native.nvim", + -- NOTE: If you are having trouble with this installation, + -- refer to the README for telescope-fzf-native for more instructions. + build = "make", + cond = function() + return vim.fn.executable("make") == 1 + end, + }, + }, + version = false, + opts = { + pickers = { + buffers = { + mappings = { + i = { + [""] = function(prompt_bufnr) + local actions = require("telescope.actions") + actions.delete_buffer(prompt_bufnr) + actions.move_to_top(prompt_bufnr) + end, + [""] = false, + }, + n = { + ["d"] = "delete_buffer", + }, + }, + }, + }, + }, + keys = { + { + "sp", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("live_grep") + fn() + end, + desc = "Find in Files (Grep)", + }, + { + "ps", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("grep_string", { + search = vim.fn.input("Grep > "), + }) + fn() + end, + desc = "Find in Files (Grep)", + }, + { + "bb", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("buffers") + fn() + end, + desc = "List all opened buffers", + }, + { + "fF", + function() + local utils = require("telescope.utils") + local Util = require("rayandrew.util") + local fn = Util.telescope("files", { cwd = utils.buffer_dir() }) + fn() + end, + desc = "Find Files (root dir)", + }, + { + "ff", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("files", { cwd = false }) + fn() + end, + desc = "Find Files (cwd)", + }, + { + "fh", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("files", { cwd = false, hidden = true }) + fn() + end, + desc = "Find Files with Hidden (cwd)", + }, + { + "sm", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("man_pages") + fn() + end, + desc = "Find Manual", + }, + { + "sh", + function() + local Util = require("rayandrew.util") + local fun = Util.telescope("help_tags") + fun() + end, + desc = "Find Help Tags", + }, + { + "/", + function() + -- require("telescope.builtin").current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ + -- winblend = 10, + -- previewer = false, + -- })) + local Util = require("rayandrew.util") + local fn = Util.telescope("current_buffer_fuzzy_find", { + winblend = 10, + previewer = false, + }) + fn() + end, + }, + { + "sd", + function() + local Util = require("rayandrew.util") + local fn = Util.telescope("diagnostics") + fn() + end, + }, + }, + }, +} diff --git a/lua/rayandrew/plugins/theme.lua b/lua/rayandrew/plugins/theme.lua new file mode 100644 index 0000000..2c01ee3 --- /dev/null +++ b/lua/rayandrew/plugins/theme.lua @@ -0,0 +1,23 @@ +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 new file mode 100644 index 0000000..8fdd509 --- /dev/null +++ b/lua/rayandrew/plugins/treesitter.lua @@ -0,0 +1,154 @@ +return { + ------------------------------ + -- TreeSitter + ------------------------------ + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + dependencies = { + { + "nvim-treesitter/nvim-treesitter-textobjects", + init = function() + require("lazy.core.loader").disable_rtp_plugin("nvim-treesitter-textobjects") + load_textobjects = true + end, + }, + + { + "IndianBoy42/tree-sitter-just", + dependencies = "nvim-treesitter/nvim-treesitter", + config = function(_, opts) + require("tree-sitter-just").setup({}) + end, + }, + }, + opts = { + highlight = { enable = true }, + indent = { enable = true }, + ensure_installed = { + "bash", + "c", + "html", + "javascript", + "json", + "latex", + "lua", + "luadoc", + "luap", + "markdown", + "markdown_inline", + "nix", + "python", + "query", + "regex", + "rust", + "tsx", + "typescript", + "vim", + "vimdoc", + "yaml", + }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + scope_incremental = false, + node_decremental = "", + }, + }, + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + ["aa"] = "@parameter.outer", + ["ia"] = "@parameter.inner", + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + }, + }, + move = { + enable = true, + set_jumps = true, + goto_next_start = { + ["]k"] = { query = "@block.outer", desc = "Next block start" }, + ["]f"] = { query = "@function.outer", desc = "Next function start" }, + ["]a"] = { query = "@parameter.inner", desc = "Next parameter start" }, + }, + goto_next_end = { + ["]K"] = { query = "@block.outer", desc = "Next block end" }, + ["]F"] = { query = "@function.outer", desc = "Next function end" }, + ["]A"] = { query = "@parameter.inner", desc = "Next parameter end" }, + }, + goto_previous_start = { + ["[k"] = { query = "@block.outer", desc = "Previous block start" }, + ["[f"] = { query = "@function.outer", desc = "Previous function start" }, + ["[a"] = { query = "@parameter.inner", desc = "Previous parameter start" }, + }, + goto_previous_end = { + ["[K"] = { query = "@block.outer", desc = "Previous block end" }, + ["[F"] = { query = "@function.outer", desc = "Previous function end" }, + ["[A"] = { query = "@parameter.inner", desc = "Previous parameter end" }, + }, + }, + swap = { + enable = true, + swap_next = { + ["a"] = "@parameter.inner", + }, + swap_previous = { + ["A"] = "@parameter.inner", + }, + }, + }, + }, + cmd = { "TSUpdateSync" }, + keys = { + { "", desc = "Increment selection" }, + { "", desc = "Decrement selection", mode = "x" }, + }, + config = function(_, opts) + require("nvim-treesitter.install").compilers = { "gcc", "clang" } + if type(opts.ensure_installed) == "table" then + ---@type table + local added = {} + opts.ensure_installed = vim.tbl_filter(function(lang) + if added[lang] then + return false + end + added[lang] = true + return true + end, opts.ensure_installed) + end + require("nvim-treesitter.configs").setup(opts) + + if load_textobjects then + -- PERF: no need to load the plugin, if we only need its queries for mini.ai + if opts.textobjects then + for _, mod in ipairs({ "move", "select", "swap", "lsp_interop" }) do + if opts.textobjects[mod] and opts.textobjects[mod].enable then + local Loader = require("lazy.core.loader") + Loader.disabled_rtp_plugins["nvim-treesitter-textobjects"] = nil + local plugin = require("lazy.core.config").plugins["nvim-treesitter-textobjects"] + require("lazy.core.loader").source_runtime(plugin.dir, "plugin") + break + end + end + end + end + end, + }, + { + "nvim-treesitter/playground", + }, + { + "nvim-treesitter/nvim-treesitter-context", + opts = { + multiline_threshold = 1, + }, + config = true, + }, +}