imag - personal information management suite for the terminal

In my blog article On the sad state of PIM for nerds I ranted over the lack of a PIM (Personal Information Management) suite for the terminal (and therefor for nerds like me).

I said that such a suite would be awesome to have and I listed some core features such a suite should have. I also said that I might not have the time for this. I was wrong. I just released version 0.0.1 of “imag” today.

“imag” stands for “Information ManaGement”. Not that creative, though I like this name. I just released version 0.0.1, which is in pre-alpha shape. I also only contains one “module” of the whole idea - a bookmarking module, where you can store your bookmarks and add tags to each of them.

The roadmap

There is a roadmap on github, this is the idea:

  • Release v0.0.2 : Notes Module.
  • Release v0.0.3 : BM + Notes combination, where one can link to bookmarks from a note
  • Release v0.0.4 : Show meta-module for showing content of arbitrary modules
  • Release v0.0.5 : Todo Module. Might wrap taskwarrior here. Not decided yet.
  • Release v0.0.6 : Calendar Module, using icalendar standard
  • Release v0.0.7 : Contacts Module, using vcard files

These are the releases planned so far, more planned Modules are (in alphabetical order):

  • (Shopping)Lists Module
  • Bibliography-Management Module
  • Diary
  • Ledger - to track personal finance
  • Mail Module - to index email and link to from other content
  • Movie library tracker - to index movies and link to from other content.
  • Music library tracker - to index music and link to from other content.
  • News Module - RSS/Atom, maybe using external tools like newsbeuter, undecided.
  • Podcast module - implementation details completely undecided here
  • Project planner - implementation details completely undecided here
  • Wiki Module - expansion of the notes module with subpages and so on

Other things to do

There are more things planned in the github issues, like output formatter, where we can print all things with JSON (for example) so one can include “imag” in scripts. Also, an integrated webserver where one can view content as website would be nice (though I don’t like the idea of editing content via a web page). Basically I’m open to all ideas.

Also one major paint point right now is the following: I have not yet integrated git support. So the file store is not yet version controlled, and I really have to do this soon, so I’m save.

I also did not think about encryption yet. I am thinking about encrypting the store and decrypting it on every call to “imag”, but I’m not sure whether this is the right way, as some application might call “imag” in background later (see next chapter). I’m not even sure whether I should encrypt the store at all, as the user should encrypt his or her device anyways.

Implementation, License, call for contributors

Well, as I want to be safe, I implement “imag” in Rust, my new favourite programming language. If you want to learn Rust, you are welcome to join me, as I’m also still learning things.

“imag” is licensed under the terms of LGPL v2. This is because “imag” might be used to be integrated into other software, maybe someone wants to write a curses frontend for “imag” at some point? Maybe vim plugins? Or something similar? I’d welcome it!

That said, I have to implement the core features first. Linking between content is one of my desired core features and will follow as soon as the notes module is implemented. As the readme file also says, there is a lot to implement, but not that much modules with actual user input. Only four modules: Notes, Shoppinglist, though I guess I will implement this one without user-input support as it only holds a list, then the wiki module and the Bibliography module, whereas I’m not sure whether this one has user input as well. So basically two modules have actual user generated input (speaking of text a user is supposed to edit with an text editor). All other modules contain structured data (JSON) the user can edit via the commandline.

All this is not carved in stone yet and I’m happy to argue about the points I just mentioned. Also I’m happy to argue about more modules and of course I’d love to see pull requests on github!

So feel free to contribute!