2KAbhishek/tdo.nvim

github github
note-taking
stars 43
issues 0
subscribers 5
forks 1
CREATED

2024-02-03

UPDATED

16 days ago


tdo.nvim integrates tdo into your neovim workflow to make managing notes and todos super simple and fast. Demo video

✨ Features

  • All features provided by tdo
  • Various commands to make working with tdo seamless
  • Todo navigation and toggle helpers
  • Integration with telescope for easy notes searching

⚡ Setup

⚙️ Requirements

  • neovim
  • tdo
  • telescope.nvim

💻 Installation

Add the following to your lazy/packer config

    -- Lazy
    {
        '2kabhishek/tdo.nvim',
        dependencies =  'nvim-telescope/telescope.nvim',
        cmd = { 'Tdo', 'TdoEntry', 'TdoNote', 'TdoTodos', 'TdoToggle', 'TdoFind', 'TdoFiles' },
        keys = { '[t', ']t' },
    },

    -- Packer
    use '2kabhishek/tdo.nvim'

🚀 Usage

📡 Commands

tdo.nvim adds the following commands:

  • Tdo <args>: open today's todo when no args, accepts args same as tdo
  • TdoEntry <offset>: open today's journal entry, accepts offset
  • TdoNote: create new note with title, if left empty creates a draft with current timestamp
  • TdoTodos: show all your incomplete todos
  • TdoToggle: toggle todo state
  • TdoFind <text>: interactively search for text in all your notes
  • TdoFiles: review all your notes

⌨️ Mappings

tdo.nvim adds the following mappings:

  • [t / ]t — Go to previous/next todo [ ]

Recommended which-key Mappings

Other than the standard commands, you can use which-key to create your own commands.

I have defined commands for yesterday/tomorrow's todos, commit note and timestamp insertion.

    n = {
        name = 'Notes',
        d = { '<cmd>Tdo<cr>', "Today's Todo" },
        e = { '<cmd>TdoEntry<cr>', "Today's Entry" },
        f = { '<cmd>TdoFiles<cr>', 'All Notes' },
        g = { '<cmd>TdoFind<cr>', 'Find Notes' },
        h = { '<cmd>Tdo -1<cr>', "Yesterday's Todo" },
        j = { "<cmd>put =strftime('%a %d %b %r')<cr>", 'Insert Human Date' },
        J = { "<cmd>put =strftime('%F')<cr>", 'Insert Date' },
        k = { "<cmd>put =strftime('%r')<cr>", 'Insert Human Time' },
        K = { "<cmd>put =strftime('%F-%H-%M')<cr>", 'Insert Time' },
        l = { '<cmd>Tdo 1<cr>', "Tomorrow's Todo" },
        n = { '<cmd>TdoNote<cr>', 'New Note' },
        s = { '<cmd>lua require("tdo").run_with("commit " .. vim.fn.expand("%:p")) vim.notify("Commited!")<cr>', 'Commit Note', },
        t = { '<cmd>TdoTodos<cr>', 'Incomplete Todos' },
        x = { '<cmd>TdoToggle<cr>', 'Toggle Todo' },
    },

🏗️ What's Next

You tell me!

🧑‍💻 Behind The Code

🌈 Inspiration

Most note-taking systems offer a lot more than I needed, so I wrote tdo and then tdo.nvim for better integration.

💡 Challenges/Learnings

  • Dove deeper into nvim APIs
  • Learned about not interactive shell scripting.

🧰 Tooling

  • dots2k — Dev Environment
  • nvim2k — Personalized Editor
  • sway2k — Desktop Environment
  • qute2k — Personalized Browser

🔍 More Info

⭐ hit the star button if you found this useful ⭐

Source | Blog | Twitter | LinkedIn | More Links | Other Projects