summaryrefslogtreecommitdiffstats
path: root/README.md
blob: 917c8b9eb2888765dcf6499a3b6dfe565fd92d38 (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# imag

Imag is a CLI PIM suite with a nice API-ish commandline interface, so you can
integrate it in your tools of coice (Editor, MUA, RSS reader, etc etc).

## How data is stored

The backends define how the data is stored and accessed. Each backend has
either Read-Write permission or Read-Only.

By now, only files are planned as storage backend.

File formats are

* JSON
* Markdown with YAML-Header

## Tools

Each tool has a storage "pool", which can be git version controlled. This can
then be used to sync devices. For example bookmarks should be git version
control, while mails should obviously not (they should also only be accessed
RO).

Each of the following modules has a short description including a table what
core features are required to get it working.

Note that all SHA512 hashes which appear in the following chapters are
constants and they should never change. Changing them would break things, as
the SHA512 hashes are used to be able to link data together.

### Bookmarks

Bookmarks should be stored in a simple format:

```json
{ "URL": "https://github.com", "tags": ["ducks", "r", "great"]}
```

Each file is one bookmark and the filename is a SHA512.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RW)                | Data storage  |
| JSON File backend                     | Data format   |
| Git backend                           | Data sync     |

### Contacts

Contacts are just read and indexed by `imag`, to create an internal index of
them and to be able to refer to.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RW)                | Data access   |
| vcard file format parsing             | Data access   |

### Calendar

Calendar are just read and indexed by `imag`, to create an internal index of
them and to be able to refer to.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RW)                | Data access   |
| ical file format parsing              | Data access   |

### Mail

`imag` should be able to index all your mail and make them accessible through
its interfaces, so you can link contacts, calendar entries, wiki pages, todo
notes, etc etc. to your mail.

Some of these things (like linking contacts, calendar entries) should be
linked automatically.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RO)                | Data access   |
| Maildir file format parsing           | Data access   |
| mbox file format parsing (later)      | Data access   |
| Internal storage database             | Data indexing |
| JSON File backend                     | Database      |
| Editor calling                        | Editing       |
| Mail-Client calling                   | Editing       |

### Personal Wiki

`imag` should contain a complete personal wiki software. It should contain of
simple markdown files which have a YAML header, nothing too special for the
first step.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RW)                | Data access   |
| YAML parsing                          | Data parsing  |
| Markdown parsing                      | Data parsing  |
| Git backend                           | Data sync     |
| Editor calling                        | Editing       |

Some more ideas:

- Extract URLs and put them into store as Bookmarks

### Todo-List

`imag` should also contain a full todo-tool. I'm thinking about integrating
taskwarrior through a wrapper here.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RO)                | Data access   |
| Taskwarrior backend                   | Data parsing  |
| Git backend                           | Data sync     |
| Editor calling                        | Editing       |

### Shoppinglist

Simply dot-and-tick lists.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RW)                | Data access   |
| YAML parsing                          | Data parsing  |
| Markdown parsing                      | Data parsing  |
| Git backend                           | Data sync     |
| Editor calling                        | Editing       |

### Bibliography management

BibTex would be the first step, maybe we should be able to add the actual PDFs
here as well... didn't waste too much thoughts on this by now. If we have the
PDF data, we need git-annex.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RW)                | Data access   |
| BibTex parsing                        | Data parsing  |
| Git backend                           | Data sync     |
| Git-annex backend                     | Data sync     |
| Editor calling                        | Editing       |

### News (RSS)

Just indexing, reading news is not task of `imag` and so isn't syncing.

| Required core feature                 | Purpose       |
| :------------------------------------ | :------------ |
| Filesystem access (RO)                | Data access   |
| RSS parsing                           | Data parsing  |
| Git backend                           | Data sync     |

# License

This code is released under terms of GNU GPLv2.