local map = require('core.misc').map

return function(server_name, attach, capabilities)
  require('lspconfig')[server_name].setup {
    on_attach = function(client, bufnr)
      attach(client, bufnr)

      -- add some clangd specific mappings
      local opts = { buffer = bufnr }
      map("n", "<leader>o", "<cmd>ClangdSwitchSourceHeader<CR>", opts)
    end,
    capabilities = capabilities,

    cmd = {
      "clangd",
      "--background-index",
      "--clang-tidy",
      "--header-insertion=iwyu",
      "--completion-style=detailed",
      "--function-arg-placeholders",
      "--fallback-style=llvm"
    },
    init_options = {
      usePlaceholders = true,
      clangdFileStatus = true,
      fallback_flags = {
        "-xc" -- makes clangd think we're using c instead of c++
      }
    }
  }
end