local function getWords() return vim.fn.wordcount().words end return { {{- if eq .chezmoi.os "openbsd" }} -- Better `vim.notify()` { "rcarriga/nvim-notify", keys = { { "un", function() require("notify").dismiss({ silent = true, pending = true }) end, desc = "Dismiss all Notifications", }, }, opts = { timeout = 3000, max_height = function() return math.floor(vim.o.lines * 0.75) end, max_width = function() return math.floor(vim.o.columns * 0.75) end, }, }, -- better vim.ui { "stevearc/dressing.nvim", lazy = true, init = function() ---@diagnostic disable-next-line: duplicate-set-field vim.ui.select = function(...) require("lazy").load({ plugins = { "dressing.nvim" } }) return vim.ui.select(...) end ---@diagnostic disable-next-line: duplicate-set-field vim.ui.input = function(...) require("lazy").load({ plugins = { "dressing.nvim" } }) return vim.ui.input(...) end end, }, -- statusline { "nvim-lualine/lualine.nvim", event = "VeryLazy", init = function() vim.g.lualine_laststatus = vim.o.laststatus vim.o.laststatus = 0 end, opts = { options = { theme = 'auto', icons_enabled = true, globalstatus = true, component_separators = "|", disabled_filetypes = { statusline = { "dashboard", "alpha", "starter" } }, }, sections = { lualine_a = { "mode" }, lualine_b = { { "branch", icon = " " }, "diagnostics" }, lualine_c = { "filename" }, lualine_x = { "encoding", { "fileformat", symbols = { unix = " ", dos = " ", mac = " " } }, { "filetype", icon_only = true } }, lualine_y = { "progress" }, lualine_z = { "location" }, }, }, }, -- Active indent guide and indent text objects. When you're browsing -- code, this highlights the current level of indentation, and animates -- the highlighting. { "echasnovski/mini.indentscope", version = false, -- wait till new 0.7.0 release to put it back on semver opts = { -- symbol = "▏", symbol = "│", options = { try_as_border = true }, }, init = function() vim.api.nvim_create_autocmd("FileType", { pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason", "notify", "toggleterm", "lazyterm", }, callback = function() vim.b.miniindentscope_disable = true end, }) end, }, -- Displays a popup with possible key bindings of the command you started typing { "folke/which-key.nvim", opts = function(_, opts) opts.defaults["sn"] = { name = "+noice" } end, }, -- Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu. { "folke/noice.nvim", event = "VeryLazy", opts = { lsp = { override = { ["vim.lsp.util.convert_input_to_markdown_lines"] = true, ["vim.lsp.util.stylize_markdown"] = true, ["cmp.entry.get_documentation"] = true, }, }, routes = { { filter = { event = "msg_show", any = { { find = "%d+L, %d+B" }, { find = "; after #%d+" }, { find = "; before #%d+" }, }, }, view = "mini", }, }, presets = { bottom_search = true, command_palette = true, long_message_to_split = true, inc_rename = true, }, }, -- stylua: ignore keys = { { "", function() require("noice").redirect(vim.fn.getcmdline()) end, mode = "c", desc = "Redirect Cmdline" }, { "snl", function() require("noice").cmd("last") end, desc = "Noice Last Message" }, { "snh", function() require("noice").cmd("history") end, desc = "Noice History" }, { "sna", function() require("noice").cmd("all") end, desc = "Noice All" }, { "snd", function() require("noice").cmd("dismiss") end, desc = "Dismiss All" }, { "", function() if not require("noice.lsp").scroll(4) then return "" end end, silent = true, expr = true, desc = "Scroll forward", mode = { "i", "n", "s" } }, { "", function() if not require("noice.lsp").scroll(-4) then return "" end end, silent = true, expr = true, desc = "Scroll backward", mode = { "i", "n", "s" } }, }, }, -- icons { "nvim-tree/nvim-web-devicons", lazy = true, opts = function() local devicons = require("nvim-web-devicons") local palette = { orange = "#d18616", black = "#586069", bright_black = "#959da5", white = "#d1d5da", bright_white = "#fafbfc", red = "#ea4a5a", bright_red = "#f97583", green = "#34d058", bright_green = "#85e89d", yellow = "#ffea7f", bright_yellow = "#ffea7f", blue = "#2188ff", bright_blue = "#79b8ff", magenta = "#b392f0", bright_magenta = "#b392f0", cyan = "#39c5cf", bright_cyan = "#56d4dd", } devicons.set_icon({ [".zshrc"] = { icon = " ", color = palette.bright_black, name = "Zshrc", }, ["bash"] = { icon = " ", color = palette.bright_black, name = "Bash", }, ["c"] = { icon = " ", color = palette.bright_blue, name = "C", }, ["c++"] = { icon = " ", color = palette.bright_red, name = "CPlusPlus", }, ["cc"] = { icon = " ", color = palette.bright_red, name = "CPlusPlus", }, ["go"] = { icon = " ", color = palette.bright_blue, name = "Go", }, ["js"] = { icon = " ", color = palette.yellow, name = "Js", }, ["lua"] = { icon = " ", color = palette.bright_blue, name = "Lua", }, ["markdown"] = { icon = " ", color = palette.bright_blue, name = "Markdown", }, ["md"] = { icon = " ", color = palette.bright_blue, name = "Md", }, ["mdx"] = { icon = " ", color = palette.bright_blue, name = "Mdx", }, ["php"] = { icon = " ", color = palette.magenta, name = "Php", }, ["pl"] = { icon = " ", color = palette.bright_blue, name = "Pl", }, ["py"] = { icon = " ", color = palette.bright_blue, name = "Py", }, ["pyc"] = { icon = " ", color = palette.bright_blue, name = "Pyc", }, ["pyd"] = { icon = " ", color = palette.bright_blue, name = "Pyd", }, ["pyo"] = { icon = " ", color = palette.bright_blue, name = "Pyo", }, ["rake"] = { icon = " ", color = palette.bright_red, name = "Rake", }, ["rakefile"] = { icon = " ", color = palette.bright_red, name = "Rakefile", }, ["rb"] = { icon = " ", color = palette.bright_red, name = "Rb", }, ["sh"] = { icon = " ", color = palette.bright_black, name = "Sh", }, ["sql"] = { icon = " ", color = palette.bright_black, name = "Sql", }, ["svelte"] = { icon = " ", color = palette.orange, name = "Svelte" }, ["yaml"] = { icon = " ", color = palette.bright_black, name = "Yaml", }, ["yml"] = { icon = " ", color = palette.bright_black, name = "Yml", }, ["zsh"] = { icon = " ", color = palette.bright_black, name = "Zsh", }, ["terminal"] = { icon = " ", color = palette.bright_black, name = "Terminal", }, }) end, }, { "yamatsum/nvim-nonicons", dependencies = { "nvim-tree/nvim-web-devicons" }, lazy = true }, -- ui components { "MunifTanjim/nui.nvim", lazy = true }, {{ else }} -- change lualine { "nvim-lualine/lualine.nvim", event = "VeryLazy", opts = function(_, opts) opts.sections.lualine_b = { { "branch", icon = " " } } end, }, {{ end }} { "RRethy/vim-illuminate", config = function() -- change the highlight style vim.api.nvim_set_hl(0, "IlluminatedWordText", { link = "Visual" }) vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "Visual" }) vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "Visual" }) end, }, { "NvChad/nvim-colorizer.lua", opts = function(_, opts) opts.filetypes = { "html", "css", "scss", "javascript", "typescript", "typescriptreact", "javascriptreact", "lua", } opts.user_default_options = { mode = "background", tailwind = false, -- Enable tailwind colors } end, }, { "nvimdev/dashboard-nvim", event = "VimEnter", opts = function() vim.api.nvim_set_hl(0, "DashboardHeader", { fg = "#79b8ff" }) vim.api.nvim_set_hl(0, "DashboardIcon", { fg = "#39c5cf" }) vim.api.nvim_set_hl(0, "DashboardKey", { fg = "#39c5cf" }) vim.api.nvim_set_hl(0, "DashboardFooter", { fg = "#959da5" }) local logo = [[ _ _ _ _ | | (_) | | | | _ __ ___ ___ ___| |__ _ _ _ ___| |__ __ _ _ __ __| | | '_ ` _ \ / _ \ / _ \ '_ \| | | | / __| '_ \ / _` | '_ \ / _` | | | | | | | (_) | __/ |_) | | |_| \__ \ |_) | (_| | | | | (_| | |_| |_| |_|\___/ \___|_.__/|_|\__,_|___/_.__/ \__,_|_| |_|\__,_| ]] logo = string.rep("\n", 8) .. logo .. "\n\n" local opts = { theme = "doom", hide = { statusline = false, }, config = { header = vim.split(logo, "\n"), center = { {{- if eq .chezmoi.os "openbsd" }} { action = "Telescope find_files", desc = " Find file", icon = " ", key = "f", }, { action = "Telescope oldfiles", desc = " Recent files", icon = " ", key = "r", }, { action = "Telescope live_grep", desc = " Find text", icon = " ", key = "g", }, { action = [[lua require("telescope.builtin").find_files({ cwd = vim.fn.stdpath("config") })]], desc = " Config", icon = " ", key = "c", }, { action = "Telekasten find_notes", desc = " Find notes", icon = " ", key = "n", }, { action = "Lazy", desc = " Lazy", icon = "󰒲 ", key = "l", }, { action = "qa", desc = " Quit", icon = " ", key = "q" }, {{- else }} { action = "lua LazyVim.pick()()", desc = " Find file", icon = " ", key = "f", }, { action = "Telescope oldfiles", desc = " Recent files", icon = " ", key = "r", }, { action = 'lua LazyVim.pick("live_grep")()', desc = " Find text", icon = " ", key = "g", }, { action = "lua LazyVim.pick.config_files()()", desc = " Config", icon = " ", key = "c", }, { action = "Telekasten find_notes", desc = " Find notes", icon = " ", key = "n", }, { action = "Lazy", desc = " Lazy", icon = "󰒲 ", key = "l", }, { action = "qa", desc = " Quit", icon = " ", key = "q" }, {{- end }} }, footer = function() local stats = require("lazy").stats() local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) return { "⚡ Neovim loaded " .. stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms" } end, }, } for _, button in ipairs(opts.config.center) do button.desc = button.desc .. string.rep(" ", 43 - #button.desc) button.key_format = " %s" end -- close Lazy and re-open when the dashboard is ready if vim.o.filetype == "lazy" then vim.cmd.close() vim.api.nvim_create_autocmd("User", { pattern = "DashboardLoaded", callback = function() require("lazy").show() end, }) end return opts end, }, { "stevearc/oil.nvim", opts = {}, config = function() require("oil").setup({ default_file_explorer = true, delete_to_trash = true, skip_confirm_for_simple_edits = true, view_options = { show_hidden = true, natural_order = true, is_always_hidden = function(name, _) return name == ".." or name == ".git" end, }, win_options = { wrap = true, }, }) end, }, }