return {
  'Civitasv/cmake-tools.nvim',
  ft = { "cpp", "c", "cmake" },
  config = function()
    --let g:cmake_build_options = [ "-j10" ]
    --
    --let g:cmake_root_markers = ['.svn']
    --
    --
    --let g:cmake_jump_on_error = 0 " We do not want to focus the console
    --augroup vim-cmake-group
    --autocmd User CMakeBuildFailed :cfirst
    --augroup END
    --
    --augroup vim-cmake-group
    --autocmd! User CMakeBuildSucceeded CMakeClose
    --augroup END

    require("cmake-tools").setup {
      cmake_command = "cmake",
      ctest_command = "ctest --verbose",
      cmake_generate_options = { "-DCMAKE_EXPORT_COMPILE_COMMANDS=1" },
      cmake_build_options = { "-j15" },
      cmake_build_directory = "build",
      cmake_soft_link_compile_commands = true, -- this will automatically make a soft link from compile commands file to project root dir
      cmake_compile_commands_from_lsp = false, -- this will automatically set compile commands file location using lsp, to use it, please set `cmake_soft_link_compile_commands` to false
      cmake_kits_path = nil,                   -- this is used to specify global cmake kits path, see CMakeKits for detailed usage
      cmake_variants_message = {
        short = { show = true },               -- whether to show short message
        long = { show = true, max_length = 40 }, -- whether to show long message
      },
      cmake_dap_configuration = {              -- debug settings for cmake
        name = "cmake_tools",
        type = "gdb",
        request = "launch",
        stopOnEntry = false,
        runInTerminal = true,
        console = "integratedTerminal",
      },
      cmake_executor = {                -- executor to use
        name = "quickfix",              -- name of the executor
        opts = {},                      -- the options the executor will get, possible values depend on the executor type. See `default_opts` for possible values.
        default_opts = {                -- a list of default and possible values for executors
          quickfix = {
            show = "always",            -- "always", "only_on_error"
            position = "belowright",    -- "vertical", "horizontal", "leftabove", "aboveleft", "rightbelow", "belowright", "topleft", "botright", use `:h vertical` for example to see help on them
            size = 10,
            encoding = "utf-8",         -- if encoding is not "utf-8", it will be converted to "utf-8" using `vim.fn.iconv`
            auto_close_when_success = true, -- typically, you can use it with the "always" option; it will auto-close the quickfix buffer if the execution is successful.
          },
          toggleterm = {
            direction = "float", -- 'vertical' | 'horizontal' | 'tab' | 'float'
            close_on_exit = false, -- whether close the terminal when exit
            auto_scroll = true, -- whether auto scroll to the bottom
          },
          overseer = {
            new_task_opts = {
              strategy = {
                "toggleterm",
                direction = "horizontal",
                autos_croll = true,
                quit_on_exit = "success"
              }
            }, -- options to pass into the `overseer.new_task` command
            on_new_task = function(task)
              require("overseer").open(
                { enter = false, direction = "right" }
              )
            end, -- a function that gets overseer.Task when it is created, before calling `task:start`
          },
          terminal = {
            name = "Main Terminal",
            prefix_name = "[CMakeTools]: ", -- This must be included and must be unique, otherwise the terminals will not work. Do not use a simple spacebar " ", or any generic name
            split_direction = "horizontal", -- "horizontal", "vertical"
            split_size = 11,

            -- Window handling
            single_terminal_per_instance = true, -- Single viewport, multiple windows
            single_terminal_per_tab = true,   -- Single viewport per tab
            keep_terminal_static_location = true, -- Static location of the viewport if available

            -- Running Tasks
            start_insert = false,   -- If you want to enter terminal with :startinsert upon using :CMakeRun
            focus = false,          -- Focus on terminal when cmake task is launched.
            do_not_add_newline = false, -- Do not hit enter on the command inserted when using :CMakeRun, allowing a chance to review or modify the command before hitting enter.
          },                        -- terminal executor uses the values in cmake_terminal
        },
      },
      cmake_runner = {           -- runner to use
        name = "quickfix",       -- name of the runner
        opts = {},               -- the options the runner will get, possible values depend on the runner type. See `default_opts` for possible values.
        default_opts = {         -- a list of default and possible values for runners
          quickfix = {
            show = "always",     -- "always", "only_on_error"
            position = "belowright", -- "bottom", "top"
            size = 10,
            encoding = "utf-8",
            auto_close_when_success = true, -- typically, you can use it with the "always" option; it will auto-close the quickfix buffer if the execution is successful.
          },
          toggleterm = {
            direction = "float", -- 'vertical' | 'horizontal' | 'tab' | 'float'
            close_on_exit = false, -- whether close the terminal when exit
            auto_scroll = true, -- whether auto scroll to the bottom
          },
          overseer = {
            new_task_opts = {
              strategy = {
                "quickfix",
                direction = "horizontal",
                autos_croll = true,
                quit_on_exit = "success"
              }
            }, -- options to pass into the `overseer.new_task` command
            on_new_task = function(task)
            end, -- a function that gets overseer.Task when it is created, before calling `task:start`
          },
          terminal = {
            name = "Main Terminal",
            prefix_name = "[CMakeTools]: ", -- This must be included and must be unique, otherwise the terminals will not work. Do not use a simple spacebar " ", or any generic name
            split_direction = "horizontal", -- "horizontal", "vertical"
            split_size = 11,

            -- Window handling
            single_terminal_per_instance = true, -- Single viewport, multiple windows
            single_terminal_per_tab = true,   -- Single viewport per tab
            keep_terminal_static_location = true, -- Static location of the viewport if available

            -- Running Tasks
            start_insert = false,   -- If you want to enter terminal with :startinsert upon using :CMakeRun
            focus = false,          -- Focus on terminal when cmake task is launched.
            do_not_add_newline = false, -- Do not hit enter on the command inserted when using :CMakeRun, allowing a chance to review or modify the command before hitting enter.
          },
        },
      },
      cmake_notifications = {
        runner = { enabled = true },
        executor = { enabled = true },
        spinner = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" }, -- icons used for progress display
        refresh_rate_ms = 100, -- how often to iterate icons
      }, }
  end
}
