------------------------------------------------------------------------------- -- Configuration for nota ------------------------------------------------------------------------------- local Configuration = {} local Util = require('util') ------------------------------------------------------------------------------- -- Internal Functions ------------------------------------------------------------------------------- local fs = vim.loop local defaults = { nota_home = '~/.local/share/nota', -- Root location in which to store all notes default_keybinds = true, -- Whether or not to set the default keybinds periodic_locations = { daily = 'periodic/daily', -- Location to store daily notes, relative to nota_home weekly = 'periodic/weekly', -- Location to store weekly notes, relative to nota_home monthly = 'periodic/monthly', -- Location to store monthly notes, relative to nota_home seasonal = 'periodic/seasonal', -- Location to store seasonal notes, relative to nota_home yearly = 'periodic/yearly' -- Location to store yearly notes, relative to nota_home }, templates = { daily = 'templates/daily.md', -- Template for daily notes, relative to nota_home weekly = 'templates/weekly.md', -- Template for weekly notes, relative to nota_home monthly = 'templates/monthly.md', -- Template for monthly notes, relative to nota_home seasonal = 'templates/seasonal.md', -- Template for seasonal notes, relative to nota_home yearly = 'templates/yearly.md', -- Template for yearly notes, relative to nota_home plan = 'templates/plan.md' -- Template for plan notes, relative to nota_home }, tasks = { inbox = 'inbox.md', -- Location of the file in which to store newly captured tasks, relative to nota_home someday = 'someday.md' -- Location of the file in which to store indefinitely deferred tasks, relative to nota_home }, learning = { learning_file = 'learning.md', -- Location of the file in which to store learning entries, relative to nota_home prefix = '%Y-%m-%d: ' -- Prefix to add when capturing learning entries }, plan = { archive = 'plans', -- Location of the plan archives. plan_file = '~/.plan' -- Location of the active plan, the default is what is expected by finger. } } -- Recursively extends a table with another local function extend(target, extender) for key, value in pairs(extender) do if type(target[key]) == 'table' and type(value) == 'table' then extend(target[key], value) else target[key] = value end end end ------------------------------------------------------------------------------- -- Public Interface ------------------------------------------------------------------------------- Configuration.configuration = {} extend(Configuration.configuration, defaults) --- Extends configuration with another configuration function Configuration.configure(configuration) configuration = configuration or {} extend(Configuration.configuration, configuration) end --- Gets expanded paths relative to nota_home -- @param path string the relative path to expand function Configuration.path_for(path) if not path then return vim.fn.expand(Configuration.configuration.nota_home) end return Util.join(vim.fn.expand(Configuration.configuration.nota_home), path) end --- Loads a template by template name function Configuration.load_template(type) local template_path = Configuration.path_for(Configuration.configuration.templates[type]) local template_file = io.open(template_path, 'r') if not template_file then return '' end local content = template_file:read('*a') template_file:close() return content end return Configuration