return {

	{
		'neovim/nvim-lspconfig',
		opts = {
			servers = {
				ruff_lsp = {},
			},
			setup = {
				ruff_lsp = function(_, opts)
					local root_files = {
						'.python-version',
						'pyproject.toml',
						'ruff.toml',
					}
					local util = require('lspconfig.util')
					opts.root_dir = util.root_pattern(unpack(root_files))
						or util.find_git_ancestor()

					require('plex.lib.utils').on_attach(function(client, _)
						if client.name == 'ruff_lsp' then
							client.server_capabilities.hoverProvider = false
						end
					end)
				end,
			},
		},
	},

	{
		'williamboman/mason.nvim',
		opts = function(_, opts)
			vim.list_extend(opts.ensure_installed, {
				'ruff',
				'ruff-lsp',
			})
		end,
	},

	{
		'jose-elias-alvarez/null-ls.nvim',
		optional = true,
		opts = function(_, opts)
			if type(opts.sources) == 'table' then
				local nls = require('null-ls')
				table.insert(opts.sources, nls.builtins.formatting.ruff)
			end
		end,
	},
}
