.---------------------------. | | | ___ _ __ __ _ | | / _ \| '__/ _` | | | | (_) | | | (_| | | | \___/|_| \__, | | | |___/ | | | '---------------------------'
NOTE: This is the alpha release. This will probably break for you, and it will be slower than the ideal. Only the most basic features exist (see the command list), and I am still writing some of the core commands. I am a while off from a beta release, which would be the first release that would be usable by a wider audience. This release is to test the simplest of functionality, and nothing more. Feedback on such matters is welcome.
Org aims to be a text-first, suckless, second-brain CLI tool.
Org is a terminal-based tool designed for managing notes, todos, and events. It is seeking to meet the need for a 'second-brain' which many have in our modern age; the need to capture, organise, and query an overflow of personal information and data in order to maximise its usefulness.
Why not just use Notion, Evernote, or even Apple Notes/Reminders? Most - if not all - 'second-brain' apps today force users to cede territory in key areas, such as: locality of data storage, accessibility and portability of data, simplicity of data, and, most notably: the cost of organising data.
Org wants to meet the same needs these apps meet while honouring these following core principles:
- Locality — Your data should stay on your machines or wherever you choose.
- Accessibility — Your data should remain in accessible and portable formats - such as plain-text files.
- Simplicity — Your data should be organised and structured simply so that it is compatible with other (or no) software and querying tools.
- Affordability - All the above should be available to you for free.
The only package manager which hosts org currently is yay. Install with: yay -S org.
For those who don't use yay: I plan to make org available on as many platforms as I can. For now, the below instructions will suffice while I am alpha testing:
pip install "git+https://github.com/benjaminingreens/org.git@v0.1.15"If you have a managed environment, do something like this:
# 1. Create a dedicated virtual environment for org
python3 -m venv ~/.venvs/org
# 2. Install org into that environment
~/.venvs/org/bin/pip install "git+https://github.com/benjaminingreens/org.git@v0.1.15"
# 3. Create a bin directory in your home if it doesn't exist
mkdir -p ~/.local/bin
# 4. Create a wrapper script so you can run 'org' without activating the venv
echo '~/.venvs/org/bin/org "$@"' > ~/.local/bin/org
chmod +x ~/.local/bin/org
# 5. Add ~/.local/bin to your PATH if it's not already there
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.profile
. ~/.profileTo update, run:
~/.venvs/org/bin/pip install -U "git+https://github.com/benjaminingreens/org.git@v0.1.15"Run org init in the directory you want to use as your org workspace.
From then on, running org inside any subfolder will operate at the workspace directory automatically.
At this early stage, org manages three types of files:
.txt files - or 'notes'
.td files - or 'todos'
.ev files - or 'events'
Org relies on YAML-style metadata in .txt files to index and manage your notes. For example:
---
title: Note title
tags: [general]
---
this is the note contentOfficially, no metadata is required when the user creates a .txt note. However, if no metadata is input by the user, Org will assume the following defaults:
---
title: YYYYMMDDTHHMMSS
tags: [general]
authour: <your_name>
creation: YYYYMMDDTHHMMSS
---
this is the note contentIf the user wishes, they may include a description property to include a brief description of their note. Org does not assume any defaults for this property.
.td (todo) and .ev (event) files follow similar conventions to one another.
Todos and events are stored in respective files; todos can only be stored in .td files, and events can only be stored in .ev files. They cannot be stored together.
Here is an example of a .td file:
* t: buy drinks for sam's party
Here is an example of an .ev file:
* e: sam's party
Both can be stored with metadata, like so:
* t: buy drinks for sam's party // #shopping
* e: sam's party // #birthdays
The // separates the actual todo/event from its metadata.
As you might have guessed, the # symbol represents a tag, and is the in-line equivalent to the tags property in the .txt notes file.
Below is a table showing the metadata schemas for todo and event files:
r = required
d = defaultable (org will generate a default value without user input)
n = not required / optional (org will not generate a default value without user input)
a = automatic (org will generate a value regardless of user input)
- = n/a (property not compatible)
| name | syntax | todo | event | multiple | type | format |
|---|---|---|---|---|---|---|
| tag | #foo |
d | d | true | list | array |
| authour | $foo |
d | d | false | str | string |
| creation | ~foo |
a | a | false | datetime | YYYYMMDDTHHMMSS |
| status | =foo |
d | d | false | str | string |
| assignee | @foo |
d | d | true | list | array |
| priority | !foo |
d | d | false | int | integer |
| title | /foo |
– | – | false | str | string |
| description | +foo |
– | – | false | str | string |
| deadline | %foo |
n | – | false | datetime | YYYYMMDDTHHMMSS |
| start | >foo |
– | r | false | datetime | YYYYMMDDTHHMMSS |
| pattern | ^foo |
– | n | false | str | string |
| end | <foo |
– | n | false | datetime | YYYYMMDDTHHMMSS |
Note: These commands are largely in development. The most mature part of org so far is the indexing and validation logic (that is, structure and storage of data). Useful methods for querying data is the next key stage of development for org. So far, most of these commands are glorified placeholders. Every single command you see here is about 20% complete, and will have much more added to it in future.
Before running through other commands, it is worth mentioning the org collab command. This command enables you to set up a connection between two distinct workspaces so that many of the below commands apply to multiple workspaces at once (except for org tidy and org group - which only apply to the current workspace). org collab will ask you to define a 'ceiling' - a reference point from which org will search for other workspaces, which will usually be your /home. It will then ask you to enter a workspace id to connect to a workspace. This id can be found in the .orgroot file of any workspace.
| command | description |
|---|---|
org init |
Initialises a directory as an org workspace |
org notes |
Lists all notes managed by org |
org todos |
Lists all priority 1 & 2 todo items in the workspace |
org events |
Lists all events of the day |
org report |
Combination of org todos and org events (custom reports in future) |
org tags |
Lists all tags found in the workspace |
org tidy |
Organises files into YYYY/MM folders by modification time or project dirs (see below) |
org group <project_name> [tag1] ... |
Creates _project_name dir with links to relevant tags, enabling org tidy to move notes, todos, and events with relevant tags into this dir |
org add |
COMING SOON: Create new notes/todos/events |
org archive |
COMING SOON: Move items to archive |
Notes:
- Sorting and filtering to be included for
org notes,org todos, andorg events, in the future - Custom reports to be included for
org reportin future - There are some hidden commands for fun. Many of which are still in development
- You will have noticed that all files are stored either in
YYYY/MMdirectories, or in project directories. A part of the philosophy oforgis to abstract as much structure as possible from the filesystem, and keep it as atomic (file-inherent) as possible. This is part of the 'second-brain' mechanism which aims to reduce mental load. 'Zettelkasten' philosophy is an inspiration in this regard
AGPLv3 — see LICENSE file for details.