# My Journal
[](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
[](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)
```