From c63484d087db1b2388ef7c64518ed5a133f558c3 Mon Sep 17 00:00:00 2001 From: Charles Danesi Date: Sat, 9 May 2026 21:56:42 -0400 Subject: [PATCH] chore: update telekasten config add helper commands for additional note creation (review templates) fix markdown wrap re-enable note link commands --- .config/nvim/lua/core/autocmds.lua | 9 +- .config/nvim/lua/core/options.lua | 4 +- .config/nvim/lua/plugins/telekasten.lua | 114 ++++++++++++++++++++---- 3 files changed, 104 insertions(+), 23 deletions(-) diff --git a/.config/nvim/lua/core/autocmds.lua b/.config/nvim/lua/core/autocmds.lua index a7d11ce..ec99fa7 100644 --- a/.config/nvim/lua/core/autocmds.lua +++ b/.config/nvim/lua/core/autocmds.lua @@ -4,9 +4,12 @@ local o = vim.opt_local -- ──────────────────[ set options for markdown files ]─────────────── autocmd('FileType', { - pattern = 'markdown', + pattern = { 'markdown', 'telekasten' }, callback = function() - -- o.colorcolumn = '+1,+2' + o.colorcolumn = '81' + o.wrap = true + o.linebreak = true + o.breakindent = true o.textwidth = 80 o.spell = true end, @@ -32,4 +35,4 @@ autocmd('TextYankPost', { callback = function() vim.highlight.on_yank({ higroup = 'IncSearch', timeout = '800' }) end, -}) \ No newline at end of file +}) diff --git a/.config/nvim/lua/core/options.lua b/.config/nvim/lua/core/options.lua index dabf91c..1a07440 100644 --- a/.config/nvim/lua/core/options.lua +++ b/.config/nvim/lua/core/options.lua @@ -5,7 +5,7 @@ local g = vim.g g.netrw_liststyle = 3 g.netrw_banner = 0 o.clipboard:append('unnamedplus') -- use system clipboard as the default register -o.cdhome = false -- :cd shows cwd +o.cdhome = false -- :cd shows cwd o.backspace = 'indent,eol,start' o.spelllang = 'en_us' -- ───────────────────────────────────────────────────── appearance ── @@ -73,4 +73,4 @@ o.ignorecase = true o.smartcase = true o.iskeyword:append('-') -- consider string-string as a whole word -- ───────────────────────────────────────────────────── completion ── -o.completeopt = 'menu,preview,noselect' \ No newline at end of file +o.completeopt = 'menu,preview,noselect' diff --git a/.config/nvim/lua/plugins/telekasten.lua b/.config/nvim/lua/plugins/telekasten.lua index accce81..e16a87c 100644 --- a/.config/nvim/lua/plugins/telekasten.lua +++ b/.config/nvim/lua/plugins/telekasten.lua @@ -1,20 +1,99 @@ +local zettel = os.getenv('HOME') .. '/zettel' + +local function render_template(template_path, vars) + local lines = vim.fn.readfile(template_path) + local text = table.concat(lines, '\n') + + for key, value in pairs(vars) do + text = text:gsub('{{' .. key .. '}}', value) + end + + return vim.split(text, '\n', { plain = true }) +end + +local function open_review(kind, filename, template, vars) + local path = zettel .. '/journal/' .. kind .. '/' .. filename .. '.md' + + vim.fn.mkdir(vim.fn.fnamemodify(path, ':h'), 'p') + vim.cmd('edit ' .. vim.fn.fnameescape(path)) + + if vim.fn.filereadable(path) == 0 or vim.fn.getfsize(path) == 0 then + local lines = render_template(zettel .. '/templates/' .. template, vars) + vim.api.nvim_buf_set_lines(0, 0, -1, false, lines) + vim.cmd('write') + end +end + +vim.keymap.set('n', 'zM', function() + local y = os.date('%Y') + local m = os.date('%m') + + open_review('monthly', y .. '-' .. m, 'monthly-review.md', { + title = os.date('%B %Y'), + date = os.date('%Y-%m-%d'), + year = y, + month = m, + }) +end, { desc = 'Open monthly review' }) + +vim.keymap.set('n', 'zQ', function() + local y = os.date('%Y') + local m = tonumber(os.date('%m')) + local q = tostring(math.floor((m - 1) / 3) + 1) + + open_review('quarterly', y .. '-Q' .. q, 'quarterly-review.md', { + title = y .. ' Q' .. q, + date = os.date('%Y-%m-%d'), + year = y, + quarter = q, + }) +end, { desc = 'Open quarterly review' }) + +vim.keymap.set('n', 'zY', function() + local y = os.date('%Y') + + open_review('yearly', y, 'yearly-review.md', { + title = y .. ' Yearly Review', + date = os.date('%Y-%m-%d'), + year = y, + }) +end, { desc = 'Open yearly review' }) + +vim.api.nvim_create_autocmd('BufEnter', { + callback = function(args) + local file = vim.api.nvim_buf_get_name(args.buf) + + if vim.startswith(file, zettel .. '/') and file:match('%.md$') then + vim.keymap.set('i', '[[', function() + vim.cmd('stopinsert') + vim.cmd('Telekasten insert_link') + end, { + buffer = args.buf, + desc = 'Telekasten insert note link', + }) + end + end, +}) + return { 'renerocksai/telekasten.nvim', - enabled = true, - dependencies = { 'nvim-telescope/telescope.nvim', 'nvim-telekasten/calendar-vim' }, + dependencies = { + 'nvim-telescope/telescope.nvim', + 'nvim-telekasten/calendar-vim', + }, event = 'VeryLazy', cmd = 'Telekasten', opts = { -- default vault (notebook) - home = os.getenv('HOME') .. '/notes', - dailies = 'dailies/', - weeklies = 'weeklies/', - templates = 'templates/', + home = zettel, + dailies = 'journal/daily', + weeklies = 'journal/weekly', + templates = 'templates', -- default templates - template_new_note = nil, - template_new_daily = os.getenv('HOME') .. '/notes/templates/dailytemplate.md', - template_new_weekly = os.getenv('HOME') .. '/notes/templates/weeklytemplate.md', + template_new_note = zettel .. '/templates/zettel.md', + template_new_daily = zettel .. '/templates/journal-entry.md', + template_new_weekly = zettel .. '/templates/weekly-review.md', image_subdir = '_resources', image_link_style = 'wiki', @@ -26,14 +105,15 @@ return { subdirs_in_links = false, extension = '.md', - auto_set_filetype = true, + auto_set_filetype = false, new_note_filename = 'uuid-title', -- possible choices 'title', 'uuid', 'uuid-title', 'title-uuid' uuid_type = '%Y%m%d%H%M%S', - uuid_sep = ' ', + -- uuid_sep = ' ', filename_small_case = true, - sort = 'modified', -- or 'filename' + filename_space_subst = '-', + sort = 'filename', -- or 'modified' or 'created' command_palette_theme = 'dropdown', - show_tags_theme = 'get_cursor', + show_tags_theme = 'ivy', rename_update_links = true, follow_creates_nonexisting = true, @@ -43,7 +123,7 @@ return { -- enter any additional vaults here vaults = { blog = { - home = os.getenv('HOME') .. '/blog/content/posts', + home = os.getenv('HOME') .. '/code/projects/blog-danesi.dev/content/posts', dailies = nil, weeklies = nil, templates = vim.fn.expand('~/Templates/blog/'), @@ -57,9 +137,6 @@ return { auto_set_filetype = false, install_syntax = false, }, - testing = { - home = os.getenv('HOME') .. '/Evernote Export.2/notes', - }, }, media_extensions = { @@ -132,5 +209,6 @@ return { ), vim.keymap.set({ 'n', 'v' }, 'zt', 'Telekasten toggle_todo', { desc = 'Toggle todo' }), + vim.keymap.set('n', 'zl', 'Telekasten insert_link', { desc = 'Link to a note' }), -- vim.keymap.set('i', '[[', 'Telekasten insert_link', { desc = 'Link to a note' }), -} \ No newline at end of file +}