-- Prepend mise shims to PATH so Mason/LSP can find node, go, etc. vim.env.PATH = vim.env.HOME .. '/.local/share/mise/shims:' .. vim.env.PATH -- Set as the leader key -- See `:help mapleader` -- Must happen before plugins are loaded. vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- Set to true if you have a Nerd Font installed and selected in the terminal vim.g.have_nerd_font = false -- [[ Setting options ]] -- See `:help vim.o` -- Make line numbers default vim.o.number = true vim.o.relativenumber = true -- Enable mouse mode, can be useful for resizing splits for example! vim.o.mouse = 'a' -- Don't show the mode, since it's already in the status line vim.o.showmode = false -- Sync clipboard between OS and Neovim. -- Schedule the setting after `UiEnter` because it can increase startup-time. -- Remove this option if you want your OS clipboard to remain independent. -- See `:help 'clipboard'` vim.schedule(function() vim.o.clipboard = 'unnamedplus' end) -- Default to 2-space indentation unless overridden by filetype/plugins vim.o.tabstop = 2 vim.o.shiftwidth = 2 vim.o.softtabstop = 2 vim.o.expandtab = true vim.filetype.add { extension = { mdx = 'mdx', }, filename = { ['compose.yaml'] = 'yaml.docker-compose', ['compose.yml'] = 'yaml.docker-compose', ['docker-compose.yaml'] = 'yaml.docker-compose', ['docker-compose.yml'] = 'yaml.docker-compose', ['.gitlab-ci.yaml'] = 'yaml.gitlab', ['.gitlab-ci.yml'] = 'yaml.gitlab', }, pattern = { ['.*/templates/.*%.yaml'] = 'helm', ['.*/templates/.*%.yml'] = 'helm', ['.*/values.*%.yaml'] = 'yaml.helm-values', ['.*/values.*%.yml'] = 'yaml.helm-values', }, } -- Enable undo/redo changes even after closing and reopening a file vim.o.undofile = true -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term vim.o.ignorecase = true vim.o.smartcase = true -- Keep signcolumn on by default vim.o.signcolumn = 'yes' -- Decrease update time vim.o.updatetime = 250 -- Decrease mapped sequence wait time vim.o.timeoutlen = 300 -- Configure how new splits should be opened vim.o.splitright = true vim.o.splitbelow = true -- Sets how neovim will display certain whitespace characters in the editor. -- See `:help 'list'` -- and `:help 'listchars'` -- -- Notice listchars is set using `vim.opt` instead of `vim.o`. -- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables. -- See `:help lua-options` -- and `:help lua-guide-options` vim.o.list = true vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } -- Preview substitutions live, as you type! vim.o.inccommand = 'split' -- Show which line your cursor is on vim.o.cursorline = true -- Minimal number of screen lines to keep above and below the cursor. vim.o.scrolloff = 10 -- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), -- instead raise a dialog asking if you wish to save the current file(s) -- See `:help 'confirm'` vim.o.confirm = true -- Modern UI defaults and safer project-local behavior. vim.o.winborder = 'rounded' vim.o.pumborder = 'rounded' vim.o.pummaxwidth = 80 vim.o.smoothscroll = true vim.o.modeline = false vim.o.jumpoptions = 'clean,view' -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` -- Clear highlights on search when pressing in normal mode -- See `:help hlsearch` vim.keymap.set('n', '', 'nohlsearch') -- Diagnostic Config & Keymaps -- See :help vim.diagnostic.Opts local function diagnostic_on_jump(diagnostic) if diagnostic then vim.diagnostic.open_float { scope = 'cursor', focus = false } end end vim.diagnostic.config { update_in_insert = false, severity_sort = true, float = { border = 'rounded', source = 'if_many' }, underline = { severity = vim.diagnostic.severity.ERROR }, signs = vim.g.have_nerd_font and { text = { [vim.diagnostic.severity.ERROR] = '󰅚 ', [vim.diagnostic.severity.WARN] = '󰀪 ', [vim.diagnostic.severity.INFO] = '󰋽 ', [vim.diagnostic.severity.HINT] = '󰌶 ', }, } or {}, virtual_text = { source = 'if_many', spacing = 2, severity = { min = vim.diagnostic.severity.WARN }, format = function(diagnostic) if diagnostic.severity == vim.diagnostic.severity.WARN then return 'W: ' .. diagnostic.message end if diagnostic.severity == vim.diagnostic.severity.ERROR then return 'E: ' .. diagnostic.message end return nil end, }, virtual_lines = false, jump = { on_jump = diagnostic_on_jump }, } vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) vim.keymap.set('n', '[d', function() vim.diagnostic.jump { count = -1 } end, { desc = 'Go to previous [D]iagnostic' }) vim.keymap.set('n', ']d', function() vim.diagnostic.jump { count = 1 } end, { desc = 'Go to next [D]iagnostic' }) vim.keymap.set('n', 'de', vim.diagnostic.open_float, { desc = 'Show [D]iagnostic [E]rror details' }) vim.keymap.set('n', 'dy', function() local line = vim.api.nvim_win_get_cursor(0)[1] local diagnostics = vim.diagnostic.get(0, { lnum = line - 1 }) if #diagnostics == 0 then vim.notify('No diagnostics on this line', vim.log.levels.INFO) return end local file_path = vim.api.nvim_buf_get_name(0) local root = vim.fs.root(file_path, { '.git' }) or vim.fn.getcwd() local prefix = root:match '/$' and root or (root .. '/') local rel = file_path:sub(1, #prefix) == prefix and file_path:sub(#prefix + 1) or file_path local parts = {} for _, d in ipairs(diagnostics) do table.insert(parts, string.format('@%s:%d: %s', rel, d.lnum + 1, d.message)) end local result = table.concat(parts, '\n') vim.fn.setreg('"', result) pcall(vim.fn.setreg, '+', result) vim.notify('Yanked ' .. #diagnostics .. ' diagnostic(s)', vim.log.levels.INFO) end, { desc = '[D]iagnostic [Y]ank to clipboard' }) -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier -- for people to discover. Otherwise, you normally need to press , which -- is not what someone will guess without a bit more experience. -- -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping -- or just use to exit terminal mode vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) -- TIP: Disable arrow keys in normal mode -- vim.keymap.set('n', '', 'echo "Use h to move!!"') -- vim.keymap.set('n', '', 'echo "Use l to move!!"') -- vim.keymap.set('n', '', 'echo "Use k to move!!"') -- vim.keymap.set('n', '', 'echo "Use j to move!!"') -- Keybinds to make split navigation easier. -- NOTE: are managed by vim-tmux-navigator in this config. -- -- See `:help wincmd` for a list of all window commands vim.keymap.set('n', 'wh', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', 'wl', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', 'wj', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', 'wk', '', { desc = 'Move focus to the upper window' }) -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) -- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) -- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) -- [[ Basic Autocommands ]] -- See `:help lua-guide-autocommands` -- Highlight when yanking (copying) text -- Try it with `yap` in normal mode -- See `:help vim.hl.on_yank()` vim.api.nvim_create_autocmd('TextYankPost', { desc = 'Highlight when yanking (copying) text', group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }), callback = function() vim.hl.on_yank() end, }) local path_on_save_group = vim.api.nvim_create_augroup('kickstart-create-path-on-save', { clear = true }) -- Only create paths inside these roots (defaults to current working directory). -- Add more roots as needed, e.g. vim.fn.expand '~/notes' local path_create_roots = { vim.fn.getcwd(), } local is_in_allowed_root = function(path) local abs_path = vim.fn.fnamemodify(path, ':p') for _, root in ipairs(path_create_roots) do local abs_root = vim.fn.fnamemodify(root, ':p') if abs_path:sub(1, #abs_root) == abs_root then return true end end return false end local ensure_owner_rwx = function(path) local perms = vim.fn.getfperm(path) if perms ~= '' and perms:sub(1, 3) ~= 'rwx' then vim.fn.setfperm(path, 'rwx' .. perms:sub(4)) end end vim.api.nvim_create_autocmd('BufWritePre', { desc = 'Create missing parent directories on save', group = path_on_save_group, callback = function(args) if vim.bo[args.buf].buftype ~= '' then return end local file_path = vim.api.nvim_buf_get_name(args.buf) if file_path == '' or file_path:match '^%w+://' then return end local uv = vim.uv or vim.loop local abs_path = vim.fn.fnamemodify(file_path, ':p') if not is_in_allowed_root(abs_path) then return end local parent = vim.fn.fnamemodify(abs_path, ':h') if uv.fs_stat(parent) == nil then vim.fn.mkdir(parent, 'p', '0700') end ensure_owner_rwx(parent) end, }) -- [[ Install `lazy.nvim` plugin manager ]] -- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' if not (vim.uv or vim.loop).fs_stat(lazypath) then local lazyrepo = 'https://github.com/folke/lazy.nvim.git' local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath } if vim.v.shell_error ~= 0 then error('Error cloning lazy.nvim:\n' .. out) end end ---@type vim.Option local rtp = vim.opt.rtp rtp:prepend(lazypath) local treesitter_parsers = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc', } -- [[ Configure and install plugins ]] require('lazy').setup({ { 'NMAC427/guess-indent.nvim', opts = {} }, { 'folke/which-key.nvim', event = 'VimEnter', ---@module 'which-key' ---@type wk.Opts ---@diagnostic disable-next-line: missing-fields opts = { delay = 0, icons = { mappings = vim.g.have_nerd_font }, spec = { { 'a', group = 'Harpoon [A]dd' }, { 'c', group = '[C]Make' }, { 'd', group = '[D]iagnostics' }, { 'e', group = '[E]xplorer' }, { 'g', group = '[G]oto' }, { 'G', group = '[G]it' }, { 'm', group = '[M]arkdown' }, { 'n', group = '[N]eotest' }, { 's', group = '[S]earch' }, { 't', group = '[T]oggle' }, { 'w', group = '[W]indow' }, { 'x', group = 'Trouble' }, { 'j', group = '[J]ump' }, { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } }, { 'gr', group = 'LSP Actions', mode = { 'n' } }, }, }, }, { -- Fuzzy Finder (files, lsp, etc) 'nvim-telescope/telescope.nvim', enabled = true, event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim', { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make', cond = function() return vim.fn.executable 'make' == 1 end, }, { 'nvim-telescope/telescope-ui-select.nvim' }, { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, }, config = function() require('telescope').setup { extensions = { ['ui-select'] = { require('telescope.themes').get_dropdown() }, }, } pcall(require('telescope').load_extension, 'fzf') pcall(require('telescope').load_extension, 'ui-select') local builtin = require 'telescope.builtin' vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) vim.keymap.set({ 'n', 'v' }, 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' }) vim.keymap.set('n', 's.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) vim.keymap.set('n', 'sc', builtin.commands, { desc = '[S]earch [C]ommands' }) vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' }) vim.keymap.set( 'n', '/', function() builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { winblend = 10, previewer = false, }) end, { desc = '[/] Fuzzily search in current buffer' } ) vim.keymap.set( 'n', 's/', function() builtin.live_grep { grep_open_files = true, prompt_title = 'Live Grep in Open Files', } end, { desc = '[S]earch [/] in Open Files' } ) vim.keymap.set('n', 'sn', function() builtin.find_files { cwd = vim.fn.stdpath 'config' } end, { desc = '[S]earch [N]eovim files' }) end, }, { 'neovim/nvim-lspconfig', dependencies = { { 'mason-org/mason.nvim', ---@module 'mason.settings' ---@type MasonSettings ---@diagnostic disable-next-line: missing-fields opts = {}, }, 'mason-org/mason-lspconfig.nvim', 'WhoIsSethDaniel/mason-tool-installer.nvim', { 'j-hui/fidget.nvim', opts = {} }, }, config = function() vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), callback = function(event) local map = function(keys, func, desc, mode) mode = mode or 'n' vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) end local builtin = require 'telescope.builtin' local client = vim.lsp.get_client_by_id(event.data.client_id) map('grn', vim.lsp.buf.rename, '[R]e[n]ame') map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' }) map('grr', builtin.lsp_references, '[G]oto [R]eferences') map('gr', builtin.lsp_references, '[G]oto [R]eferences') map('gri', builtin.lsp_implementations, '[G]oto [I]mplementation') map('gi', builtin.lsp_implementations, '[G]oto [I]mplementation') map('grd', builtin.lsp_definitions, '[G]oto [D]efinition') map('gd', builtin.lsp_definitions, '[G]oto [D]efinition') map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') map('gO', builtin.lsp_document_symbols, 'Open Document Symbols') map('gW', builtin.lsp_dynamic_workspace_symbols, 'Open Workspace Symbols') map('grt', builtin.lsp_type_definitions, '[G]oto [T]ype Definition') map('gt', builtin.lsp_type_definitions, '[G]oto [T]ype Definition') if client and client:supports_method('textDocument/documentHighlight', event.buf) then local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { buffer = event.buf, group = highlight_augroup, callback = vim.lsp.buf.document_highlight, }) vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { buffer = event.buf, group = highlight_augroup, callback = vim.lsp.buf.clear_references, }) vim.api.nvim_create_autocmd('LspDetach', { group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), callback = function(event2) vim.lsp.buf.clear_references() vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } end, }) end if client and client:supports_method('textDocument/inlayHint', event.buf) then map('th', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) end, '[T]oggle Inlay [H]ints') end if client and client:supports_method('textDocument/codeLens', event.buf) then vim.lsp.codelens.enable(true, { bufnr = event.buf }) end if client and client:supports_method('textDocument/linkedEditingRange', event.buf) then vim.lsp.linked_editing_range.enable(true, { client_id = client.id }) end end, }) local vue_language_server_path = vim.fn.stdpath 'data' .. '/mason/packages/vue-language-server/node_modules/@vue/language-server' local vue_typescript_plugin = { name = '@vue/typescript-plugin', location = vue_language_server_path, languages = { 'vue' }, configNamespace = 'typescript', } local has_go = vim.fn.executable 'go' == 1 local servers = { -- Languages clangd = {}, basedpyright = { settings = { basedpyright = { analysis = { typeCheckingMode = 'standard', diagnosticMode = 'openFilesOnly', }, }, }, }, ruff = {}, rust_analyzer = {}, bashls = {}, awk_ls = {}, cssls = {}, html = {}, jsonls = {}, yamlls = { settings = { yaml = { schemas = { ['https://raw.githubusercontent.com/yannh/kubernetes-json-schema/refs/heads/master/v1.32.1-standalone-strict/all.json'] = { '*.k8s.yaml', 'k8s/**/*.yaml', 'manifests/**/*.yaml', 'kubernetes/**/*.yaml', }, ['https://json.schemastore.org/chart'] = 'Chart.yaml', ['https://json.schemastore.org/helmfile.json'] = 'helmfile.yaml', ['https://json.schemastore.org/kustomization.json'] = 'kustomization.yaml', }, }, }, }, taplo = {}, elixirls = {}, gh_actions_ls = {}, lua_ls = { settings = { Lua = { completion = { callSnippet = 'Replace', }, }, }, }, eslint = {}, astro = {}, vue_ls = {}, helm_ls = {}, ts_ls = { filetypes = { 'vue' }, init_options = { plugins = { vue_typescript_plugin }, }, }, tailwindcss = {}, docker_language_server = {}, docker_compose_language_service = {}, marksman = {}, postgres_lsp = {}, neocmake = {}, buf_ls = {}, } if has_go then servers.gopls = { settings = { gopls = { analyses = { unusedparams = true, shadow = true, }, staticcheck = true, gofumpt = true, }, }, } end if vim.fn.executable 'jq-lsp' == 1 then servers.jqls = {} end servers.marksman.filetypes = { 'markdown', 'mdx' } servers.tailwindcss.filetypes = { 'astro', 'css', 'html', 'javascript', 'javascriptreact', 'less', 'markdown', 'mdx', 'sass', 'scss', 'svelte', 'typescript', 'typescriptreact', 'vue', } ---@type MasonLspconfigSettings ---@diagnostic disable-next-line: missing-fields require('mason-lspconfig').setup { automatic_enable = vim.tbl_keys(servers or {}), } local ensure_installed = vim.tbl_filter(function(server_name) return server_name ~= 'gopls' and server_name ~= 'jqls' end, vim.tbl_keys(servers or {})) vim.list_extend(ensure_installed, { 'stylua', 'markdownlint', 'prettierd', 'prettier', 'clang-format', 'hadolint', 'yamllint', 'js-debug-adapter', 'codelldb', }) require('mason-tool-installer').setup { ensure_installed = ensure_installed } for server_name, config in pairs(servers) do vim.lsp.config(server_name, config) end end, }, { -- Autoformat 'stevearc/conform.nvim', event = { 'BufWritePre' }, cmd = { 'ConformInfo' }, keys = { { 'f', function() require('conform').format { async = true, lsp_format = 'fallback' } end, mode = '', desc = '[F]ormat buffer', }, }, ---@module 'conform' ---@type conform.setupOpts opts = { notify_on_error = false, format_on_save = function(bufnr) local disable_filetypes = { c = true, cpp = true } if disable_filetypes[vim.bo[bufnr].filetype] then return nil else return { timeout_ms = 500, lsp_format = 'fallback', } end end, formatters_by_ft = { lua = { 'stylua' }, javascript = { 'prettierd', 'prettier', stop_after_first = true }, javascriptreact = { 'prettierd', 'prettier', stop_after_first = true }, typescript = { 'prettierd', 'prettier', stop_after_first = true }, typescriptreact = { 'prettierd', 'prettier', stop_after_first = true }, json = { 'prettierd', 'prettier', stop_after_first = true }, jsonc = { 'prettierd', 'prettier', stop_after_first = true }, yaml = { 'prettierd', 'prettier', stop_after_first = true }, c = { 'clang_format' }, cpp = { 'clang_format' }, }, }, }, { -- Autocompletion 'saghen/blink.cmp', event = 'VimEnter', version = '1.*', dependencies = { { 'L3MON4D3/LuaSnip', version = '2.*', build = (function() if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then return end return 'make install_jsregexp' end)(), opts = {}, }, }, ---@module 'blink.cmp' ---@type blink.cmp.Config opts = { keymap = { preset = 'default', }, appearance = { nerd_font_variant = 'mono', }, completion = { documentation = { auto_show = false, auto_show_delay_ms = 500 }, }, sources = { default = { 'lsp', 'path', 'snippets' }, }, snippets = { preset = 'luasnip' }, fuzzy = { implementation = 'lua' }, signature = { enabled = true }, }, }, { 'folke/tokyonight.nvim', priority = 1000, config = function() ---@diagnostic disable-next-line: missing-fields require('tokyonight').setup { styles = { comments = { italic = false }, -- Disable italics in comments }, } vim.cmd.colorscheme 'tokyonight-night' end, }, -- Highlight todo, notes, etc in comments { 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, ---@module 'todo-comments' ---@type TodoOptions ---@diagnostic disable-next-line: missing-fields opts = { signs = false }, }, { -- Collection of various small independent plugins/modules 'nvim-mini/mini.nvim', config = function() require('mini.ai').setup { n_lines = 500 } require('mini.surround').setup() local bufremove = require 'mini.bufremove' bufremove.setup() vim.keymap.set('n', 'bd', function() bufremove.delete(0, false) end, { desc = '[B]uffer [D]elete' }) local statusline = require 'mini.statusline' statusline.setup { use_icons = vim.g.have_nerd_font } ---@diagnostic disable-next-line: duplicate-set-field statusline.section_location = function() return '%2l:%-2v' end end, }, { -- Highlight, edit, and navigate code 'nvim-treesitter/nvim-treesitter', branch = 'main', lazy = false, build = function() if vim.fn.executable 'tree-sitter' ~= 1 then vim.notify('nvim-treesitter: tree-sitter CLI is required to install parsers', vim.log.levels.WARN) return end local ok, treesitter = pcall(require, 'nvim-treesitter') if ok then treesitter.install(treesitter_parsers, { summary = true }):wait(300000) end end, config = function() local treesitter = require 'nvim-treesitter' treesitter.setup() vim.api.nvim_create_user_command('TSInstallConfigured', function() if vim.fn.executable 'tree-sitter' ~= 1 then vim.notify('nvim-treesitter: install tree-sitter CLI first', vim.log.levels.ERROR) return end treesitter.install(treesitter_parsers, { summary = true }):raise_on_error() end, { desc = 'Install configured Treesitter parsers' }) vim.api.nvim_create_autocmd('FileType', { group = vim.api.nvim_create_augroup('kickstart-treesitter', { clear = true }), callback = function() pcall(vim.treesitter.start) end, }) end, }, { import = 'custom.plugins' }, }, { ---@diagnostic disable-line: missing-fields rocks = { enabled = false }, ui = { -- If you are using a Nerd Font: set icons to an empty table which will use the -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table icons = vim.g.have_nerd_font and {} or { cmd = '⌘', config = '🛠', event = '📅', ft = '📂', init = '⚙', keys = '🗝', plugin = '🔌', runtime = '💻', require = '🌙', source = '📄', start = '🚀', task = '📌', lazy = '💤 ', }, }, }) -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et