This is the 28th iteration on what happened in the last four weeks in the imag project, the text based personal information management suite for the commandline.
imag is a personal information management suite for the commandline. Its target audience are commandline- and power-users. It does not reimplement personal information management (PIM) aspects, but re-uses existing tools and standards to be an addition to an existing workflow, so one does not have to learn a new tool before beeing productive again. Some simple PIM aspects are implemented as imag modules, though. It gives the user the power to connect data from different existing tools and add meta-information to these connections, so one can do data-mining on PIM data.
As I said in the last post of this series I was on vacation and therefor there was no article in august.
But wow, since I returned from my vacation, which was lovely, there was a lot change in the imag codebase.
First of all, I pushed the release button for imag 0.3.0 - thanks goes out to all contributors of this version! As I described the state of imag in the release post for 0.3.0, I will only include changes from 0.3.0 to the current master, which is much enough I think.
I will start linking to our own hosting of the code with this blog post, so don’t feel irritated when checking out the links below.
As we had 39 merges from 0.3.0 until now, I will only include the most interesting ones here.
Integrated the patches that where necessary to get a release out of the
master branch when releasing version 0.3.0. That was mainly fixing some
Cargo.tomlissues and removing some nasty hack from the
imagbinary source code.
Makefileas cargo can build imag without help now.
- 7b3bf3e31e Changed the dependency specifications between imag dependencies to a path-and-version approach, which might be helpful when installing imag commands. Lets see how this works out for us.
- 4c4de294b5 Reorganized the complete codebase. The crates are now sorted into subdirectories instead of beeing at the top level. Might be interesting for packagers.
Ripped out our own “TOML extension” code. All code should now rely on the
CHANGELOG.mdfile to the repository, so we can have a nice changelog in the next release.
- 609c7fef93 imag-link works with positional arguments on the commandline as of this merge.
Rewrote the logging backend. Logging can now be configured via the
Refactored some of the crates which wrapped
libimagstoretypes rather than extending them. Now traits are used to extend them, making everything way more powerful.
Refactored the error handling of the complete imag codebase. Error handling
is now based on the
error_chaincrate, which offers way more power over our old approach. Using this power will follow slowly.
imag-storeimplementation to use positional arguments.
Store::entries()implementation, which was not based on the store-internal filesystem abstraction. The implementation is not optimal, though considered good enough right now.
Added a functionality to
libimagentrymarkdownto be able to extract links from markdown content and add them to the header (via
Added a functionality to use aliases when calling
imag. The configuration file has some examples.
Optimized the error handling in
Optimized the error handling in
Still a huge list of changes, right?
What will happen
I really want to focus on developing tools from now on. I am currently
thinking about rewriting
libimagentryref, as I’m not happy with the current
implementation, though I actually used it not that much yet.
I plan on implementing my side-project
kairos which I need for implementing
imag-habit (which is in progress) and then I want to write
imag-contacts though I have to wait for some good and nice
vcard crates, still.
imag-mail will be one of the places
where I will put my focus on. That is mainly because I slightly changed my goals
with imag - I feel rather comfortable with the thought of actually implementing
the tools myself. So
imag-todo will get an imag-native backend at some time,
for example. And
imag-mail will be a full-fledged mail client (though only for
the commandline) at some point in time.
Maybe you think I’m crazy - but I tell you: Some people collect stamps, some make music - I implement personal information management tools in Rust. If you think having a hobby like this is crazy, feel free to move along! If you think that’s awesome, feel free to submit patches, suggest things, start discussions - I’d enjoy some contributions (as in code and as in non-code)!