summaryrefslogtreecommitdiffstats
path: root/doc/src/01000-intro.md
blob: a8f75cbdd01d8cd53ec8874ac2424959429a58c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# Introduction {#sec:introduction}

This document is the user documentation for imag, the personal
information management suite for the commandline.

**Basically: This is Hobby stuff. Expect incompleteness, false statements and
generally read with grain of salt.**

If you have any objections, suggestions for improvements, bugs, etc, please file
them (See [@sec:contributing]).
A way to reach out to the imag project maintainer(s) is described in the
[@sec:contributing] section.


## The Problem {#sec:intro:problem}

The problem this project tries to solve is to provide a modular commandline
application for personal information management.

It targets "power users" or "commandline users", uses plain text as a storage
format and tries to be as scriptable as possible.
imag offers the ability to link data from different "PIM aspects" (such as
"diary", "contacts" and "bookmark" for example).

One major goal of imag is to make the PIM data traverseable and queryable.
For example: a wiki article can be linked to an appointment which is linked to a
todo which is linked to a note which is linked to a contact.

imag wants to offer an all-in-one scriptable modular commandline personal
information management suite for all PIM aspects one could possibly think of.
Because imag uses plain text (TOML headers for structured data and plain text
which can be rendered using markdown, for example, for continuous text)
the user is always able to access their data without the imag tools at hand.


## The Approach {#sec:intro:approach}

The approach "imag" takes on solving this problem is to store content in a
"store" and persisting content in a unified way.
Meta-information is attached to the content which can be used to store
structured data.
This can be used to implement a variety of "domain modules" using the store.
While content is stored in _one_ place, imag does not duplicate content.
imag does not copy or move icalendar files, emails, vcard files, music or
movies to the store, but tries to remember the actual files are and stores
meta-information about them in the store.

Detailed explanation on this approach follows in the chapters of this work.

## Implementation {#sec:intro:implementation}

The program is written in the Rust programming language.

The program consists of libraries which can be re-used by other projects
to implement and adapt imag functionality. An external program may use a
library of the imag distribution to store content in the store of imag and
make it visible to imag this way.

This is a technical detail a user does not necessarily need to know, but as imag
is intended for power-users anyways, we would say it fits here.

## Alternative Projects {#sec:intro:alternatives}

imag is not the only project which tries to solve that particular problem. For
example there is
[org mode](https://orgmode.org)
for the [emacs](https://www.gnu.org/software/emacs/) text editor.
There is also [zim](http://zim-wiki.org/), a desktop wiki editor which is
intended to be used for a personal wiki.

The difference between imag and the mentioned projects is:
* emacs orgmode is (from what I know and see) for _orgabizing_ things. imag is
  intended not only for organizing, but also for recording, tracking and
  querying.
* zim is a wiki, which could be used for PIM but is not specialized for it.
  Recording habits might be possible, but not that simple as with imag

imag is not there
yet, though. Some parts can be used, though it is far away from being feature-complete.

In addition: imag is text-editor independent and other tools than imag might be
used to access data stored in the imag store.
For example, one could "grep", "awk" and "sed" entries without much hassle and
even write bash scripts for automatically filling imag entries with data.