{"id":19938192,"url":"https://github.com/2kabhishek/tdo","last_synced_at":"2025-05-03T14:32:05.385Z","repository":{"id":210355579,"uuid":"725055361","full_name":"2KAbhishek/tdo","owner":"2KAbhishek","description":"Fast \u0026 Simple Note Taking! 📃🚀","archived":false,"fork":false,"pushed_at":"2025-02-22T21:14:00.000Z","size":406,"stargazers_count":52,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-16T14:40:44.148Z","etag":null,"topics":["command-line","journal","knowledge-management","note-taking","notes","pkm","second-brain","todo","tools","utilities"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/2KAbhishek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"2kabhishek"}},"created_at":"2023-11-29T10:47:50.000Z","updated_at":"2025-04-09T15:19:05.000Z","dependencies_parsed_at":"2023-12-02T08:23:34.319Z","dependency_job_id":"c8e5594a-3b36-420d-8d7e-40a567c70139","html_url":"https://github.com/2KAbhishek/tdo","commit_stats":null,"previous_names":["2kabhishek/tdo"],"tags_count":9,"template":false,"template_full_name":"2KAbhishek/shelly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2KAbhishek%2Ftdo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2KAbhishek%2Ftdo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2KAbhishek%2Ftdo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2KAbhishek%2Ftdo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2KAbhishek","download_url":"https://codeload.github.com/2KAbhishek/tdo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252203284,"owners_count":21710930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","journal","knowledge-management","note-taking","notes","pkm","second-brain","todo","tools","utilities"],"created_at":"2024-11-12T23:38:40.463Z","updated_at":"2025-05-03T14:32:05.376Z","avatar_url":"https://github.com/2KAbhishek.png","language":"Shell","funding_links":["https://github.com/sponsors/2kabhishek"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align = \"center\"\u003e\n\n\u003ch1\u003e\u003ca href=\"https://github.com/2kabhishek/tdo\"\u003etdo\u003c/a\u003e\u003c/h1\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo/blob/main/LICENSE\"\u003e\n\u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/2kabhishek/tdo?style=flat\u0026color=eee\u0026label=\"\u003e \u003c/a\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo/graphs/contributors\"\u003e\n\u003cimg alt=\"People\" src=\"https://img.shields.io/github/contributors/2kabhishek/tdo?style=flat\u0026color=ffaaf2\u0026label=People\"\u003e \u003c/a\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo/stargazers\"\u003e\n\u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/2kabhishek/tdo?style=flat\u0026color=98c379\u0026label=Stars\"\u003e\u003c/a\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo/network/members\"\u003e\n\u003cimg alt=\"Forks\" src=\"https://img.shields.io/github/forks/2kabhishek/tdo?style=flat\u0026color=66a8e0\u0026label=Forks\"\u003e \u003c/a\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo/watchers\"\u003e\n\u003cimg alt=\"Watches\" src=\"https://img.shields.io/github/watchers/2kabhishek/tdo?style=flat\u0026color=f5d08b\u0026label=Watches\"\u003e \u003c/a\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo/pulse\"\u003e\n\u003cimg alt=\"Last Updated\" src=\"https://img.shields.io/github/last-commit/2kabhishek/tdo?style=flat\u0026color=e06c75\u0026label=\"\u003e \u003c/a\u003e\n\n\u003ch3\u003eFast \u0026 Simple Note Taking! 📃🚀\u003c/h3\u003e\n\n\u003cfigure\u003e\n  \u003cimg src=\"images/screenshot.jpg\" alt=\"tdo in action\"\u003e\n  \u003cbr/\u003e\n  \u003cfigcaption\u003etdo in action\u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003c/div\u003e\n\ntdo is a opinionated, command line based note-taking system. [Demo video](https://youtu.be/N4IRT7M-RLg)\n\n## ✨ Features\n\n- Can help you manage a daily log, todos, journal and notes\n- Review pending and upcoming todos, past journal entries and more\n- Integrates with git to commit and backup your notes automatically, check [tdo.nvim](https://github.com/2kabhishek/tdo.nvim) for neovim integration\n- Has interactive fuzzy searching capabilities powered by fzf\n- Can integrate with other tools in pipes and subshells for extended functionality\n- Supports all editors, set `$EDITOR` to your choice\n\n## ⚡ Setup\n\n### 📋 Requirements\n\n- ripgrep, fzf\n- bat (optional, for syntax highlighting in search)\n- coreutils (required on macOS, for gdate command)\n\n### 💻 Installation\n\n```bash\ngit clone https://github.com/2kabhishek/tdo\ncd tdo\n./install.sh\n```\n\n#### 📦 Environment Variables\n\n- `NOTES_DIR` should point to your notes directory\n- `TODOS_DIR` optional, should point to your todos directory, default: `NOTES_DIR/todos`\n- `JOURNAL_DIR` optional, should point to your journal directory, default: `NOTES_DIR/entries`\n\n- `EDITOR` set to your choice of editor\n\n#### 🐚 Manual Installation\n\nIf you want to customize the setup or are facing issues with installation, you can set up tdo manually.\n\nChange these commands according to your needs.\n\n```bash\n# Link tdo to a directory that's in PATH (~/.local/bin here)\nln -sfnv \"$PWD/tdo.sh\" ~/.local/bin/tdo\n# Create a notes dir if not already present\nmkdir -p $HOME/Projects/Notes\n# Add the NOTES_DIR env var to your shell config ~/.bashrc, ~/.zshrc etc\necho \"NOTES_DIR=$HOME/Projects/Notes\" \u003e\u003e ~/.zshrc\n# Add sample templates to your NOTES_DIR\ncp -irv templates $NOTES_DIR\n# Reload shell config\nsource ~/.zshrc\n```\n\n#### 🔤 Shell Completion\n\nIf you want to enable tab completion for `tdo`, add this to your shell's RC file (bashrc, zshrc, config.fish etc).\n\n```bash\n# zsh and bash\nsource /path/to/tdo/completions/tdo_completion.sh\n# fish\nsource /path/to/tdo/completions/tdo_completion.fish\n```\n\nThis will allow you to use tab completion to quickly access your notes when you type `tdo \u003ctab\u003e`.\n\n#### 💾 Git Integration\n\nIf 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.\n\n```bash\ncd $NOTES_DIR\ngit init\ngit add .\ngit commit -m 'init: notes'\ngit remote add origin \u003cyour-remote-git-url\u003e\ngit push origin main\n```\n\ntdo will automatically commit every change with a timestamp like `03 Feb 11:33` as commit message.\n\n## 🚀 Usage\n\nIf you use Neovim, I highly recommend using [tdo.nvim](https://github.com/2kabhishek/tdo.nvim), it seamlessly integrates `tdo` and `nvim` and adds some useful features on top.\n\n- `tdo` to open today's todos\n- `tdo \u003coffset_days\u003e` to open todos from `offset_days` in the past or future, e.g: `tdo 1`, `tdo -2`\n- `tdo \u003cnote_title\u003e` to open or create a `note_tile.md` note, use folder names to categorise notes, e.g: `tdo tech/vim-tips`\n- `tdo note` or `tdo n` to create a new note with the current timestamp in `drafts`\n- `tdo entry` or `tdo e` to open today's journal entry\n- `tdo entry \u003coffset_days\u003e` to open journal entry from `offset_days` in the past or future, e.g: `tdo e -3`\n- `tdo find \u003ctext\u003e` or `tdo f` to interactively search for `text` in all your notes\n- `tdo find` without any search term to review all your notes\n- `tdo todo` or `tdo t` to show all your pending todos\n- `tdo commit \u003cpath\u003e` or `tdo c` to commit changes in path, happens automatically, needed for plugins and integrations\n\n\u003e Run `tdo h` to get help info on the command line\n\n### 📁 Dir Structure\n\n`tdo` expects an opinionated directory structure to function.\n\n- Notes live in the `notes` sub-dir, use these for long term knowledge management, second brain\n- Notes use the [templates/note.md](./templates/note.md) file as template\n- Todos live in the `todos` sub-dir, use these for short term notes, daily todos\n- Todos use the [templates/todo.md](./templates/todo.md) file as template\n- Journal entries live in `entries` sub-dir, use these for personal notes, life logging\n- Journal entries use the [templates/entry.md](./templates/entry.md) file as template\n\n```\n├── todos\n│   └── 2023\n│       └── 11\n│           └── 2023-11-29.md\n├── entries\n│   └── 2024\n│       └── 02\n│           └── 2024-02-03.md\n│── notes\n│   └── tech\n│       └── quit-vim.md\n│       └── arch-btw.md\n└── templates\n    ├── entry.md\n    └── note.md\n    └── todo.md\n```\n\n### ⚙️ Configuration\n\nYou can configure `tdo` by either defining environment variables or via a `$HOME/.config/tdorc` file.\n\n- `ADD_ENTRY_TIMESTAMP` `[boolean]`: Whether to add a time stamp when using `tdo entry` or `tdo e`.\n- `ADD_NEW_NOTE_TIMESTAMP` `[boolean]`: Whether to add a time stamp when creating new notes with `tdo \u003cnote_title\u003e`.\n- `FILE_NAME_AS_TITLE` `[boolean]`: Whether to add the file name as title when creating new notes with `tdo \u003cnote_title\u003e`. If `true`, then it adds `\u003cnote_title\u003e` as a markdown title in the first line of the new note.\n- `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`.\n- `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`.\n\n#### Default Configs\n\n```bash\nADD_ENTRY_TIMESTAMP=true\nADD_NEW_NOTE_TIMESTAMP=false\nFILE_NAME_AS_TITLE=false\n# Reads ## Mon, 12:00 PM\nENTRY_TIMESTAMP_FORMAT=\"## %a, %I:%M %p\"\n# Reads ## Fri. Apr 06, 2024 - 06:48 PM\nNOTE_TIMESTAMP_FORMAT=\"## %a. %b %d, %Y - %I:%M %p\"\n```\n\n\u003e configs defined in `tdorc` will override corresponding environment variables\n\n## 🏗️ What's Next\n\nYou tell me!\n\n## 🧑‍💻 Behind The Code\n\n### 🌈 Inspiration\n\nAfter trying out every note management system under the sun I had decided on using plain markdown notes [powered by nvim2k](https://youtu.be/FP7sQhc8kek).\n\ntdo is a spiritual successor and complimentary tool to that, taking the same principles and making it more accessible and simple.\n\n### 🔍 More CLI Tools\n\n- [cmtr](https://github.com/2kabhishek/cmtr) — Fast git commits\n- [mkrepo](https://github.com/2kabhishek/mkrepo) — Spin up new GitHub repos from the CLI\n- [ghpm](https://github.com/2kabhishek/ghpm) — Manage all your GitHub repos\n- [gsync](https://github.com/2kabhishek/gsync) — Sync your git repos\n\n### 🧰 Tooling\n\n- [dots2k](https://github.com/2kabhishek/dots2k) — Dev Environment\n- [nvim2k](https://github.com/2kabhishek/nvim2k) — Personalized Editor\n- [sway2k](https://github.com/2kabhishek/sway2k) — Desktop Environment\n- [qute2k](https://github.com/2kabhishek/qute2k) — Personalized Browser\n\n\u003chr\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cstrong\u003e⭐ hit the star button if you found this useful ⭐\u003c/strong\u003e\u003cbr\u003e\n\n\u003ca href=\"https://github.com/2KAbhishek/tdo\"\u003eSource\u003c/a\u003e\n| \u003ca href=\"https://2kabhishek.github.io/blog\" target=\"_blank\"\u003eBlog \u003c/a\u003e\n| \u003ca href=\"https://twitter.com/2kabhishek\" target=\"_blank\"\u003eTwitter \u003c/a\u003e\n| \u003ca href=\"https://linkedin.com/in/2kabhishek\" target=\"_blank\"\u003eLinkedIn \u003c/a\u003e\n| \u003ca href=\"https://2kabhishek.github.io/links\" target=\"_blank\"\u003eMore Links \u003c/a\u003e\n| \u003ca href=\"https://2kabhishek.github.io/projects\" target=\"_blank\"\u003eOther Projects \u003c/a\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2kabhishek%2Ftdo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2kabhishek%2Ftdo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2kabhishek%2Ftdo/lists"}