require("lz.n").load({ { "theme-loader", event = "VimEnter", load = function() local settings = require("nix-info").settings local theme_code = settings.themeSetup local func, err = loadstring(theme_code) if func then func() else print("Error loading theme code: " .. err) end end, }, { "lualine.nvim", event = "VimEnter", after = function() local filename = { "filename", path = 1, symbols = { modified = "●", readonly = "", unnamed = "[No Name]", }, } require("lualine").setup({ options = { icons_enabled = true, globalstatus = false, component_separators = "", section_separators = "", theme = "kanagawa", }, sections = { lualine_a = { "mode" }, lualine_b = { "branch", "diff", "diagnostics" }, lualine_c = { filename }, lualine_x = { "lsp_status" }, lualine_y = { "progress" }, lualine_z = { "location" }, }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = { filename }, lualine_x = {}, lualine_y = {}, lualine_z = {}, }, }) end, }, { "bufferline.nvim", event = "VimEnter", before = function() require("lz.n").trigger_load("mini.nvim") end, after = function() require("bufferline").setup({ options = { mode = "buffers", numbers = "none", diagnostics = "nvim_lsp", diagnostics_indicator = function(count, level) local icon = level:match("error") and " " or level:match("warning") and " " or " " return " " .. icon .. count end, always_show_bufferline = true, show_buffer_close_icons = false, show_close_icon = false, separator_style = "thin", sort_by = "insert_after_current", offsets = { { filetype = "minifiles", text = "Files", separator = true, }, }, }, }) vim.keymap.set("n", "bn", "BufferLineCycleNext", { desc = "[B]uffer [N]ext" }) vim.keymap.set("n", "bp", "BufferLineCyclePrev", { desc = "[B]uffer [P]revious" }) vim.keymap.set("n", "bb", "BufferLinePick", { desc = "[B]uffer [B]rowse" }) vim.keymap.set("n", "bd", "bdelete", { desc = "[B]uffer [D]elete" }) end, }, { "gitsigns.nvim", event = { "BufReadPre", "BufNewFile" }, after = function() require("gitsigns").setup({ signs = { add = { text = "│" }, change = { text = "│" }, delete = { text = "_" }, topdelete = { text = "‾" }, changedelete = { text = "~" }, untracked = { text = "┆" }, }, signs_staged_enable = true, on_attach = function(bufnr) local gs = package.loaded.gitsigns local map = function(mode, lhs, rhs, desc, opts) opts = opts or {} opts.buffer = bufnr opts.desc = desc vim.keymap.set(mode, lhs, rhs, opts) end map("n", "]h", function() if vim.wo.diff then return "]h" end vim.schedule(function() gs.nav_hunk("next") end) return "" end, "Next git hunk", { expr = true }) map("n", "[h", function() if vim.wo.diff then return "[h" end vim.schedule(function() gs.nav_hunk("prev") end) return "" end, "Previous git hunk", { expr = true }) map("n", "hp", gs.preview_hunk, "Git [H]unk [P]review") map("n", "hs", gs.stage_hunk, "Git [H]unk [S]tage") map("n", "hr", gs.reset_hunk, "Git [H]unk [R]eset") map("n", "hu", gs.undo_stage_hunk, "Git [H]unk [U]ndo stage") map("n", "hS", gs.stage_buffer, "Git [H]unk [S]tage buffer") map("n", "hR", gs.reset_buffer, "Git [H]unk [R]eset buffer") map("v", "hs", function() gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, "Git [H]unk [S]tage") map("v", "hr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, "Git [H]unk [R]eset") end, }) end, }, { "zen-mode.nvim", cmd = "ZenMode", after = function() require("zen-mode").setup({ window = { options = { linebreak = true, }, }, }) end, }, { "which-key.nvim", event = "VimEnter", before = function() require("lz.n").trigger_load("mini.nvim") end, after = function() require("which-key").setup({ preset = "modern", delay = 200, icons = { mappings = true, keys = {}, }, spec = { { "b", group = "[B]uffer" }, { "s", group = "[S]earch" }, { "t", group = "[T]oggle" }, { "h", group = "Git [H]unk", mode = { "n", "v" } }, }, }) end, }, })