Skip to content

2KAbhishek/tdo.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

40 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

License People Stars Forks Watches Last Updated

Fast & Simple Note Taking in Neovim! πŸ“ƒπŸš€

tdo.nvim in action
tdo.nvim in action

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