# 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) ```