-- [[ Install `lazy.nvim` plugin manager ]] -- https://github.com/folke/lazy.nvim -- `:help lazy.nvim.txt` for more info local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' if not vim.loop.fs_stat(lazypath) then vim.fn.system { 'git', 'clone', '--filter=blob:none', 'https://github.com/folke/lazy.nvim.git', '--branch=stable', -- latest stable release lazypath, } end vim.opt.rtp:prepend(lazypath) -- [[ Configure plugins ]] -- NOTE: Here is where you install your plugins. -- You can configure plugins using the `config` key. -- -- You can also configure plugins after the setup call, -- as they will be available in your neovim runtime. require('lazy').setup({ -- NOTE: First, some plugins that don't require any configuration -- Git related plugins 'tpope/vim-fugitive', 'tpope/vim-rhubarb', -- Detect tabstop and shiftwidth automatically 'tpope/vim-sleuth', -- Autoformat on save 'jose-elias-alvarez/null-ls.nvim', { 'kdheepak/lazygit.nvim', -- optional for floating window border decoration dependencies = { 'nvim-lua/plenary.nvim', }, }, -- When life gets too hard 'eandrju/cellular-automaton.nvim', 'leafOfTree/vim-svelte-plugin', -- NOTE: This is where your plugins related to LSP can be installed. -- The configuration is done below. Search for lspconfig to find it below. { -- LSP Configuration & Plugins 'neovim/nvim-lspconfig', config = require('kickstart.plugins.autoformat').config, dependencies = { -- Automatically install LSPs to stdpath for neovim { 'williamboman/mason.nvim', config = true }, 'williamboman/mason-lspconfig.nvim', -- Useful status updates for LSP -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` { 'j-hui/fidget.nvim', opts = {} }, -- Additional lua configuration, makes nvim stuff amazing! 'folke/neodev.nvim', }, }, { -- Autocompletion 'hrsh7th/nvim-cmp', dependencies = { -- Snippet Engine & its associated nvim-cmp source { 'L3MON4D3/LuaSnip', build = (function() -- Build Step is needed for regex support in snippets -- This step is not supported in many windows environments -- Remove the below condition to re-enable on windows if vim.fn.has 'win32' == 1 then return end return 'make install_jsregexp' end)(), }, 'saadparwaiz1/cmp_luasnip', -- Adds LSP completion capabilities 'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-path', -- Adds a number of user-friendly snippets -- 'rafamadriz/friendly-snippets', }, }, -- Useful plugin to show you pending keybinds. { 'folke/which-key.nvim', opts = {} }, { -- Adds git related signs to the gutter, as well as utilities for managing changes 'lewis6991/gitsigns.nvim', opts = { -- 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', 'hs', gs.stage_hunk, { desc = 'git stage hunk' }) map('n', 'hr', gs.reset_hunk, { desc = 'git reset hunk' }) map('n', 'hS', gs.stage_buffer, { desc = 'git Stage buffer' }) map('n', 'hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) map('n', 'hR', gs.reset_buffer, { desc = 'git Reset buffer' }) map('n', 'hp', gs.preview_hunk, { desc = 'preview git hunk' }) map('n', 'hb', function() gs.blame_line { full = false } end, { desc = 'git blame line' }) map('n', 'hd', gs.diffthis, { desc = 'git diff against index' }) map('n', 'hD', function() gs.diffthis '~' end, { desc = 'git diff against last commit' }) -- Toggles map('n', 'tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) map('n', 'td', gs.toggle_deleted, { desc = 'toggle git show deleted' }) -- Text object map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) end, }, }, { 'folke/tokyonight.nvim', lazy = false, priority = 1000, config = function() require('tokyonight').setup { style = 'night', } end, }, { -- Theme inspired by Atom 'navarasu/onedark.nvim', lazy = false, priority = 0, config = function() require('onedark').setup { -- Set a style preset. 'dark' is default. style = 'dark', -- dark, darker, cool, deep, warm, warmer, light } require('onedark').load() end, }, { -- Set lualine as statusline 'nvim-lualine/lualine.nvim', -- See `:help lualine.txt` opts = { options = { icons_enabled = true, theme = 'tokyonight', component_separators = '|', section_separators = '', }, }, }, { -- Add indentation guides even on blank lines 'lukas-reineke/indent-blankline.nvim', -- Enable `lukas-reineke/indent-blankline.nvim` -- See `:help ibl` main = 'ibl', opts = { indent = { char = '▏', }, }, }, -- "gc" to comment visual regions/lines { 'numToStr/Comment.nvim', opts = {} }, -- Fuzzy Finder (files, lsp, etc) { 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim', -- Fuzzy Finder Algorithm which requires local dependencies to be built. -- Only load if `make` is available. Make sure you have the system -- requirements installed. { 'nvim-telescope/telescope-fzf-native.nvim', -- NOTE: If you are having trouble with this installation, -- refer to the README for telescope-fzf-native for more instructions. build = 'make', cond = function() return vim.fn.executable 'make' == 1 end, }, }, }, 'nvim-neotest/nvim-nio', { 'danymat/neogen', config = true, -- Uncomment next line if you want to follow only stable versions -- version = "*" }, { -- Highlight, edit, and navigate code 'nvim-treesitter/nvim-treesitter', dependencies = { 'nvim-treesitter/nvim-treesitter-textobjects', }, build = ':TSUpdate', }, -- { -- 'rust-lang/rust.vim', -- ft = 'rust', -- init = function() -- vim.g.rustfmt_autosave = 1 -- end, -- }, -- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart -- These are some example plugins that I've included in the kickstart repository. -- Uncomment any of the lines below to enable them. -- require 'kickstart.plugins.autoformat', require 'kickstart.plugins.debug', { 'stevearc/oil.nvim', opts = {}, dependencies = { { 'echasnovski/mini.icons', opts = {} } }, config = function() require('oil').setup { default_file_explorer = true } end, }, 'nvim-tree/nvim-web-devicons', { 'chrishrb/gx.nvim', keys = { { 'gx', 'Browse', mode = { 'n', 'x' } } }, cmd = { 'Browse' }, init = function() vim.g.netrw_nogx = 1 -- disable netrw gx end, dependencies = { 'nvim-lua/plenary.nvim' }, config = true, -- default settings submodules = false, -- not needed, submodules are required only for tests }, { 'nvim-neo-tree/neo-tree.nvim', branch = 'v3.x', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended 'MunifTanjim/nui.nvim', -- "3rd/image.nvim", -- Optional image support in preview window: See `# Preview Mode` for more information }, }, -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` -- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping -- up-to-date with whatever is in the kickstart repo. -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. -- -- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins -- { import = 'custom.plugins' }, }, {})