#journal #idea #notes #tasks #editor #productivity

bin+lib mj

My Journal - personal tool to capture ideas, work with journals, notes and tasks in your favourite text $EDITOR

15 unstable releases (3 breaking)

0.4.3 Oct 31, 2019
0.4.2 Oct 24, 2019
0.3.4 Oct 21, 2019
0.2.4 Oct 7, 2019
0.1.0 Oct 4, 2019

#200 in Text editors

Custom license

91KB
2.5K SLoC

My Journal

build status

My Journal is a productivity tool that will help you manage your ideas, journals, notes and tasks. My Journal is nothing else but a thin layer atop your default editor that it will use to organize your textual notes in a clean and yet open structure of directories.

TUI mode

asciicast

CLI mode

Initialize new repository

To initialize a new repository, ask My Journal to do the following:

mkdir -p ~/MyJournals/demo
cd ~/MyJournals/demo
mj init .

This will produce minimal folder structure:

.
├── ideas
├── journals
├── notes
└── tasks

Working with ideas

To start capturing ideas for super-project type in the following command:

mj idea edit super-project

This will open your default $EDITOR where you can write down all the relevant information. After you exit your editor, My Journal will make sure your idea is stored in the right structure:

.
├── ideas
│   └── super-project.md
├── journals
├── notes
└── tasks

To continue working on super-project idea you can type in the same edit command:

mj idea edit super-project

To list registered ideas just type in the following:

mj ideas list

And, finally to remove an idea you can do either edit and wipe out the content followed by saving the file (My Journal will take care of deleting empty files for you), or by calling remove command like following:

mj idea remove super-project

Note, that i, idea and ideas are synonyms, and can be used interchangeably.

Working with journals

Journals are handled slightly differently than ideas. Let's see how it works:

mj journal edit

This will open your default $EDITOR where you can write down all the relevant information for today. After you exit your editor, My Journal will make sure your todays journal record is stored in the right structure (assuming that today for me is 2019-10-02 at the moment):

.
├── ideas
├── journals
│   └── 2019-10-02
│       └── journal.md
├── notes
└── tasks

To continue working on todays journal you can type in the same edit command:

mj journal edit

In case you might want to work a journal from another day, it is possible with the following command:

mj journal edit 1d

This will let you work on your yesterdays journal. In case you want specific date, you can always do that:

mj journal edit 2019-09-04

This will naturally let you work on your journal from 2019-09-04.

To list registered journals in an descending order of registration just type in the following:

mj journals list

And, finally to remove a journal from a specific date you can do either edit and wipe out the content followed by saving the file (My Journal will take care of deleting empty files for you), or by calling remove command like following:

mj journal remove 1d

This will remove yesterdays journal (here you can use specific dates as well if you wish). Or you can remove todays journal with the following command:

mj journal remove

Note, that j, journal and journals are synonyms, and can be used interchangeably.

Working with notes

Notes are handled differently than both ideas and journals. Let's see how it works:

mj note edit algorithms sieve-of-eratosthenes

This will open your default $EDITOR where you can write down all the relevant information on the subject the subject Sieve of Eratosthenes in the category Algorithms. After you exit your editor, My Journal will make sure your note is stored in the right structure:

.
├── ideas
├── journals
├── notes
│   └── algorithms
│       └── sieve-of-eratosthenes.md
└── tasks

To continue adding to your note you can type in the same edit command:

mj note edit algorithms sieve-of-eratosthenes

To list all existing notes across all the categories just type in the following:

mj notes list

To list existing categories just type in the following:

mj notes list --categories

And, finally, to list notes from a specific category, just run the following:

mj notes list algorithms

And, finally to remove a note from a specific category you can do either edit and wipe out the content followed by saving the file (My Journal will take care of deleting empty files for you), or by calling remove command like following:

mj note remove algorithms sieve-of-eratosthenes

Note, that n, note and notes are synonyms, and can be used interchangeably.

Working with tasks

Tasks are handled somewhat similar to how notes are handled. Let's see how it works:

mj task edit super-project

This will open your default $EDITOR where you can write down all the relevant information on a super project. After you exit your editor, My Journal will make sure your tasks are stored in the right structure:

.
├── ideas
├── journals
├── notes
└── tasks
    └── super-project
        └── tasks.md

To continue working on tasks for super-project you can type in the same edit command:

mj task edit super-project

To list all existing tasks across all the projects just type in the following:

mj tasks list

To list existing projects just type in the following:

mj tasks list --projects

And, finally, to list tasks from a specific project, just run the following:

mj tasks list super-project

And, finally to remove tasks from a specific project you can do either edit and wipe out the content followed by saving the file (My Journal will take care of deleting empty files for you), or by calling remove command like following:

mj task remove super-project

Note, that t, task and tasks are synonyms, and can be used interchangeably.

Configuration files

My Journal can be configured in ~/.config/my-journal/config file. Here is how default configuration looks like:

global_vault_root = '/home/kuznero/.local/share/my-journal'
view_delimiter = '¶'
input_delimiter = '::'
task_not_done_prefix = '-'
task_not_done_display_prefix = '☐'
task_in_progress_prefix = '*'
task_in_progress_display_prefix = '⟳'
task_done_prefix = '+'
task_done_display_prefix = '☑'

These settings are global settings that apply for all My Journal repositories. But My Journal allows you to override any settings for any repository individually. For that you will need to create a file named .mjconfig in the root of your My Journal repository and place any of the settings from the global configuration file, e.g. like following:

view_delimiter = '¶'
input_delimiter = '::'
task_not_done_prefix = '-'
task_not_done_display_prefix = '?'
task_in_progress_prefix = '~'
task_in_progress_display_prefix = '.'
task_done_prefix = '+'
task_done_display_prefix = '↷'

Completion scripts for your shell

To make things easier My Journal let's you generate completion scripts for one of the supported shells: Bash, Fish, Zsh, PowerShell or Elvish.

In order to enable My Journal completion for your shell, it is possible to just run one of the following commands:

source <(mj completion bash)
source <(mj completion fish)
source <(mj completion zsh)
source <(mj completion powershell)
source <(mj completion elvish)

Dependencies

~9.5MB
~160K SLoC