--- /dev/null
+-- TODO: finish this
+-- Create a function that deindents all lines according to the indentation of the first
+local function d(s)
+ local std = require("std")
+ local _, e = string.find(s, '^%s*')
+ local ss = std.string.split(s, '')
+ local dedent = function(str) return str:sub(e + 1) end
+ return std.functional.map(dedent, std.elems, ss)
+end
+
+---@type LazyPluginSpec
+return {
+ {
+ "nvim-orgmode/orgmode",
+ opts = {
+ org_agenda_files = { "~/org/**/*.org" },
+ org_default_notes_file = "~/org/refile.org",
+ mappings = {
+ prefix = "go",
+ global = {
+ org_agenda = "goa",
+ org_capture = "goc",
+ },
+ },
+ win_split_mode = function(name)
+ local bufnr = vim.api.nvim_create_buf(false, true)
+ vim.api.nvim_buf_set_name(bufnr, name)
+
+ if name == "orgagenda" then
+ vim.cmd("botright 80vsplit")
+ local win = vim.api.nvim_get_current_win()
+ vim.api.nvim_win_set_buf(win, bufnr)
+ return
+ end
+
+ local fill = 0.8
+ local width = math.floor((vim.o.columns * fill))
+ local height = math.floor((vim.o.lines * fill))
+ local row = math.floor((((vim.o.lines - height) / 2) - 1))
+ local col = math.floor(((vim.o.columns - width) / 2))
+ vim.api.nvim_open_win(bufnr, true, {
+ relative = "editor",
+ width = width,
+ height = height,
+ row = row,
+ col = col,
+ style = "minimal",
+ border = "rounded",
+ })
+ end,
+ org_agenda_span = "week",
+ org_agenda_start_on_weekday = false,
+ org_agenda_start_day = "-2d",
+ org_archive_location = "archive/%s_archive::",
+ org_log_done = 'time',
+ org_log_into_drawer = "LOGBOOK",
+ org_indent_mode = "noindent",
+ org_tags_column = -80, -- flushright
+ org_todo_keywords = { "TODO(t)", "NEXT(n)", "WAITING(w)", "|", "DONE", "CANCELLED" },
+ org_todo_keyword_faces = {
+ TODO = ":foreground #bf616a",
+ NEXT = ":foreground blue",
+ WAITING = ":foreground yellow",
+ CANCELLED = ":foreground grey",
+ },
+ org_capture_templates = {
+ t = {
+ description = "Task",
+ template = "* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:",
+ },
+ l = "Log Task",
+ lh = {
+ description = "Log Task",
+ template = [[
+* DONE %?
+SCHEDULED: %t
+]],
+ },
+ lw = {
+ description = "Log Task (work)",
+ template = [[
+* DONE %?
+SCHEDULED: %t
+]],
+ target = "~/org/work.org",
+ headline = "Tasks"
+ },
+ j = {
+ description = "Journal",
+ template = "\n*** %u\n**** %U - %?",
+ target = "~/org/journal.org",
+ },
+ m = {
+ description = "Meeting",
+ template = "* Meeting %U\n%?",
+ target = "~/org/work.org",
+ headline = "Meetings",
+ },
+ },
+ },
+ dependencies = {
+ {
+ "nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts.highlight) == "table" then
+ opts.hightlight = vim.tbl_extend("error", opts.highlight, {
+ additional_vim_regex_highlighting = { "org" },
+ })
+ end
+ if type(opts.ensure_installed) == "table" then
+ vim.list_extend(opts.ensure_installed, { "org" })
+ end
+ end,
+ },
+ },
+ init = function()
+ require("orgmode").setup_ts_grammar()
+ end,
+ },
+}