return {
  {
    "mason-org/mason.nvim",
    opts = function(_, opts)
      opts.ensure_installed = vim.list_extend(opts.ensure_installed, { "tailwindcss-language-server" })
    end,
  },
  {
    "mason-org/mason.nvim",
    opts = {
      servers = {
        ["tailwindcss-language-server"] = {
          config = {
            cmd = { "tailwindcss-language-server", "--stdio" },
            -- exclude a filetype from the default_config
            filetypes_exclude = { "markdown" },
            -- add additional filetypes to the default_config
            filetypes_include = {},
            -- to fully override the default_config, change the below
            -- filetypes = {}
            -- filetypes copied and adjusted from tailwindcss-intellisense
            filetypes = {
              -- html
              "aspnetcorerazor",
              "astro",
              "astro-markdown",
              "blade",
              "clojure",
              "django-html",
              "htmldjango",
              "edge",
              "eelixir", -- vim ft
              "elixir",
              "ejs",
              "erb",
              "eruby", -- vim ft
              "gohtml",
              "gohtmltmpl",
              "haml",
              "handlebars",
              "hbs",
              "html",
              "htmlangular",
              "html-eex",
              "heex",
              "jade",
              "leaf",
              "liquid",
              "markdown",
              "mdx",
              "mustache",
              "njk",
              "nunjucks",
              "php",
              "razor",
              "slim",
              "twig",
              -- css
              "css",
              "less",
              "postcss",
              "sass",
              "scss",
              "stylus",
              "sugarss",
              -- js
              "javascript",
              "javascriptreact",
              "reason",
              "rescript",
              "typescript",
              "typescriptreact",
              -- mixed
              "vue",
              "svelte",
              "templ",
            },
            settings = {
              tailwindCSS = {
                validate = true,
                lint = {
                  cssConflict = "warning",
                  invalidApply = "error",
                  invalidScreen = "error",
                  invalidVariant = "error",
                  invalidConfigPath = "error",
                  invalidTailwindDirective = "error",
                  recommendedVariantOrder = "warning",
                },
                classAttributes = {
                  "class",
                  "className",
                  "class:list",
                  "classList",
                  "ngClass",
                },
                includeLanguages = {
                  eelixir = "html-eex",
                  elixir = "phoenix-heex",
                  eruby = "erb",
                  heex = "phoenix-heex",
                  htmlangular = "html",
                  templ = "html",
                },
              },
            },
            before_init = function(_, config)
              if not config.settings then
                config.settings = {}
              end
              if not config.settings.editor then
                config.settings.editor = {}
              end
              if not config.settings.editor.tabSize then
                config.settings.editor.tabSize = vim.lsp.util.get_effective_tabstop()
              end
            end,
            workspace_required = true,
            root_dir = function(bufnr, on_dir)
              local root_files = {
                -- Generic
                "tailwind.config.js",
                "tailwind.config.cjs",
                "tailwind.config.mjs",
                "tailwind.config.ts",
                "postcss.config.js",
                "postcss.config.cjs",
                "postcss.config.mjs",
                "postcss.config.ts",
                -- Django
                "theme/static_src/tailwind.config.js",
                "theme/static_src/tailwind.config.cjs",
                "theme/static_src/tailwind.config.mjs",
                "theme/static_src/tailwind.config.ts",
                "theme/static_src/postcss.config.js",
                -- Fallback for tailwind v4, where tailwind.config.* is not required anymore
                ".git",
              }
              local fname = vim.api.nvim_buf_get_name(bufnr)
              root_files = Util.lsp.insert_package_json(root_files, "tailwindcss", fname)
              root_files =
                Util.lsp.root_markers_with_field(root_files, { "mix.lock", "Gemfile.lock" }, "tailwind", fname)
              on_dir(vim.fs.dirname(vim.fs.find(root_files, { path = fname, upward = true })[1]))
            end,
          },
        },
      },
    },
  },
}
