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)

require('lazy').setup({
	-- color scheme
	{ dir = '~/builds/darkplus.nvim' },

	-- buffer line
	'moll/vim-bbye', -- close buffers softly
	{ 'akinsho/bufferline.nvim', dependencies = 'nvim-tree/nvim-web-devicons', config = require('configs.bufferline') },

	-- git
	{ 'lewis6991/gitsigns.nvim', config = require('configs.gitsigns') },
	{ 'f-person/git-blame.nvim', config = require('configs.gitblame') },

	-- status line
	{ 'nvim-lualine/lualine.nvim', config = require('configs.lualine') },

	-- tree
	{ 'nvim-tree/nvim-tree.lua', dependencies = { 'nvim-tree/nvim-web-devicons', 'nvim-lua/plenary.nvim' }, config = require('configs.nvim-tree') },

	-- show indentation
	{ 'lukas-reineke/indent-blankline.nvim', config = require('configs.indent-blankline') },

	-- telescope (find files, words, etc.)
	{ 'nvim-telescope/telescope.nvim', config = require('configs.telescope') },

	-- custom build of Shatur/neovim-session-manager for git-branch sessions
	{ dir = '~/builds/neovim-session-manager', config = require('configs.session-manager') },

	-- treesitter
	{ 'nvim-treesitter/nvim-treesitter', config = require('configs.treesitter') },

	{ 'windwp/nvim-ts-autotag', dependencies = 'nvim-treesitter/nvim-treesitter' },
	{ 'JoosepAlviste/nvim-ts-context-commentstring', dependencies = 'nvim-treesitter/nvim-treesitter' },

	{
		'nvim-treesitter/nvim-treesitter-context',
		dependencies = 'nvim-treesitter/nvim-treesitter',
		config = require('configs.treesitter-context'),
		commit = '158377d700596367a91ea41818f76abdbf75a232',
	},

	-- lsp
	-- NOTE: pinning nvim-lspconfig to keep ruff_lsp support until RA gets onto ruff v0.5
	{ 'neovim/nvim-lspconfig', config = require('configs.lspconfig'), commit = 'bedb2a0df105f68a624a49b867f269b6d55a2c89' },

	{ 'tami5/lspsaga.nvim', config = require('configs.lspsaga') },
	{ 'mhartington/formatter.nvim', config = require('configs.formatter') },
	{ 'mfussenegger/nvim-lint', config = require('configs.linter') },

	-- highlight hovered text
	{ 'RRethy/vim-illuminate', config = require('configs.illuminate') },

	-- autocomplete
	{ 'hrsh7th/nvim-cmp', dependencies = 'L3MON4D3/LuaSnip', config = require('configs.cmp') },
	{ 'hrsh7th/cmp-buffer', dependencies = 'hrsh7th/nvim-cmp' },
	{ 'hrsh7th/cmp-path', dependencies = 'hrsh7th/nvim-cmp' },
	{ 'hrsh7th/cmp-nvim-lsp', dependencies = 'hrsh7th/nvim-cmp' },

	-- table mode
	'dhruvasagar/vim-table-mode',

	-- dashboard
	{ 'goolord/alpha-nvim', dependencies = 'nvim-tree/nvim-web-devicons', config = require('configs.alpha') },

	-- lazygit
	{ 'kdheepak/lazygit.nvim', dependencies = 'nvim-lua/plenary.nvim', keys = { { '<leader>lg', '<cmd>LazyGit<cr>' } } },

	-- autopairs
	{ 'windwp/nvim-autopairs', config = require('configs.autopairs') },

	-- block comments
	{
		'numToStr/Comment.nvim',
		dependencies = 'JoosepAlviste/nvim-ts-context-commentstring',
		config = require('configs.comment'),
	},

	-- color string colors (#f1b8f1)
	{ 'norcalli/nvim-colorizer.lua', config = require('configs.colorizer') },

	-- remember last place when opening files
	'farmergreg/vim-lastplace',
})