---@module 'lazy'
---@type LazySpec
return { {
	'nvim-mini/mini.nvim',
	config = function()
		require('mini.ai').setup()
		require('mini.surround').setup()
		require('mini.operators').setup()

		require('mini.indentscope').setup({
			symbol = '¦',
			draw = {
				delay = 50, -- delay in MS before writing the indicator
				animation = require('mini.indentscope').gen_animation.none(),
			},
			options = {
				try_as_border = false,
			},
		})
		vim.api.nvim_set_hl(0, 'MiniIndentscopeSymbol', { fg = _G.userdat.palette.dark2, bg = nil })

		require('mini.move').setup({
			mappings = {
				-- move visual selection in visual mode
				left       = '<m-h>',
				down       = '<m-j>',
				up         = '<m-k>',
				right      = '<m-l>',

				-- move current line in normal mode
				line_left  = '<m-h>',
				line_down  = '<m-j>',
				line_up    = '<m-k>',
				line_right = '<m-l>',
			},
			options = {
				reindent_linewise = true, -- automatically re-indent selection during line vertical move
			},
		})

		require('mini.statusline').setup({
			content = {
				active = function()
					local mode, mode_hl = MiniStatusline.section_mode({ trunc_width = 120 })
					local git           = MiniStatusline.section_git({ trunc_width = 40 })
					local diff          = MiniStatusline.section_diff({ trunc_width = 75 })
					local diagnostics   = MiniStatusline.section_diagnostics({ trunc_width = 75 })
					local lsp           = MiniStatusline.section_lsp({ trunc_width = 75 })
					local filename      = MiniStatusline.section_filename({ trunc_width = 140 })
					local fileinfo      = MiniStatusline.section_fileinfo({ trunc_width = 120 })

					return MiniStatusline.combine_groups({
						{ hl = mode_hl,                 strings = { mode } },
						{ hl = 'MiniStatuslineDevinfo', strings = { git, diff, diagnostics, lsp } },
						'%<', -- general truncation point
						{ hl = 'MiniStatuslineFilename', strings = { filename } },
						'%=', -- align right
						{ hl = 'MiniStatuslineFileInfo', strings = { fileinfo } },
						{ hl = mode_hl,                  strings = { '%3l:%-3c' } }
					})
				end,
				inactive = function()
					return MiniStatusline.combine_groups({
						{},
					})
				end
			},
			use_icons = true,
			set_vim_settings = true,
		})
	end
} }
