mj 0.4.3

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

[![build status](https://gitlab.com/productivity-box/my-journal/badges/master/pipeline.svg)](https://gitlab.com/productivity-box/my-journal/pipelines)

*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](https://asciinema.org/a/zkOuP70HbAYDFCciOFT1yffrJ.svg)](https://asciinema.org/a/zkOuP70HbAYDFCciOFT1yffrJ)

## CLI mode

### Initialize new repository

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

```bash
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:

```bash
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:

```bash
mj idea edit super-project
```

To list registered ideas just type in the following:

```bash
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:

```bash
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:

```bash
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:

```bash
mj journal edit
```

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

```bash
mj journal edit 1d
```

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

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
mj note edit algorithms sieve-of-eratosthenes
```

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

```bash
mj notes list
```

To list existing categories just type in the following:

```bash
mj notes list --categories
```

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

```bash
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:

```bash
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:

```bash
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:

```bash
mj task edit super-project
```

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

```bash
mj tasks list
```

To list existing projects just type in the following:

```bash
mj tasks list --projects
```

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

```bash
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:

```bash
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:

```toml
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:

```toml
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:

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