---@class pending.FoldingConfig ---@field foldtext? string|false ---@class pending.ResolvedFolding ---@field enabled boolean ---@field foldtext string|false ---@class pending.Icons ---@field pending string ---@field done string ---@field priority string ---@field wip string ---@field blocked string ---@field due string ---@field recur string ---@field category string ---@class pending.GcalConfig ---@field remote_delete? boolean ---@field credentials_path? string ---@field client_id? string ---@field client_secret? string ---@class pending.GtasksConfig ---@field remote_delete? boolean ---@field credentials_path? string ---@field client_id? string ---@field client_secret? string ---@class pending.S3Config ---@field bucket string ---@field key? string ---@field profile? string ---@field region? string ---@class pending.SyncConfig ---@field remote_delete? boolean ---@field gcal? pending.GcalConfig ---@field gtasks? pending.GtasksConfig ---@field s3? pending.S3Config ---@class pending.Keymaps ---@field close? string|false ---@field toggle? string|false ---@field view? string|false ---@field priority? string|false ---@field date? string|false ---@field undo? string|false ---@field filter? string|false ---@field open_line? string|false ---@field open_line_above? string|false ---@field a_task? string|false ---@field i_task? string|false ---@field a_category? string|false ---@field i_category? string|false ---@field next_header? string|false ---@field prev_header? string|false ---@field next_task? string|false ---@field prev_task? string|false ---@field category? string|false ---@field recur? string|false ---@field move_down? string|false ---@field move_up? string|false ---@field wip? string|false ---@field blocked? string|false ---@class pending.CategoryViewConfig ---@field order? string[] ---@field folding? boolean|pending.FoldingConfig ---@class pending.QueueViewConfig ---@class pending.ViewConfig ---@field default? 'category'|'priority' ---@field eol_format? string ---@field category? pending.CategoryViewConfig ---@field queue? pending.QueueViewConfig ---@class pending.Config ---@field data_path string ---@field default_category string ---@field date_format string ---@field date_syntax string ---@field recur_syntax string ---@field someday_date string ---@field input_date_formats? string[] ---@field drawer_height? integer ---@field debug? boolean ---@field keymaps pending.Keymaps ---@field view pending.ViewConfig ---@field max_priority? integer ---@field sync? pending.SyncConfig ---@field icons pending.Icons ---@class pending.config local M = {} ---@type pending.Config local defaults = { data_path = vim.fn.stdpath('data') .. '/pending/tasks.json', default_category = 'Todo', date_format = '%b %d', date_syntax = 'due', recur_syntax = 'rec', someday_date = '9999-12-30', max_priority = 3, view = { default = 'category', eol_format = '%c %r %d', category = { order = {}, folding = true, }, queue = {}, }, keymaps = { close = 'q', toggle = '', view = '', priority = '!', date = 'D', undo = 'U', filter = 'F', open_line = 'o', open_line_above = 'O', a_task = 'at', i_task = 'it', a_category = 'aC', i_category = 'iC', next_header = ']]', prev_header = '[[', next_task = ']t', prev_task = '[t', category = 'gc', recur = 'gr', move_down = 'J', move_up = 'K', wip = 'gw', blocked = 'gb', }, sync = {}, icons = { pending = ' ', done = 'x', priority = '!', wip = '>', blocked = '=', due = '.', recur = '~', category = '#', }, } ---@type pending.Config? local _resolved = nil ---@return pending.Config function M.get() if _resolved then return _resolved end local user = vim.g.pending or {} _resolved = vim.tbl_deep_extend('force', defaults, user) return _resolved end ---@return nil function M.reset() _resolved = nil end ---@return pending.ResolvedFolding function M.resolve_folding() local raw = M.get().view.category.folding if raw == false then return { enabled = false, foldtext = false } elseif raw == true or raw == nil then return { enabled = true, foldtext = '%c (%n tasks)' } end return { enabled = true, foldtext = raw.foldtext or false } end return M