return {
	'folke/which-key.nvim',
	event = 'VeryLazy',
	config = function()
		local wk = require 'which-key'
		wk.setup {
			plugins = {
				marks = true, -- shows a list of your marks on ' and `
				registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
				-- the presets plugin, adds help for a bunch of default keybindings in Neovim
				-- No actual key bindings are created
				presets = {
					operators = true, -- adds help for operators like d, y, ...
					motions = true, -- adds help for motions
					text_objects = false, -- help for text objects triggered after entering an operator
					windows = true, -- default bindings on <c-w>
					nav = true, -- misc bindings to work with windows
					z = true, -- bindings for folds, spelling and others prefixed with z
					g = true, -- bindings for prefixed with g
				},
			},
			icons = {
				breadcrumb = '»', -- symbol used in the command line area that shows your active key combo
				separator = '➜ ', -- symbol used between a key and it's label
				group = '+', -- symbol prepended to a group
			},
			window = {
				border = 'none', -- none, single, double, shadow
				position = 'bottom', -- bottom, top
				margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]
				padding = { 1, 1, 1, 1 }, -- extra window padding [top, right, bottom, left]
			},
			layout = {
				height = { min = 4, max = 25 }, -- min and max height of the columns
				width = { min = 20, max = 50 }, -- min and max width of the columns
				spacing = 3, -- spacing between columns
			},
			hidden = { '<silent>', '<cmd>', '<Cmd>', '<CR>', 'call', 'lua', '^:', '^ ' }, -- hide mapping boilerplate
			show_help = true, -- show help message on the command line when the popup is visible
		}
		local opts = {
			mode = 'n', -- NORMAL mode
			prefix = '<leader>',
			buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings
			silent = true, -- use `silent` when creating keymaps
			noremap = true, -- use `noremap` when creating keymaps
			nowait = false, -- use `nowait` when creating keymaps
		}
		local mappings = {
			['o'] = { '<cmd>e ~/.config/nvim/ <cr>', 'Neovim config' },
			['rr'] = 'Search and replace all',
			['rs'] = 'Search and replace',
			['q'] = { '<cmd>lua UnMapDHM()<cr>', 'qwerty' },
			['c'] = { '<cmd>lua MapDHM()<cr>', 'colemak' },
			[';'] = { '<cmd>bd<cr>', 'Delete buffer' },
			['<TAB>'] = {
				name = 'Tab',
				n = { '<cmd>tabnew<cr>', 'New' },
				p = { '<cmd>tabp<cr>', 'Previous' },
				d = { '<cmd>tabclose<cr>', 'Close' },
				['<TAB>'] = { '<cmd>tabnext<cr>', 'Next' },
				['1'] = { '1gt', 'Go to tab 1' },
				['2'] = { '2gt', 'Go to tab 2' },
				['3'] = { '3gt', 'Go to tab 3' },
				['4'] = { '4gt', 'Go to tab 4' },
				['5'] = { '5gt', 'Go to tab 5' },
				['6'] = { '6gt', 'Go to tab 6' },
				['7'] = { '7gt', 'Go to tab 7' },
				['8'] = { '8gt', 'Go to tab 8' },
				['9'] = { '9gt', 'Go to tab 9' },
			},
			w = {
				name = 'Window',
				v = { '<C-w>v', 'Vertical split' },
				h = { '<C-w>s', 'Horizontal split' },
			},
		}
		wk.register(mappings, opts)
	end,
}
