imag/README.md

220 lines
7.7 KiB
Markdown
Raw Normal View History

2015-10-30 22:52:43 +00:00
# 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).
## Modules
2015-10-30 22:52:43 +00:00
All the modules have access to a shared store (which lives in `~/.imag/store/`
by default). Files are named after a schema:
2015-10-30 22:52:43 +00:00
~/.imag/store/<module_name>-<hashtype>-<hash>.imag
2015-10-30 22:52:43 +00:00
Where module name is "bookmark" for example. The hashtype is "UUID" by default
and the "hash" is a UUID then. Other types are possible as well:
2015-10-30 22:52:43 +00:00
- SHA1
- SHA512
2015-10-30 22:52:43 +00:00
for example (though it might not be a good idea to use SHA hashes,
see [Linking](#Linking))
2015-10-30 22:52:43 +00:00
Some modules might not want to store content there, for example you don't want
to put your icalendar files in there. So the calendar module just crawls through
your ical files and puts only a link and some hashsums (for refinding on content
move) to the store. Changes are not tracked via this model.
If a (for example ical-)file gets removed, the store entry gets invalid and has
to be garbage-collected.
### Linking
The UUID/SHA hashes in the file names can be used to connect two store entries.
For example, an entry from the wiki could refer to a contact by a UUID, because
the file for the contact has a UUID in its name. These UUIDs are constant and
should not change.
A link chain like this
Wiki -> Shopping List -> Calendar Entry
| |
| v
| Contact -> Calendar Entry -> Bookmark
v
Wiki Entry -> Bookmark
is totally possible. Scenario: You have a Wiki entry of a recipe you like to
cook. The recipe is linked to a shopping list, where you want to buy the
ingredients. Of course, you want to do this on a specific date (calendar entry).
And you want to do this with your Girlfriend, so she (as a contact) is linked to
the calendar entry. Her Birthday is linked to her Contact and for her Birthday,
you saw something on amazon, so you bookmarked it and linked it to the calendar
entry.
On the other hand, the Shopping list has links to some other Wiki entry, because
it contains Kiwi, and you have notes about Kiwi, how to cook them properly. You
saw this on some website, so you linked to the website from your wiki entry, of
course.
2015-10-30 22:52:43 +00:00
2015-11-30 16:03:50 +00:00
### Header
So each file in the store has a certain format:
---
<header>
---
<content>
The header contains some structured data (either JSON or YAML), the module uses
to store data closely related to the content.
For example, the bookmark-module will use the header only and store URL and tags
in some JSON format. The Wiki module might use the Header for storing some meta
information about the wiki article (tags, category, maybe even links to other
store entries) and the content is the wiki article content written down by the
user.
The content is just text entered from the user. In the best case, the module
should't touch the content at all.
Here is a short overview what are the modules like:
| Module | Indexer | Header-Format | Content | Expl | Dep |
| :----------- | ------- | ------------- | ------- | ------- | ----------- |
| Bibliography | X | JSON | X | .bib | Notes |
| Bookmarks | | JSON | | | |
| Calendar | X | JSON | | | |
| Contacts | X | JSON | | | |
| Image | X | JSON | | | Notes |
| Mail | X | JSON | | | |
| Movie | X | JSON | | | Notes |
| Music | X | JSON | | | Notes |
| News | X | JSON | | | |
| Notes | | YAML | X | Content | |
| Shoppinglist | | YAML | | | Notes, Todo |
| Todo | | YAML | | | Notes |
| Wiki | | YAML | X | Content | |
2015-11-30 16:03:50 +00:00
Explanation:
- An "Indexer" Module does only index some data and stores only some information
on how to content
- "Header-Format": Which format is chosen for the header. Basically: YAML if the
2015-11-30 16:03:50 +00:00
user might want to edit the header, otherwise JSON (pretty).
- "Content" means that the content part of a store entry is used
- "Expl": What the content part of a file is used for. "Content" means simply
user content.
- "Dep" means that the module uses this other module as a dependency for
extending its own functionality
### External Dependencies
| Library | Optional | Module |
| :------------ | :------: | :------- |
| vcard | | Contacts |
| icalendar | | Calendar |
| XDG | X | Contacts |
| | X | Calendar |
| | X | Notes |
| | X | Mail |
| | X | Wiki |
| | X | Todo |
| | X | Shopping List |
| | X | BibMan |
| | X | Music |
| | X | Movie |
| | X | Image |
| Markdown | | Notes |
| | | Wiki |
| Maildir | | Mail |
| BibTex parsing | X | BibMan |
| git-annex | X | BibMan |
| | X | Music |
| | X | Movie |
| | X | Image |
| Exif | X | Image |
| id3 | X | Music |
| RSS/Atom | | News |
(Optional means that these things are optional for the main functionality, but
should be implemented at some point to offer powerful functionality)
2015-11-30 16:03:50 +00:00
2015-10-30 22:52:43 +00:00
### Bookmarks
Bookmarks should be stored in a simple format:
```json
{ "URL": "https://github.com", "TAGS": ["ducks", "r", "great"]}
2015-10-30 22:52:43 +00:00
```
| Required util feature | Purpose |
2015-11-30 16:03:50 +00:00
| :------------------------------------ | :------------ |
| XDG-open (Browser) | External program |
2015-10-30 22:52:43 +00:00
### Contacts
Contacts are just read and indexed by `imag`, to create an internal index of
them and to be able to refer to.
### Calendar
Calendar are just read and indexed by `imag`, to create an internal index of
them and to be able to refer to.
2015-11-30 15:46:13 +00:00
### Notes
Just plain text notes.
2015-10-30 22:52:43 +00:00
### 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.
### 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.
2015-11-30 15:24:22 +00:00
Some more ideas:
- Extract URLs and put them into store as Bookmarks
2015-10-30 22:52:43 +00:00
### Todo-List
`imag` should also contain a full todo-tool. I'm thinking about integrating
taskwarrior through a wrapper here.
### Shoppinglist
Simply dot-and-tick lists, uses Todo and Notes in combination.
2015-11-30 15:30:20 +00:00
2015-10-30 22:52:43 +00:00
### 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.
### News (RSS)
Just indexing, reading news is not task of `imag` and so isn't syncing.
2015-11-30 15:30:20 +00:00
### Image
Just indexing photos.
### Video
Just indexing movies.
### Music
Just indexing music.
2015-11-08 16:35:11 +00:00
# License
This code is released under terms of GNU GPLv2.