return {
	-- allow seamless navigation between vim buffers and tmux/wezterm splits
	{
		"numToStr/Navigator.nvim",
		branch = "master",
		config = true,
		event = "VeryLazy",
		keys = {
			{
				"<c-w>h",
				function()
					require("Navigator").left()
				end,
				{ silent = true },
			},
			{
				"<c-w>k",
				function()
					require("Navigator").up()
				end,
				{ silent = true },
			},
			{
				"<c-w>l",
				function()
					require("Navigator").right()
				end,
				{ silent = true },
			},
			{
				"<c-w>j",
				function()
					require("Navigator").down()
				end,
				{ silent = true },
			},
			{
				"<c-w>p",
				function()
					require("Navigator").previous()
				end,
				{ silent = true },
			},
		},
	},
	-- jump between letters with improved fFtT quicksearch, mimics sneak
	{
		"folke/flash.nvim",
		event = "VeryLazy",
		opts = {
			modes = {
				search = {
					enabled = false,
				},
			},
		},
		keys = {
			{
				"s",
				mode = { "n", "x" },
				function()
					require("flash").jump()
				end,
				desc = "Flash",
			},
			{
				"S",
				mode = { "n", "x", "o" },
				function()
					require("flash").treesitter()
				end,
				desc = "Flash Treesitter",
			},
			{
				"r",
				mode = "o",
				function()
					require("flash").remote()
				end,
				desc = "Remote Flash",
			},
		},
	},

	-- personal dict improvements for git sync
	{ "micarmst/vim-spellsync", event = "VeryLazy" },
	{
		"folke/which-key.nvim",
		event = "CursorHold",
		opts = { icons = { mappings = false } },
	},
	-- collection of plugins
	{
		"echasnovski/mini.nvim",
		dependencies = { "rktjmp/fwatch.nvim" }, -- for colorscheme updating
		event = "VimEnter", -- need to load pretty soon for Starter screen
		config = function()
			-- automatic callback to invoke 'mini.base16' when colorscheme file is changed
			local colorsfile = vim.fn.stdpath("state") .. "/colorscheme.lua"
			local function source_colors()
				if vim.fn.filereadable(colorsfile) == 1 then
					vim.cmd("source " .. colorsfile)
				end
			end
			-- set on startup
			source_colors()
			-- continuously watch colors file for changes
			local fwatch = require("fwatch")
			fwatch.watch(colorsfile, {
				on_event = vim.schedule_wrap(function()
					source_colors()
				end),
			})

			-- this should be loaded as soon as the plugin is loaded
			local starter = require("mini.starter")
			starter.setup({
				evaluate_single = true,
				items = {
					starter.sections.builtin_actions(),
					{
						name = "Scratchpad",
						action = "lua require('personal.scratchpad').create()",
						section = "Builtin actions",
					},
					starter.sections.recent_files(10, true),
					starter.sections.recent_files(10, false),
					-- Use this if you set up 'mini.sessions'
					-- starter.sections.sessions(),
					starter.sections.telescope(),
				},
				content_hooks = {
					starter.gen_hook.adding_bullet(),
					starter.gen_hook.padding(3, 2),
					starter.gen_hook.aligning("center", "center"),
				},
			})
			require("mini.files").setup({
				mappings = {
					synchronize = "S",
					go_in = "L", -- switch go-ins around
					go_in_plus = "l",
					go_out = "H",
					go_out_plus = "h",
				},
				options = {
					use_as_default_explorer = true,
				},
			})
			vim.api.nvim_create_autocmd("User", {
				pattern = "MiniFilesWindowUpdate",
				callback = function(args)
					local win_id = args.data.win_id

					vim.wo[win_id].number = true
				end,
			})

			-- manually create lazy loading scenarios
			vim.api.nvim_create_autocmd({ "InsertEnter", "CursorHold" }, {
				once = true,
				callback = function()
					require("mini.ai").setup()
					-- Align tables and other alignable things
					require("mini.align").setup({})

					require("mini.bracketed").setup({
						{
							buffer = { suffix = "b", options = {} },
							comment = { suffix = "k", options = {} },
							conflict = { suffix = "" }, -- disable to use git-conflict instead
							diagnostic = { suffix = "d", options = {} },
							file = { suffix = "", options = {} },
							indent = { suffix = "" }, -- disable since we use indentscope above
							jump = { suffix = "j", options = {} },
							location = { suffix = "l", options = {} },
							oldfile = { suffix = "o", options = {} }, -- FIXME: overwritten by wrapping defaults currently
							quickfix = { suffix = "q", options = {} },
							treesitter = { suffix = "t", options = {} },
							undo = { suffix = "" }, -- disable since I don't need it
							window = { suffix = "w", options = {} },
							yank = { suffix = "y", options = {} },
						},
					})
					require("mini.comment").setup({
						hooks = {
							pre = function()
								-- use treesitter commentstring functionality if it's installed
								if require("core.util").is_available("ts_context_commentstring") then
									require("ts_context_commentstring.internal").update_commentstring()
								end
							end,
						},
					})

					require("mini.cursorword").setup({ delay = 500 })
					vim.api.nvim_set_hl(0, "MiniCursorword", { bold = true, underline = false })
					vim.api.nvim_set_hl(0, "MiniCursorwordCurrent", { bold = true, underline = false })

					require("mini.fuzzy").setup()
					require("mini.indentscope").setup({
						symbol = "│",
						draw = { animation = require("mini.indentscope").gen_animation.none() },
						options = { indent_at_cursor = false },
					})
					require("mini.map").setup()
					require("mini.move").setup()
					require("mini.operators").setup()
					require("mini.pairs").setup()
					require("mini.trailspace").setup()
				end,
			})
		end,
		keys = {
			{
				"<leader>sm",
				function()
					require("mini.map").toggle()
				end,
				silent = true,
				desc = "minimap",
			},
			{
				"<leader>ss",
				function()
					require("mini.starter").open()
				end,
				silent = true,
				desc = "startpage",
			},
			{
				"<localleader>w",
				function()
					require("mini.trailspace").trim()
				end,
				desc = "Trim trailing whitespace",
			},
			{
				"<leader>e",
				function()
					local mf = require("mini.files")
					if not mf.close() then
						mf.open()
					end
				end,
				desc = "floating file browser",
			},
		},
	},
	-- try to avoid putting files in util buffers, e.g. filetree, aerial, undotree, ..
	{ "stevearc/stickybuf.nvim", config = true },
	-- make it a little less painful to open really big (>2mb) files by disabling features
	-- { "LunarVim/bigfile.nvim", lazy = false },
}
