return {
	{
		'mfussenegger/nvim-dap',
		keys = function()
			local function dap(name)
				return function()
					require('dap')[name]()
				end
			end

			return {
				{ '<leader>dc', dap 'continue', desc = 'continue' },
				{ '<leader>ds', dap 'step_into', desc = 'step into' },
				{ '<leader>dn', dap 'step_over', desc = 'step over (next)' },
				{ '<leader>df', dap 'step_out', desc = 'step out (finish)' },
				{ '<leader>db', dap 'toggle_breakpoint', desc = 'toggle breakpoint' },
				{
					'<leader>do',
					function()
						vim.ui.input({ prompt = 'Condition: ' }, function(input)
							if input == nil then
								return
							end
							require('dap').set_breakpoint(input)
						end)
					end,
					desc = 'set conditional breakpoint',
				},
				{ '<leader>dl', dap 'clear_breakpoints', desc = 'clear breakpoints' },
				{ '<leader>dq', dap 'terminate', desc = 'quit' },
			}
		end,
	},
	{
		'rcarriga/nvim-dap-ui',
		opts = {
			controls = {
				element = 'repl',
				enabled = true,
				icons = {
					disconnect = '',
					pause = '',
					play = '',
					run_last = '',
					step_back = '',
					step_into = '',
					step_out = '',
					step_over = '',
					terminate = '',
				},
			},
			element_mappings = {},
			expand_lines = true,
			floating = {
				border = 'single',
				mappings = {
					close = { 'q', '<Esc>' },
				},
			},
			force_buffers = true,
			icons = {
				collapsed = '',
				current_frame = '',
				expanded = '',
			},
			layouts = {
				{
					elements = {
						{
							id = 'scopes',
							size = 0.5,
						},
						-- {
						-- 	id = "breakpoints",
						-- 	size = 0.25
						-- },
						{
							id = 'stacks',
							size = 0.25,
						},
						{
							id = 'watches',
							size = 0.25,
						},
					},
					position = 'right',
					size = 40,
				},
				{
					elements = {
						{
							id = 'repl',
							size = 0.5,
						},
						{
							id = 'console',
							size = 0.5,
						},
					},
					position = 'bottom',
					size = 10,
				},
			},
			mappings = {
				edit = 'e',
				expand = { '<CR>', '<2-LeftMouse>' },
				open = 'o',
				remove = 'd',
				repl = 'r',
				toggle = 't',
			},
			render = {
				indent = 1,
				max_value_lines = 100,
			},
		},
	},
}
