local colorschemeName = nixCats('colorscheme') if not require('nixCatsUtils').isNixCats then colorschemeName = 'gruvbox' end -- Could I lazy load on colorscheme with lze? -- sure. But I was going to call vim.cmd.colorscheme() during startup anyway -- this is just an example, feel free to do a better job! vim.cmd.colorscheme(colorschemeName) local ok, notify = pcall(require, "notify") if ok then notify.setup({ on_open = function(win) vim.api.nvim_win_set_config(win, { focusable = false }) end, }) vim.notify = notify vim.keymap.set("n", "", function() notify.dismiss({ silent = true, }) end, { desc = "dismiss notify popup and clear hlsearch" }) end -- NOTE: you can check if you included the category with the thing wherever you want. if nixCats('always') then -- I didnt want to bother with lazy loading this. -- I could put it in opt and put it in a spec anyway -- and then not set any handlers and it would load at startup, -- but why... I guess I could make it load -- after the other lze definitions in the next call using priority value? -- didnt seem necessary. vim.g.loaded_netrwPlugin = 1 require("oil").setup({ default_file_explorer = true, view_options = { show_hidden = true }, columns = { "icon", "permissions", "size", -- "mtime", }, keymaps = { ["g?"] = "actions.show_help", [""] = "actions.select", [""] = "actions.select_vsplit", [""] = "actions.select_split", [""] = "actions.select_tab", [""] = "actions.preview", [""] = "actions.close", [""] = "actions.refresh", ["-"] = "actions.parent", ["_"] = "actions.open_cwd", ["`"] = "actions.cd", ["~"] = "actions.tcd", ["gs"] = "actions.change_sort", ["gx"] = "actions.open_external", ["g."] = "actions.toggle_hidden", ["g\\"] = "actions.toggle_trash", }, }) vim.keymap.set("n", "-", "Oil", { noremap = true, desc = 'Open Parent Directory' }) vim.keymap.set("n", "-", "Oil .", { noremap = true, desc = 'Open nvim root directory' }) end require('lze').load { { import = "myLuaConf.plugins.telescope", }, { import = "myLuaConf.plugins.treesitter", }, { import = "myLuaConf.plugins.completion", }, { "markdown-preview.nvim", -- NOTE: for_cat is a custom handler that just sets enabled value for us, -- based on result of nixCats('cat.name') and allows us to set a different default if we wish -- it is defined in luaUtils template in lua/nixCatsUtils/lzUtils.lua -- you could replace this with enabled = nixCats('cat.name') == true -- if you didnt care to set a different default for when not using nix than the default you already set for_cat = 'markdown', cmd = { "MarkdownPreview", "MarkdownPreviewStop", "MarkdownPreviewToggle", }, ft = "markdown", keys = { { "mp", "MarkdownPreview ", mode = { "n" }, noremap = true, desc = "markdown preview" }, { "ms", "MarkdownPreviewStop ", mode = { "n" }, noremap = true, desc = "markdown preview stop" }, { "mt", "MarkdownPreviewToggle ", mode = { "n" }, noremap = true, desc = "markdown preview toggle" }, }, before = function(plugin) vim.g.mkdp_auto_close = 0 end, }, { "leap.nvim", for_cat = 'always', event = "DeferredUIEnter", after = function(plugin) require('leap').set_default_mappings() end, }, { "nvim-surround", for_cat = 'always', event = "DeferredUIEnter", -- keys = "", after = function(plugin) require('nvim-surround').setup() end, }, { "marks.nvim", for_cat = "always", after = function(plugin) require('marks').setup({}) end }, { "vim-startuptime", for_cat = 'extra', cmd = { "StartupTime" }, before = function(_) vim.g.startuptime_event_width = 0 vim.g.startuptime_tries = 10 vim.g.startuptime_exe_path = nixCats.packageBinPath end, }, { "fidget.nvim", for_cat = 'always', event = "DeferredUIEnter", -- keys = "", after = function(plugin) require('fidget').setup({}) end, }, { "toggleterm.nvim", for_cat = "always", after = function(plugin) require("toggleterm").setup({ direction = "horizontal", insert_mappings = false, open_mapping = [[]], terminal_mappings = false, }) local Terminal = require("toggleterm.terminal").Terminal Floatingterm = Terminal:new({ hidden = true, direction = "float", }) vim.keymap.set( "n", "s", function() Floatingterm:toggle() end, { desc = "toggle [S]cratch terminal", } ) end }, { "lualine.nvim", for_cat = 'always', -- cmd = { "" }, event = "DeferredUIEnter", -- ft = "", -- keys = "", -- colorscheme = "", after = function(plugin) require('lualine').setup({ options = { alwaysDivideMiddle = true, icons_enabled = true, component_separators = { left = '', right = '' }, section_separators = { left = '', right = '' }, }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = { "filename" }, lualine_x = { "filetype" }, lualine_y = {}, lualine_z = {}, }, sections = { lualine_a = { "mode" }, lualine_b = { "branch", "diff", "diagnostics" }, lualine_c = { { "filename", path = 1 } }, lualine_x = { "encoding", "fileformat", "filetype" }, lualine_y = { "progress" }, lualine_z = { "location" }, }, tabline = { lualine_a = { { "buffers", mode = 4 } }, lualine_b = {}, lualine_c = {}, lualine_x = {}, lualine_y = {}, lualine_z = { { "tabs", mode = 2 } } }, }) end, }, { "gitsigns.nvim", for_cat = 'always', event = "DeferredUIEnter", -- cmd = { "" }, -- ft = "", -- keys = "", -- colorscheme = "", after = function(plugin) require('gitsigns').setup({ -- See `:help gitsigns.txt` signs = { add = { text = '+' }, change = { text = '~' }, delete = { text = '_' }, topdelete = { text = '‾' }, changedelete = { text = '~' }, }, on_attach = function(bufnr) local gs = package.loaded.gitsigns local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end -- Navigation map({ 'n', 'v' }, ']c', function() if vim.wo.diff then return ']c' end vim.schedule(function() gs.next_hunk() end) return '' end, { expr = true, desc = 'Jump to next hunk' }) map({ 'n', 'v' }, '[c', function() if vim.wo.diff then return '[c' end vim.schedule(function() gs.prev_hunk() end) return '' end, { expr = true, desc = 'Jump to previous hunk' }) -- Actions -- visual mode map('v', 'hs', function() gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'stage git hunk' }) map('v', 'hr', function() gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'reset git hunk' }) -- normal mode map('n', 'gs', gs.stage_hunk, { desc = 'git stage hunk' }) map('n', 'gr', gs.reset_hunk, { desc = 'git reset hunk' }) map('n', 'gS', gs.stage_buffer, { desc = 'git Stage buffer' }) map('n', 'gu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) map('n', 'gR', gs.reset_buffer, { desc = 'git Reset buffer' }) map('n', 'gp', gs.preview_hunk, { desc = 'preview git hunk' }) map('n', 'gb', function() gs.blame_line { full = false } end, { desc = 'git blame line' }) map('n', 'gd', gs.diffthis, { desc = 'git diff against index' }) map('n', 'gD', function() gs.diffthis '~' end, { desc = 'git diff against last commit' }) -- Toggles map('n', 'gtb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) map('n', 'gtd', gs.toggle_deleted, { desc = 'toggle git show deleted' }) -- Text object map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) end, }) vim.cmd([[hi GitSignsAdd guifg=#04de21]]) vim.cmd([[hi GitSignsChange guifg=#83fce6]]) vim.cmd([[hi GitSignsDelete guifg=#fa2525]]) end, }, { "which-key.nvim", for_cat = 'always', after = function(plugin) require('which-key').setup({ }) require('which-key').add { { "g", group = "[g]it" }, { "gt", group = "[t]oggle" }, { "m", group = "[m]arkdown" }, { "f", group = "[f]ind" }, { "t", group = "[t]ree" }, { "c", group = "[c]heck" }, { "l", group = "[l]sp" }, { "lw", group = "[l]sp [w]orkspace" }, } end, }, { "nvim-tree.lua", for_cat = "tree", keys = { { "t", "NvimTreeToggle", desc = "Toggle file tree", }, }, after = function(plugin) require("nvim-tree").setup() end }, { -- TODO: Replace toggle term and nvim-tree with snacks equivilants? -- Potentially checkout the lazygit module. Might even be able to replace -- telescope? -- if you do replace telescope, the picker module has a *ton* of interesting pickers, such as an undotree. "snacks.nvim", for_cat = "always", priority = 10, after = function() local Snacks = require("snacks") Snacks.setup({ input = {}, image = {}, notifier = {}, scroll = {}, picker = { enabled = true, ui_select = true, }, terminal = {}, indent = { animate = { enabled = true }, scope = { enabled = true }, chunk = { enabled = true }, }, }) -- setup rename autocmds local prev = { new_name = "", old_name = "" } -- Prevents duplicate events vim.api.nvim_create_autocmd("User", { pattern = "NvimTreeSetup", callback = function() local events = require("nvim-tree.api").events events.subscribe(events.Event.NodeRenamed, function(data) if prev.new_name ~= data.new_name or prev.old_name ~= data.old_name then data = data Snacks.rename.on_rename_file(data.old_name, data.new_name) end end) end, }) vim.api.nvim_create_autocmd("User", { pattern = "OilActionsPost", callback = function(event) if event.data.actions.type == "move" then Snacks.rename.on_rename_file(event.data.actions.src_url, event.data.actions.dest_url) end end, }) end }, }