imag/doc/src/01000-intro.md
2017-10-14 21:20:45 +02:00

2.8 KiB

Introduction

This document is the user documentation for imag, the personal information management suite for the commandline. Besides beeing a documentation, it serves also as "roadmap" where this project should go. Parts which are not yet implemented might be documented already, therefore. Also, because this is a hobby thing, parts which are implemented might be documented falsely or not at all. A list on what is implemented and what is not can be found at the end of this document. It might be outdated though.

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

If you have any objections, suggestions for improvements, bugs, etc, please file them. A way to reach out to the imag project maintainer(s) is described in the CONTRIBUTING file of the repository or in this document, on the appropriate section.

The Problem

The problem imag wants to solve is rather simple. When the project was initiated, there was no PIM-Suite available which

  • was for this domain of users ("power-users", "commandline users")
  • uses plain text as storage format
  • was scriptable
  • was modular
  • contained functionality to link content

The latter point is the bigger one: "imag" wants to offer the ability for users to link content. This means not only that a contact may be linked to a date, but that all things can be linked together. For example that a wiki article can be linked to a date which is linked to a todo which is linked to a note which is linked to a contact.

Also, having an all-in-one scriptable modular commandline personal information management suite seemed nice at the time and still does.

The 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 indexes them and stores the meta-information in the store.

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

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 could say it fits here.