omm
(stands for "on-my-mind") is a keyboard-driven task manager for the
command line.
The fundamental idea behind omm
is that while we might have several tasks on
our to-do list — each with its own priority — we typically focus on one task at
a time. Priorities frequently change, requiring us to switch between tasks.
omm
lets you visualize this shifting priority order with a very simple list
interface that can be managed entirely via the keyboard.
homebrew:
brew install dhth/tap/omm
go:
go install github.com/dhth/omm@latest
Or get the binaries directly from a release. Read more about verifying the authenticity of released artifacts here.
omm offers a guided walkthrough of its features, intended for new users of it. Run it as follows.
omm guide
Check out the latest features added to omm
using:
omm updates
omm
's TUI is comprised of several views: 4 lists (for active and archived
tasks, one for task bookmarks, and one for prefix selection), a context pane, a
task details pane, and a task entry/update pane.
As the name suggests, the active tasks list is for the tasks you're actively working on right now. It allows you to do the following:
- Create/update tasks at a specific position in the priority list
- Add a task at the start/end of the list
- Move a task to the top of the list (indicating that it takes the highest priority at the moment)
- Move task up/down based on changing priorities
- Archive a task
- Permanently delete a task
Once you're done with a task, you can archive it, which puts it in the archived tasks list. It's more for historical reference, but you can also unarchive a task and put it back in the active list, if you need to. You can also permanently delete tasks from here.
For tasks that need more details that you can fit in a one line summary, there is the context pane. You add/update context for a task via a text editor which is chosen based on the following look ups:
- the "--editor" flag
- $OMM_EDITOR
- "editor" property in omm's toml config
- $EDITOR/$VISUAL
vi
(fallback)
The Task Details pane lets you see all details for a task in a single scrollable pane.
This is where you enter/update a task summary. If you enter a summary in the
format prefix: task summary goes here
, omm
will highlight the prefix for you
in the task lists.
The list colors and the task list title can be changed via CLI flags.
omm \
--tl-color="#b8bb26" \
--atl-color="#fb4934" \
--title="work"
omm offers two modes for the visual density of its lists: "compact" and "spacious", the former being the default. omm can be started with one of the two modes, which can later be switched by pressing "v".
omm --list-density=spacious
This configuration property can also be provided via the environment variable
OMM_LIST_DENSITY
.
Compact mode:
Spacious mode:
Multiple tasks can be imported from stdin
using the import
subcommand.
cat << 'EOF' | omm import
orders: order new ACME rocket skates
traps: draw fake tunnel on the canyon wall
tech: assemble ACME jet-propelled pogo stick
EOF
Tip: Vim users can import tasks into omm by making a visual selection and
running :'<,'>!omm import<CR>
.
When an argument is passed to omm
, it saves it as a task, instead of opening
up the TUI.
omm "Install spring-loaded boxing glove"
omm
allows you to change the some of its behavior via configuration, which it
will consider in the order listed below:
-
CLI flags (run
omm -h
to see details) -
Environment variables (eg.
OMM_EDITOR
) -
A TOML configuration file (run
omm -h
to see where this lives; you can change this via the flag--config-path
)Here's a sample config file:
db_path = "~/.local/share/omm/omm-w.db" tl_color = "#b8bb26" atl_color = "#fabd2f" title = "work" list_density = "spacious" show_context = false editor = "vi -u NONE"
Tasks can be outputted to stdout
using the tasks
subcommand.
omm tasks
These are some tips to improve your experience of using omm
:
- Set up discrete instances of
omm
if you need to. You can do so by referencing a different config file (which points to a unique database) for each instance, or by directly using--db-path
flag. Eg. an omm instance for personal tasks, and another for work. Set up as manyomm
instances as you need. - Use
omm updates
to stay up to date with omm's latest features/changes.
q/esc/ctrl+c go back
Q quit from anywhere
j/↓ move cursor down
k/↑ move cursor up
h go to previous page
l go to next page
g go to the top
G go to the end
tab move between lists
C toggle showing context
d toggle Task Details pane
b open Task Bookmarks list
B open all bookmarks added to current task
c update context for a task
ctrl+d archive/unarchive task
ctrl+x delete task
ctrl+r reload task lists
/ filter list by task prefix
ctrl+p filter by prefix via the prefix selection list
y copy selected task's context to system clipboard
v toggle between compact and spacious view
q/esc/ctrl+c quit
o/a add task below cursor
O add task above cursor
I add task at the top
A add task at the end
u update task summary
⏎ move task to the top
E move task to the end
J move task one position down
K move task one position up
⏎ submit task summary
ctrl+p choose/change prefix via the prefix selection list
h/←/→/l move backwards/forwards when in the task details view
y copy current task's context to system clipboard
B open all bookmarks added to current task
⏎ open URL in browser
In case you get the omm
binary directly from a release, you may want to
verify its authenticity. Checksums are applied to all released artifacts, and
the resulting checksum file is signed using
cosign.
Steps to verify (replace A.B.C
in the commands listed below with the version
you want):
-
Download the following files from the release:
- omm_A.B.C_checksums.txt
- omm_A.B.C_checksums.txt.pem
- omm_A.B.C_checksums.txt.sig
-
Verify the signature:
cosign verify-blob omm_A.B.C_checksums.txt \ --certificate omm_A.B.C_checksums.txt.pem \ --signature omm_A.B.C_checksums.txt.sig \ --certificate-identity-regexp 'https://github\.com/dhth/omm/\.github/workflows/.+' \ --certificate-oidc-issuer "https://token.actions.githubusercontent.com"
-
Download the compressed archive you want, and validate its checksum:
curl -sSLO https://github.com/dhth/omm/releases/download/vA.B.C/omm_A.B.C_linux_amd64.tar.gz sha256sum --ignore-missing -c omm_A.B.C_checksums.txt
-
If checksum validation goes through, uncompress the archive:
tar -xzf omm_A.B.C_linux_amd64.tar.gz ./omm # profit!
omm
stands on the shoulders of giants.
- bubbletea as the TUI framework
- sqlite as the local database
- goreleaser for releasing binaries