Skip to content

2KAbhishek/tdo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

87 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

License People Stars Forks Watches Last Updated

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

tdo in action
tdo in action

tdo is a opinionated, command line based note-taking system. Demo video

✨ Features

  • Can help you manage a daily log, todos, journal and notes
  • Review pending and upcoming todos, past journal entries and more
  • Integrates with git to commit and backup your notes automatically, check tdo.nvim for neovim integration
  • Has interactive fuzzy searching capabilities powered by fzf
  • Can integrate with other tools in pipes and subshells for extended functionality
  • Supports all editors, set $EDITOR to your choice

⚑ Setup

πŸ“‹ Requirements

  • ripgrep, fzf
  • bat (optional, for syntax highlighting in search)
  • coreutils (required on macOS, for gdate command)

πŸ’» Installation

git clone https://github.com/2kabhishek/tdo
cd tdo
./install.sh

πŸ“¦ Environment Variables

  • NOTES_DIR should point to your notes directory

  • TODOS_DIR optional, should point to your todos directory, default: NOTES_DIR/todos

  • JOURNAL_DIR optional, should point to your journal directory, default: NOTES_DIR/entries

  • EDITOR set to your choice of editor

🐚 Manual Installation

If you want to customize the setup or are facing issues with installation, you can set up tdo manually.

Change these commands according to your needs.

# Link tdo to a directory that's in PATH (~/.local/bin here)
ln -sfnv "$PWD/tdo.sh" ~/.local/bin/tdo
# Create a notes dir if not already present
mkdir -p $HOME/Projects/Notes
# Add the NOTES_DIR env var to your shell config ~/.bashrc, ~/.zshrc etc
echo "NOTES_DIR=$HOME/Projects/Notes" >> ~/.zshrc
# Add sample templates to your NOTES_DIR
cp -irv templates $NOTES_DIR
# Reload shell config
source ~/.zshrc

πŸ’Ύ Git Integration

If you want to sync your notes across devices, you can set up a git repo on the $NOTES_DIR and add GitHub/GitLab as remote.

cd $NOTES_DIR
git init
git add .
git commit -m 'init: notes'
git remote add origin <your-remote-git-url>
git push origin main

tdo will automatically commit every change with a timestamp like 03 Feb 11:33 as commit message.

πŸš€ Usage

If you use Neovim, I highly recommend using tdo.nvim, it seamlessly integrates tdo and nvim and adds some useful features on top.

  • tdo to open today's todos
  • tdo <offset_days> to open todos from offset_days in the past or future, e.g: tdo 1, tdo -2
  • tdo <note_title> to open or create a note_tile.md note, use folder names to categorise notes, e.g: tdo tech/vim-tips
  • tdo note or tdo n to create a new note with the current timestamp in drafts
  • tdo entry or tdo e to open today's journal entry
  • tdo entry <offset_days> to open journal entry from offset_days in the past or future, e.g: tdo e -3
  • tdo find <text> or tdo f to interactively search for text in all your notes
  • tdo find without any search term to review all your notes
  • tdo todo or tdo t to show all your pending todos
  • tdo commit <path> or tdo c to commit changes in path, happens automatically, needed for plugins and integrations

Run tdo h to get help info on the command line

πŸ“ Dir Structure

tdo expects an opinionated directory structure to function.

  • Notes live in the notes sub-dir, use these for long term knowledge management, second brain
  • Notes use the templates/note.md file as template
  • Todos live in the todos sub-dir, use these for short term notes, daily todos
  • Todos use the templates/todo.md file as template
  • Journal entries live in entries sub-dir, use these for personal notes, life logging
  • Journal entries use the templates/entry.md file as template
β”œβ”€β”€ todos
β”‚Β Β  └── 2023
β”‚Β Β      └── 11
β”‚Β Β       Β Β  └── 2023-11-29.md
β”œβ”€β”€ entries
β”‚Β Β  └── 2024
β”‚Β Β      └── 02
β”‚Β Β       Β Β  └── 2024-02-03.md
│── notes
β”‚Β Β  └── tech
β”‚Β Β   Β Β  └── quit-vim.md
β”‚Β Β   Β Β  └── arch-btw.md
└── templates
 Β Β  β”œβ”€β”€ entry.md
 Β Β  └── note.md
 Β Β  └── todo.md

βš™οΈ Configuration

You can configure tdo by either defining environment variables or via a $HOME/.config/tdorc file.

  • ADD_ENTRY_TIMESTAMP [boolean]: Whether to add a time stamp when using tdo entry or tdo e.
  • ADD_NEW_NOTE_TIMESTAMP [boolean]: Whether to add a time stamp when creating new notes with tdo <note_title>.
  • FILE_NAME_AS_TITLE [boolean]: Whether to add the file name as title when creating new notes with tdo <note_title>. If true, then it adds <note_title> as a markdown title in the first line of the new note.
  • ENTRY_TIMESTAMP_FORMAT [string]: can be any bash string such as a date format expression. It is ignored if ADD_ENTRY_TIMESTAMP is set to false.
  • NOTE_TIMESTAMP_FORMAT([string]: can be any bash string such as a date format expression. It is ignored if ADD_NEW_NOTE_TIMESTAMP is set to false.

Default Configs

ADD_ENTRY_TIMESTAMP=true
ADD_NEW_NOTE_TIMESTAMP=false
FILE_NAME_AS_TITLE=false
# Reads ## Mon, 12:00 PM
ENTRY_TIMESTAMP_FORMAT="## %a, %I:%M %p"
# Reads ## Fri. Apr 06, 2024 - 06:48 PM
NOTE_TIMESTAMP_FORMAT="## %a. %b %d, %Y - %I:%M %p"

configs defined in tdorc will override corresponding environment variables

πŸ—οΈ What's Next

You tell me!

πŸ§‘β€πŸ’» Behind The Code

🌈 Inspiration

After trying out every note management system under the sun I had decided on using plain markdown notes powered by nvim2k.

tdo is a spiritual successor and complimentary tool to that, taking the same principles and making it more accessible and simple.

πŸ” More CLI Tools

  • cmtr β€” Fast git commits
  • mkrepo β€” Spin up new GitHub repos from the CLI
  • ghpm β€” Manage all your GitHub repos
  • gsync β€” Sync your git repos

🧰 Tooling

  • dots2k β€” Dev Environment
  • nvim2k β€” Personalized Editor
  • sway2k β€” Desktop Environment
  • qute2k β€” Personalized Browser

⭐ hit the star button if you found this useful ⭐

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