-- NOTE: If you experience any errors while trying to install kickstart, run `:checkhealth` for more info -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- Set to true if you have a Nerd Font installed vim.g.have_nerd_font = true -- [[ Setting options ]] -- See `:help vim.opt` -- Make line numbers default vim.opt.number = true vim.opt.relativenumber = true vim.opt.tabstop = 4 vim.opt.shiftwidth = 4 vim.opt.expandtab = true vim.opt.laststatus = 3 -- Enable mouse mode, can be useful for resizing splits for example! vim.opt.mouse = 'a' -- Don't show the mode, since it's already in status line vim.opt.showmode = false vim.opt.swapfile = false -- Sync clipboard between OS and Neovim. vim.schedule(function() vim.opt.clipboard = 'unnamedplus' end) -- Enable break indent vim.opt.breakindent = true -- Save undo history vim.opt.undofile = true -- Case-insensitive searching UNLESS \C or capital in search vim.opt.ignorecase = true vim.opt.smartcase = true -- Keep signcolumn on by default vim.opt.signcolumn = 'yes' -- Decrease update time vim.opt.updatetime = 250 vim.opt.timeoutlen = 300 -- Configure how new splits should be opened vim.opt.splitright = true vim.opt.splitbelow = true -- Sets how neovim will display certain whitespace in the editor. -- See `:help 'list'` -- and `:help 'listchars'` vim.opt.list = true vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } -- Preview substitutions live, as you type! vim.opt.inccommand = 'split' -- Show which line your cursor is on vim.opt.cursorline = true --remove cursorline color, required for hl-CursorLineNr with cursorline true. vim.opt.cursorlineopt = { 'both' } -- Minimal number of screen lines to keep above and below the cursor. vim.opt.scrolloff = 10 -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` -- Set highlight on search, but clear on pressing in normal mode -- vim.opt.hlsearch = true vim.keymap.set('n', '', 'nohlsearch') -- Move line up or down after highlight vim.keymap.set('v', 'J', ":m '>+1gv=gv") vim.keymap.set('v', 'K', ":m '<-2gv=gv") -- Diagnostic keymaps vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) -- 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. -- Use CTRL+ to switch between windows -- See `:help wincmd` for a list of all window commands vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) vim.keymap.set('i', 'kj', '') -- Open Netrw -- vim.keymap.set('n', 'rw', 'Ex!') -- Open Neotree vim.keymap.set('n', 'nt', ':Neotree') -- Oil nvim vim.keymap.set('n', '-', 'Oil', { desc = 'Open parent directory' }) --Undo Tree vim.keymap.set('n', '', vim.cmd.UndotreeToggle) -- [[ Basic Autocommands ]] -- See `:help lua-guide-autocommands` -- Highlight when yanking (copying) text -- See `:help vim.highlight.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.highlight.on_yank { timeout = 70 } 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 ---@diagnostic disable-next-line: undefined-field vim.opt.rtp:prepend(lazypath) -- [[ Configure and install plugins ]] require('lazy').setup({ 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically 'ThePrimeagen/vim-be-good', 'mbbill/undotree', -- Database -- 'tpope/vim-dadbod', -- 'kristijanhusak/vim-dadbod-ui', -- 'kristijanhusak/vim-dadbod-completion', { 'microsoft/vscode-js-debug', opt = true, run = 'npm install --legacy-peer-deps && npx gulp vsDebugServerBundle && mv dist out', }, { 'stevearc/oil.nvim', opts = {}, -- Optional dependencies dependencies = { 'nvim-tree/nvim-web-devicons' }, config = function() require('oil').setup { default_file_explorer = true, } end, }, { 'nvim-neo-tree/neo-tree.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended 'MunifTanjim/nui.nvim', }, -- Enable to autostart at nvim . -- config = function() -- require('neo-tree').setup {} -- end, }, -- NOTE: Plugins can also be added by using a table, -- with the first argument being the link and the following -- keys can be used to configure plugin behavior/loading/etc. -- -- Use `opts = {}` to force a plugin to be loaded. -- NOTE plugins -- -- This is equivalent to: -- require('Comment').setup({}) { 'numToStr/Comment.nvim', opts = { opleader = { --[M]ake[C]omment line = 'mc', -- [M]ake [B]lock comment block = 'mb', }, }, }, -- Here is a more advanced example where we pass configuration -- options to `gitsigns.nvim`. This is equivalent to the following lua: -- require('gitsigns').setup({ ... }) -- -- See `:help gitsigns` to understand what the configuration keys do { -- Adds git related signs to the gutter, as well as utilities for managing changes 'lewis6991/gitsigns.nvim', opts = { signs = { add = { text = '+' }, change = { text = '~' }, delete = { text = '_' }, topdelete = { text = '‾' }, changedelete = { text = '~' }, }, }, }, { -- Useful plugin to show you pending keybinds. 'folke/which-key.nvim', event = 'VimEnter', -- Sets the loading event to 'VimEnter' opts = { icons = { -- set icon mappings to true if you have a Nerd Font mappings = vim.g.have_nerd_font, -- If you are using a Nerd Font: set icons.keys to an empty table which will use the -- default whick-key.nvim defined Nerd Font icons, otherwise define a string table keys = vim.g.have_nerd_font and {} or { Up = ' ', Down = ' ', Left = ' ', Right = ' ', C = ' ', M = ' ', D = ' ', S = ' ', CR = ' ', Esc = ' ', ScrollWheelDown = ' ', ScrollWheelUp = ' ', NL = ' ', BS = ' ', Space = ' ', Tab = ' ', F1 = '', F2 = '', F3 = '', F4 = '', F5 = '', F6 = '', F7 = '', F8 = '', F9 = '', F10 = '', F11 = '', F12 = '', }, }, -- Document existing key chains spec = { { 'c', group = '[C]ode', mode = { 'n', 'x' } }, { 'd', group = '[D]ocument' }, { 'r', group = '[R]ename' }, { 's', group = '[S]earch' }, { 'w', group = '[W]orkspace' }, { 't', group = '[T]oggle' }, { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } }, }, }, }, { 'rose-pine/neovim', name = 'rose-pine', priority = 1000, config = function() require('rose-pine').setup { disable_background = true, styles = { bold = true, italic = false, }, } end, }, { 'catppuccin/nvim', name = 'catppuccin', priority = 1000, config = function() require('catppuccin').setup { flavour = 'auto', -- latte, frappe, macchiato, mocha background = { -- :h background light = 'latte', dark = 'mocha', }, transparent_background = true, -- disables setting the background color. show_end_of_buffer = false, -- shows the '~' characters after the end of buffers term_colors = false, -- sets terminal colors (e.g. `g:terminal_color_0`) dim_inactive = { enabled = false, -- dims the background color of inactive window shade = 'dark', percentage = 0.15, -- percentage of the shade to apply to the inactive window }, no_italic = true, -- Force no italic no_bold = false, -- Force no bold no_underline = false, -- Force no underline --[[ styles = { -- Handles the styles of general hi groups (see `:h highlight-args`): -- comments = { 'italic' }, -- Change the style of comments -- conditionals = { 'italic' }, loops = {}, functions = {}, keywords = {}, strings = {}, variables = {}, numbers = {}, booleans = {}, properties = {}, types = {}, operators = {}, -- miscs = {}, -- Uncomment to turn off hard-coded styles }, ]] color_overrides = {}, custom_highlights = {}, default_integrations = true, integrations = { cmp = true, gitsigns = true, nvimtree = true, treesitter = true, notify = false, mini = { enabled = true, indentscope_color = '', }, -- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) }, } vim.cmd.colorscheme 'catppuccin' vim.o.background = 'dark' -- You can configure highlights by doing something like vim.cmd.hi 'Comment gui=none' vim.api.nvim_set_hl(0, 'TelescopeNormal', { bg = 'none' }) --Background (inside telescope) vim.api.nvim_set_hl(0, 'TelescopeBorder', { bg = 'none' }) --Weird Borderline vim.api.nvim_set_hl(0, 'NormalNC', { bg = 'none' }) --Background (outside telescope) vim.api.nvim_set_hl(0, 'WinSeparator', { fg = '#ffffff' }) --window separator vim.api.nvim_set_hl(0, 'NotificationInfo', { bg = 'none' }) vim.api.nvim_set_hl(0, 'NotificationWarning', { bg = 'none' }) vim.api.nvim_set_hl(0, 'NotificationError', { bg = 'none' }) vim.api.nvim_set_hl(0, 'CursorLineNr', { fg = '#a6e3a1', bg = 'none' }) -- vim.api.nvim_set_hl(0, 'Normalfloat', { bg = 'none' }) end, }, { 'folke/tokyonight.nvim', priority = 1000, -- Make sure to load this before all the other start plugins. init = function() -- Load the colorscheme here. -- Like many other themes, this one has different styles, and you could load -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. -- vim.cmd.colorscheme 'tokyonight-night' -- You can configure highlights by doing something like: -- vim.cmd.hi 'Comment gui=none' end, }, -- Highlight todo, notes, etc in comments { 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } }, -- The following two comments only work if you have downloaded the kickstart repo, not just copy pasted the -- init.lua. If you want these files, they are in the repository, so you can just download them and -- put them in the right spots if you want. -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for kickstart -- -- Here are some example plugins that I've included in the kickstart repository. -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- require 'kickstart.plugins.autopairs', require 'kickstart.plugins.conform', require 'kickstart.plugins.dap', require 'kickstart.plugins.debug', require 'kickstart.plugins.fzf-telescope', require 'kickstart.plugins.lsp-config', require 'kickstart.plugins.mini', require 'kickstart.plugins.nvim-cmp', require 'kickstart.plugins.treesitter', require 'kickstart.plugins.vim-fugitive', require 'kickstart.plugins.nvim-lint', require 'kickstart.plugins.cord', -- require 'kickstart.plugins.indent_line', -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`. -- For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins` { import = 'custom.plugins' }, }, { ui = { 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