]> git.r.bdr.sh - rbdr/nota.nvim/blob - plugin/nota.lua
4e621706e1b8243a748f848456a18d26769f0cf1
[rbdr/nota.nvim] / plugin / nota.lua
1 --- @type tNotaConfiguration
2 -- @field [nota_home] string the location of your notes. All other paths will be relative to this. Defaults to $XDG_DATA_HOME/nota or ~/.local/share/nota
3 -- @field [default_keybinds] boolean whether to use the default key bindings or not. Defaults to true.
4 -- @field [periodic_locations] tPeriodicLocationsConfiguration (optional) the location of periodic notes.
5 -- @field [templates] tTemplatesConfiguration (optional) the location of templates for periodic notes.
6 -- @field [tasks] tTasksConfiguration (optional) configuration for task tools
7 -- @field [learning] tLearningConfiguration (optional) configuration for learning tools
8 -- @field [plan] tPlanConfiguration (optional) configuration for .plan file tools
9
10 --- @type tPeriodicLocationsConfiguration
11 -- @field [daily] string (optional) the location where daily notes are stored relative to nota_home. Defaults to periodic/daily.
12 -- @field [weekly] string (optional) the location where weekly notes are stored relative to nota_home. Defaults to periodic/weekly.
13 -- @field [monthly] string (optional) the location where monthly notes are stored relative to nota_home. Defaults to periodic/monthly.
14 -- @field [seasonal] string (optional) the location where seasonal notes are stored relative to nota_home. Defaults to periodic/seasonal.
15 -- @field [yearly] string (optional) the location where yearly notes are stored relative to nota_home. Defaults to periodic/yearly.
16
17 --- @type tTemplatesConfiguration
18 -- @field [daily] string (optional) the location to the daily note template file relative to nota_home. Defaults to templates/daily.md
19 -- @field [weekly] string (optional) the location to the weekly note template file relative to nota_home. Defaults to templates/weekly.md
20 -- @field [monthly] string (optional) the location to the monthly note template file relative to nota_home. Defaults to templates/monthly.md
21 -- @field [seasonal] string (optional) the location to the seasonal note template file relative to nota_home. Defaults to templates/seasonal.md
22 -- @field [yearly] string (optional) the location to the seasonal note template file relative to nota_home. Defaults to templates/yearly.md
23 -- @field [plan] string (optional) the location to the plan template file relative to nota_home. Defaults to templates/plan.md
24
25 --- @type tTasksConfiguration
26 -- @field [inbox] string (optional) the location of the inbox for capturing tasks relative to nota_home. Default is "inbox.md"
27 -- @field [someday] string (optional) the location of the inbox for indefinitely deferred tasks relative to nota_home. Default is "someday.md"
28
29 --- @type tLearningConfiguration
30 -- @field [learning_file] string (optional) the location of the learning file for capturing entries relative to nota_home. Default is "learning.md"
31 -- @field [prefix] string (optional) the prefix to add when capturing learning entries. Default is "%Y-%m-%d: "
32
33 --- @type tPlanConfiguration
34 -- @field [archive] string (optional) the location of the plan archive relative to nota_home. Default is "plans"
35 -- @field [plan_file] string (optional) the location of the active plan file. Default is "~/.plan"
36
37 --- Sets up the Nota commands and keybins
38 -- @param user_configuration tNotaConfiguration the user provided configuration for the plugin
39 function setup(user_configuration)
40 local api = vim.api
41 local fs = vim.loop
42 local fn = vim.fs
43
44 if not api.nvim_create_user_command then
45 return
46 end
47
48 local command = api.nvim_create_user_command
49
50 local configuration = require('configuration').configure(user_configuration)
51
52 if configuration.default_keybinds then
53 local configuration = require('keybinds').bind()
54 end
55
56 -- Note Handling Commands
57 command('NotaOpenDailyNote', function() require('notes').open_daily(configuration) end, { nargs = 0 })
58 command('NotaOpenWeeklyNote', function() require('notes').open_weekly(configuration) end, { nargs = 0 })
59 command('NotaOpenMonthlyNote', function() require('notes').open_monthly(configuration) end, { nargs = 0 })
60 command('NotaOpenSeasonalNote', function() require('notes').open_seasonal(configuration) end, { nargs = 0 })
61 command('NotaOpenYearlyNote', function() require('notes').open_yearly(configuration) end, { nargs = 0 })
62 command('NotaOpenNote', function() require('notes').open(configuration) end, { nargs = 0 })
63
64 -- Task View Handling Commands
65 command('NotaOpenAgenda', function() require('task_views').open_agenda(configuration) end, { nargs = 0 })
66 command('NotaOpenOpen', function() require('task_views').open_open(configuration) end, { nargs = 0 })
67 command('NotaOpenJournal', function() require('task_views').open_journal(configuration) end, { nargs = 0 })
68
69 -- Task Handling Commands
70 command('NotaToggleTask', function() require('tasks').toggle(configuration) end, { nargs = 0 })
71 command('NotaInsertTask', function() require('tasks').insert(configuration) end, { nargs = 0 })
72 command('NotaCaptureTask', function() require('tasks').capture(configuration) end, { nargs = 0 })
73 command('NotaTagTask', function() require('tasks').tag(configuration) end, { nargs = 0 })
74 command('NotaRescheduleTaskToday', function() require('tasks').reschedule_for_today(configuration) end, { nargs = 0 })
75 command('NotaRescheduleTaskTomorrow', function() require('tasks').reschedule_for_tomorrow(configuration) end, { nargs = 0 })
76 command('NotaRescheduleTaskSomeday', function() require('tasks').reschedule_for_someday(configuration) end, { nargs = 0 })
77 command('NotaRescheduleTask', function(options) require('tasks').reschedule(configuration, options.args) end, { nargs = 1 })
78
79 -- .plan Handling Commands
80 command('NotaOpenPlan', function() require('plan').open(configuration) end, { nargs = 0 })
81 command('NotaCapturePlan', function() require('plan').capture(configuration) end, { nargs = 0 })
82
83 -- Learning File Handling Commands
84 command('NotaOpenLearning', function() require('learning').open(configuration) end, { nargs = 0 })
85 command('NotaCaptureLearning', function() require('learning').capture(configuration) end, { nargs = 0 })
86 end