return {
	{
		"vifm/vifm.vim",
		config = function()
			vim.g.loaded_netrw = 1
			vim.g.loaded_netrwPlugin = 1
			vim.g.vifm_replace_netrw = 1
			vim.g.vifm_exec_args = '-c "set vifminfo=" -c "set statusline=" -c "only"'
		end,
		cmd = "Vifm",
		keys = {
			{ "<leader>E", "<cmd>Vifm<cr>", desc = "buffer file browser" },
			{ "<leader>vc", ":Vifm " .. vim.fn.stdpath("config") .. "<cr>", desc = "open config" },
		},
		event = { "BufEnter" },
	}, -- integrate file manager
	{
		"nvim-neo-tree/neo-tree.nvim",
		dependencies = {
			"MunifTanjim/nui.nvim",
			"nvim-lua/plenary.nvim",
			{ "nvim-tree/nvim-web-devicons", optional = true },
		},
		cmd = "Neotree",
		opts = {
			source_selector = { winbar = true },
		},
		keys = {
			{ "<leader>se", "<cmd>Neotree toggle left<cr>", desc = "filetree", silent = true },
		},
		lazy = false
	},
	{ "MagicDuck/grug-far.nvim", lazy = false, opts = {} },
	-- fuzzy matching picker
	{
		"nvim-telescope/telescope.nvim",
		dependencies = {
			"nvim-lua/popup.nvim",
			"nvim-lua/plenary.nvim",
			{ "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
		},
		cmd = "Telescope",
		config = function()
			if require("core.util").is_available("which-key") then
				require("which-key").add({ "<leader>f", group = "find" })
			end
			-- Setup up telescope fuzzy finding settings
			--
			-- Makes use of optionally installed external programs to work fully:
			-- rg (ripgrep) for in-text searches
			-- fd for quicker directory structure searches
			-- lsp for a variety of lsp queries
			local trouble_mappings = {}
			if require("core.util").is_available("trouble") then
				trouble_mappings = {
					i = { ["<c-t>"] = require("trouble.sources.telescope").open },
					n = { ["<c-t>"] = require("trouble.sources.telescope").open },
				}
			end
			require("telescope").setup({
				defaults = {
					vimgrep_arguments = {
						"rg",
						"--ignore-vcs",
						"--hidden",
						"--color=never",
						"--no-heading",
						"--with-filename",
						"--line-number",
						"--column",
						"--smart-case",
					},
					generic_sorter = require("mini.fuzzy").get_telescope_sorter,
					-- Appearance
					prompt_prefix = "󰍉 ",
					selection_caret = "󰳟 ",
					color_devicons = true,
					mappings = trouble_mappings or {},
				},
				pickers = {
					buffers = { theme = "ivy" },
					oldfiles = { theme = "ivy" },
					find_files = {
						theme = "dropdown",
						-- nice minimal picker design
						borderchars = {
							{ "─", "│", "─", "│", "┌", "┐", "┘", "└" },
							prompt = { "─", "│", " ", "│", "┌", "┐", "│", "│" },
							results = { "─", "│", "─", "│", "├", "┤", "┘", "└" },
							preview = { "─", "│", "─", "│", "┌", "┐", "┘", "└" },
						},
						width = 0.8,
						previewer = false,
						prompt_title = false,
					},
				},
			})
			require("telescope").load_extension("fzf")
		end,
		keys = {
			{
				"<leader>vh",
				function()
					require("telescope.builtin").help_tags()
				end,
				desc = "help tags",
			},
			{
				"<leader>vH",
				function()
					require("telescope.builtin").man_pages()
				end,
				desc = "man pages",
			},
			{
				"<leader>vC",
				function()
					require("telescope.builtin").colorscheme(require("telescope.themes").get_ivy())
				end,
				desc = "colorschemes",
			},

			{
				"<leader>fb",
				function()
					require("telescope.builtin").buffers(require("telescope.themes").get_ivy())
				end,
				desc = "list buffers",
			},
			{
				"<leader>fo",
				function()
					require("telescope.builtin").oldfiles(require("telescope.themes").get_ivy())
				end,
				desc = "list old files",
			},
			{
				"<leader>ff",
				function()
					require("telescope.builtin").find_files()
				end,
				desc = "find files",
			},
			{
				"<leader>fh",
				function()
					require("telescope.builtin").find_files({ hidden = true })
				end,
				desc = "find hidden files",
			},
			{
				"<leader>fw",
				function()
					require("telescope.builtin").live_grep()
				end,
				desc = "grep search",
			},
			{
				"<leader>fg",
				function()
					require("telescope.builtin").git_status()
				end,
				desc = "git status",
			},
			{
				"<leader>fc",
				function()
					require("telescope.builtin").git_bcommits()
				end,
				desc = "git buffer commits",
			},
			{
				"<leader>fl",
				function()
					require("telescope.builtin").git_commits()
				end,
				desc = "git commit log",
			},
			{
				"z=",
				function()
					require("telescope.builtin").spell_suggest(require("telescope.themes").get_ivy())
				end,
				desc = "spell suggest",
			},
		},
	},
	{
		"jiaoshijie/undotree",
		dependencies = {
			"nvim-lua/plenary.nvim",
		},
		config = true,
		keys = {
			{
				"<leader>su",
				function()
					require("undotree").toggle()
				end,
				desc = "toggle undotree",
				silent = true,
			},
		},
	},
}
