return {
  "catppuccin/nvim",
  init = function()
    vim.cmd.colorscheme("catppuccin")
  end,

  name = "catppuccin",
  priority = 1000,
  -- Thanks: https://github.com/catppuccin/nvim/discussions/323#discussioncomment-5287724
  opts = function()
    return {
      background = {
        light = "latte",
        dark = "mocha",
      },
      color_overrides = {
        latte = {
          rosewater = "#c14a4a",
          flamingo = "#c14a4a",
          red = "#c14a4a",
          maroon = "#c14a4a",
          pink = "#945e80",
          mauve = "#945e80",
          peach = "#c35e0a",
          yellow = "#b47109",
          green = "#6c782e",
          teal = "#4c7a5d",
          sky = "#4c7a5d",
          sapphire = "#4c7a5d",
          blue = "#45707a",
          lavender = "#45707a",
          text = "#654735",
          subtext1 = "#73503c",
          subtext0 = "#805942",
          overlay2 = "#8c6249",
          overlay1 = "#8c856d",
          overlay0 = "#a69d81",
          surface2 = "#bfb695",
          surface1 = "#d1c7a3",
          surface0 = "#e3dec3",
          base = "#f9f5d7",
          mantle = "#f0ebce",
          crust = "#e8e3c8",
        },
        mocha = {
          rosewater = "#ea6962",
          flamingo = "#ea6962",
          red = "#ea6962",
          maroon = "#ea6962",
          pink = "#d3869b",
          mauve = "#d3869b",
          peach = "#e78a4e",
          yellow = "#d8a657",
          green = "#a9b665",
          teal = "#89b482",
          sky = "#89b482",
          sapphire = "#89b482",
          blue = "#7daea3",
          lavender = "#7daea3",
          text = "#ebdbb2",
          subtext1 = "#d5c4a1",
          subtext0 = "#bdae93",
          overlay2 = "#a89984",
          overlay1 = "#928374",
          overlay0 = "#595959",
          surface2 = "#4d4d4d",
          surface1 = "#404040",
          surface0 = "#292929",
          base = "#1d2021",
          mantle = "#191b1c",
          crust = "#141617",
        },
      },
      highlight_overrides = {
        all = function(colors)
          return {
            CurSearch = { bg = colors.rosewater },
            IncSearch = { bg = colors.rosewater },
            DashboardFooter = { fg = colors.overlay0 },
            TreesitterContextBottom = { style = {} },
            WinSeparator = { fg = colors.overlay0, style = { "bold" } },
            Visual = { bg = "#BB4747", fg = "white" },
            DapBreakpoint = { bg = "#552B24" },
            DapBreakpointStopped = { bg = "#244C55" },

            NeotestPassed = { fg = colors.green },
            NeotestFailed = { fg = colors.red },
            NeotestRunning = { fg = colors.yellow },
            NeotestSkipped = { fg = colors.blue },
            NeotestFile = { fg = colors.peach },
            NeotestNamespace = { fg = colors.peach },
            NeotestDir = { fg = colors.peach },
            NeotestFocused = { fg = colors.mauve, bold = true, underline = true },
            NeotestAdapterName = { fg = colors.red },
            NeotestIndent = { fg = colors.yellow },
            NeotestExpandMarker = { fg = colors.yellow },
            NeotestWinSelect = { fg = colors.yellow, bold = true },
            NeotestTest = { fg = colors.subtext2 },

            TreesitterContext = { bg = "#2A1E39" },
            CmpItemMenu = { fg = colors.surface2 },
            CursorLine = { bg = "#261F1E" },
            CursorLineNr = { fg = colors.text },
            FloatBorder = { bg = colors.base, fg = colors.surface0 },
            GitSignsChange = { fg = colors.peach },
            LineNr = { fg = colors.overlay0 },
            LspInfoBorder = { link = "FloatBorder" },
            NeoTreeDirectoryIcon = { fg = colors.subtext1 },
            NeoTreeDirectoryName = { fg = colors.subtext1 },
            NeoTreeFloatBorder = { link = "TelescopeResultsBorder" },
            NeoTreeGitConflict = { fg = colors.red },
            NeoTreeGitDeleted = { fg = colors.red },
            NeoTreeGitIgnored = { fg = colors.overlay0 },
            NeoTreeGitModified = { fg = colors.peach },
            NeoTreeGitStaged = { fg = colors.green },
            NeoTreeGitUnstaged = { fg = colors.red },
            NeoTreeGitUntracked = { fg = colors.green },
            NeoTreeIndent = { fg = colors.surface1 },
            NeoTreeNormal = { bg = colors.mantle },
            NeoTreeNormalNC = { bg = colors.mantle },
            NeoTreeRootName = { fg = colors.subtext1, style = { "bold" } },
            NeoTreeTabActive = { fg = colors.text, bg = colors.mantle },
            NeoTreeTabInactive = { fg = colors.surface2, bg = colors.crust },
            NeoTreeTabSeparatorActive = { fg = colors.mantle, bg = colors.mantle },
            NeoTreeTabSeparatorInactive = { fg = colors.crust, bg = colors.crust },
            NeoTreeWinSeparator = { fg = colors.base, bg = colors.base },
            NormalFloat = { bg = colors.base },
            Pmenu = { bg = colors.mantle, fg = "" },
            PmenuSel = { bg = colors.surface0, fg = "" },
            TelescopePreviewBorder = { bg = colors.crust, fg = colors.crust },
            TelescopePreviewNormal = { bg = colors.crust },
            TelescopePreviewTitle = { fg = colors.crust, bg = colors.crust },
            TelescopePromptBorder = { bg = colors.surface0, fg = colors.surface0 },
            TelescopePromptCounter = { fg = colors.mauve, style = { "bold" } },
            TelescopePromptNormal = { bg = colors.surface0 },
            TelescopePromptPrefix = { bg = colors.surface0 },
            TelescopePromptTitle = { fg = colors.surface0, bg = colors.surface0 },
            TelescopeResultsBorder = { bg = colors.mantle, fg = colors.mantle },
            TelescopeResultsNormal = { bg = colors.mantle },
            TelescopeResultsTitle = { fg = colors.mantle, bg = colors.mantle },
            TelescopeSelection = { bg = colors.surface0 },
            VertSplit = { bg = colors.base, fg = colors.surface0 },
            WhichKeyFloat = { bg = colors.mantle },
            YankHighlight = { bg = colors.surface2 },
            FidgetTask = { fg = colors.subtext2 },
            FidgetTitle = { fg = colors.peach },

            IblIndent = { fg = colors.surface0 },
            IblScope = { fg = colors.overlay0 },

            Boolean = { fg = colors.mauve },
            Number = { fg = colors.mauve },
            Float = { fg = colors.mauve },

            PreProc = { fg = colors.mauve },
            PreCondit = { fg = colors.mauve },
            Include = { fg = colors.mauve },
            Define = { fg = colors.mauve },
            Conditional = { fg = colors.red },
            Repeat = { fg = colors.red },
            Keyword = { fg = colors.red },
            Typedef = { fg = colors.red },
            Exception = { fg = colors.red },
            Statement = { fg = colors.red },

            Error = { fg = colors.red },
            StorageClass = { fg = colors.peach },
            Tag = { fg = colors.peach },
            Label = { fg = colors.peach },
            Structure = { fg = colors.peach },
            Operator = { fg = colors.peach },
            Title = { fg = colors.peach },
            Special = { fg = colors.yellow },
            SpecialChar = { fg = colors.yellow },
            Type = { fg = colors.yellow, style = { "bold" } },
            Function = { fg = colors.green, style = { "bold" } },
            Delimiter = { fg = colors.subtext2 },
            Ignore = { fg = colors.subtext2 },
            Macro = { fg = colors.teal },

            TSAnnotation = { fg = colors.mauve },
            TSAttribute = { fg = colors.mauve },
            TSBoolean = { fg = colors.mauve },
            TSCharacter = { fg = colors.teal },
            TSCharacterSpecial = { link = "SpecialChar" },
            TSComment = { link = "Comment" },
            TSConditional = { fg = colors.red },
            TSConstBuiltin = { fg = colors.mauve },
            TSConstMacro = { fg = colors.mauve },
            TSConstant = { fg = colors.text },
            TSConstructor = { fg = colors.green },
            TSDebug = { link = "Debug" },
            TSDefine = { link = "Define" },
            TSEnvironment = { link = "Macro" },
            TSEnvironmentName = { link = "Type" },
            TSError = { link = "Error" },
            TSException = { fg = colors.red },
            TSField = { fg = colors.blue },
            TSFloat = { fg = colors.mauve },
            TSFuncBuiltin = { fg = colors.green },
            TSFuncMacro = { fg = colors.green },
            TSFunction = { fg = colors.green },
            TSFunctionCall = { fg = colors.green },
            TSInclude = { fg = colors.red },
            TSKeyword = { fg = colors.red },
            TSKeywordFunction = { fg = colors.red },
            TSKeywordOperator = { fg = colors.peach },
            TSKeywordReturn = { fg = colors.red },
            TSLabel = { fg = colors.peach },
            TSLiteral = { link = "String" },
            TSMath = { fg = colors.blue },
            TSMethod = { fg = colors.green },
            TSMethodCall = { fg = colors.green },
            TSNamespace = { fg = colors.yellow },
            TSNone = { fg = colors.text },
            TSNumber = { fg = colors.mauve },
            TSOperator = { fg = colors.peach },
            TSParameter = { fg = colors.text },
            TSParameterReference = { fg = colors.text },
            TSPreProc = { link = "PreProc" },
            TSProperty = { fg = colors.blue },
            TSPunctBracket = { fg = colors.text },
            TSPunctDelimiter = { link = "Delimiter" },
            TSPunctSpecial = { fg = colors.blue },
            TSRepeat = { fg = colors.red },
            TSStorageClass = { fg = colors.peach },
            TSStorageClassLifetime = { fg = colors.peach },
            TSStrike = { fg = colors.subtext2 },
            TSString = { fg = colors.teal },
            TSStringEscape = { fg = colors.green },
            TSStringRegex = { fg = colors.green },
            TSStringSpecial = { link = "SpecialChar" },
            TSSymbol = { fg = colors.text },
            TSTag = { fg = colors.peach },
            TSTagAttribute = { fg = colors.green },
            TSTagDelimiter = { fg = colors.green },
            TSText = { fg = colors.green },
            TSTextReference = { link = "Constant" },
            TSTitle = { link = "Title" },
            TSTodo = { link = "Todo" },
            TSType = { fg = colors.yellow, style = { "bold" } },
            TSTypeBuiltin = { fg = colors.yellow, style = { "bold" } },
            TSTypeDefinition = { fg = colors.yellow, style = { "bold" } },
            TSTypeQualifier = { fg = colors.peach, style = { "bold" } },
            TSURI = { fg = colors.blue },
            TSVariable = { fg = colors.text },
            TSVariableBuiltin = { fg = colors.mauve },

            ["@annotation"] = { link = "TSAnnotation" },
            ["@attribute"] = { link = "TSAttribute" },
            ["@boolean"] = { link = "TSBoolean" },
            ["@character"] = { link = "TSCharacter" },
            ["@character.special"] = { link = "TSCharacterSpecial" },
            ["@comment"] = { link = "TSComment" },
            ["@conceal"] = { link = "Grey" },
            ["@conditional"] = { link = "TSConditional" },
            ["@constant"] = { link = "TSConstant" },
            ["@constant.builtin"] = { link = "TSConstBuiltin" },
            ["@constant.macro"] = { link = "TSConstMacro" },
            ["@constructor"] = { link = "TSConstructor" },
            ["@debug"] = { link = "TSDebug" },
            ["@define"] = { link = "TSDefine" },
            ["@error"] = { link = "TSError" },
            ["@exception"] = { link = "TSException" },
            ["@field"] = { link = "TSField" },
            ["@float"] = { link = "TSFloat" },
            ["@function"] = { link = "TSFunction" },
            ["@function.builtin"] = { link = "TSFuncBuiltin" },
            ["@function.call"] = { link = "TSFunctionCall" },
            ["@function.macro"] = { link = "TSFuncMacro" },
            ["@include"] = { link = "TSInclude" },
            ["@keyword"] = { link = "TSKeyword" },
            ["@keyword.function"] = { link = "TSKeywordFunction" },
            ["@keyword.operator"] = { link = "TSKeywordOperator" },
            ["@keyword.return"] = { link = "TSKeywordReturn" },
            ["@label"] = { link = "TSLabel" },
            ["@math"] = { link = "TSMath" },
            ["@method"] = { link = "TSMethod" },
            ["@method.call"] = { link = "TSMethodCall" },
            ["@namespace"] = { link = "TSNamespace" },
            ["@none"] = { link = "TSNone" },
            ["@number"] = { link = "TSNumber" },
            ["@operator"] = { link = "TSOperator" },
            ["@parameter"] = { link = "TSParameter" },
            ["@parameter.reference"] = { link = "TSParameterReference" },
            ["@preproc"] = { link = "TSPreProc" },
            ["@property"] = { link = "TSProperty" },
            ["@punctuation.bracket"] = { link = "TSPunctBracket" },
            ["@punctuation.delimiter"] = { link = "TSPunctDelimiter" },
            ["@punctuation.special"] = { link = "TSPunctSpecial" },
            ["@repeat"] = { link = "TSRepeat" },
            ["@storageclass"] = { link = "TSStorageClass" },
            ["@storageclass.lifetime"] = { link = "TSStorageClassLifetime" },
            ["@strike"] = { link = "TSStrike" },
            ["@string"] = { link = "TSString" },
            ["@string.escape"] = { link = "TSStringEscape" },
            ["@string.regex"] = { link = "TSStringRegex" },
            ["@string.special"] = { link = "TSStringSpecial" },
            ["@symbol"] = { link = "TSSymbol" },
            ["@tag"] = { link = "TSTag" },
            ["@tag.attribute"] = { link = "TSTagAttribute" },
            ["@tag.delimiter"] = { link = "TSTagDelimiter" },
            ["@text"] = { link = "TSText" },
            ["@text.danger"] = { link = "TSDanger" },
            ["@text.diff.add"] = { link = "diffAdded" },
            ["@text.diff.delete"] = { link = "diffRemoved" },
            ["@text.emphasis"] = { link = "TSEmphasis" },
            ["@text.environment"] = { link = "TSEnvironment" },
            ["@text.environment.name"] = { link = "TSEnvironmentName" },
            ["@text.literal"] = { link = "TSLiteral" },
            ["@text.math"] = { link = "TSMath" },
            ["@text.note"] = { link = "TSNote" },
            ["@text.reference"] = { link = "TSTextReference" },
            ["@text.strike"] = { link = "TSStrike" },
            ["@text.strong"] = { link = "TSStrong" },
            ["@text.title"] = { link = "TSTitle" },
            ["@text.todo"] = { link = "TSTodo" },
            ["@text.todo.checked"] = { link = "Green" },
            ["@text.todo.unchecked"] = { link = "Ignore" },
            ["@text.underline"] = { link = "TSUnderline" },
            ["@text.uri"] = { link = "TSURI" },
            ["@text.warning"] = { link = "TSWarning" },
            ["@todo"] = { link = "TSTodo" },
            ["@type"] = { link = "TSType" },
            ["@type.builtin"] = { link = "TSTypeBuiltin" },
            ["@type.definition"] = { link = "TSTypeDefinition" },
            ["@type.qualifier"] = { link = "TSTypeQualifier" },
            ["@uri"] = { link = "TSURI" },
            ["@variable"] = { link = "TSVariable" },
            ["@variable.builtin"] = { link = "TSVariableBuiltin" },

            ["@lsp.type.class"] = { link = "TSType" },
            ["@lsp.type.comment"] = { link = "TSComment" },
            ["@lsp.type.decorator"] = { link = "TSFunction" },
            ["@lsp.type.enum"] = { link = "TSType" },
            ["@lsp.type.enumMember"] = { link = "TSProperty" },
            ["@lsp.type.events"] = { link = "TSLabel" },
            ["@lsp.type.function"] = { link = "TSFunction" },
            ["@lsp.type.interface"] = { link = "TSType" },
            ["@lsp.type.keyword"] = { link = "TSKeyword" },
            ["@lsp.type.macro"] = { link = "TSConstMacro" },
            ["@lsp.type.method"] = { link = "TSMethod" },
            ["@lsp.type.modifier"] = { link = "TSTypeQualifier" },
            ["@lsp.type.namespace"] = { link = "TSNamespace" },
            ["@lsp.type.number"] = { link = "TSNumber" },
            ["@lsp.type.operator"] = { link = "TSOperator" },
            ["@lsp.type.parameter"] = { link = "TSParameter" },
            ["@lsp.type.property"] = { link = "TSProperty" },
            ["@lsp.type.regexp"] = { link = "TSStringRegex" },
            ["@lsp.type.string"] = { link = "TSString" },
            ["@lsp.type.struct"] = { link = "TSType" },
            ["@lsp.type.type"] = { link = "TSType" },
            ["@lsp.type.typeParameter"] = { link = "TSTypeDefinition" },
            ["@lsp.type.variable"] = { link = "TSVariable" },
          }
        end,
      },
      integrations = {
        telescope = {
          enabled = true,
          style = "nvchad",
        },
      },
      dim_inactive = {
        enabled = true,   -- dims the background color of inactive window
        shade = "light",
        percentage = 0.5, -- percentage of the shade to apply to the inactive window
      },
    }
  end,
}
