This repository is a mirror (I push to manually) of github.com/matthiasbeyer/imag Do not use this repository for pull-requests or issue tracking. https://github.com/matthiasbeyer/imag

Matthias Beyer 85db34233e Add tag-remove tests %!s(int64=8) %!d(string=hai) anos
bin eca41e04dd Add argument finder helper function %!s(int64=8) %!d(string=hai) anos
doc 9fa362c22c Add initial proposal for notes module %!s(int64=8) %!d(string=hai) anos
imag-counter 6a8a8150fd Add value_name() call in ui specification code %!s(int64=8) %!d(string=hai) anos
imag-link 7d395dd87a Add value_name() call in ui specification code %!s(int64=8) %!d(string=hai) anos
imag-notes 91f1e46282 Add value_name() call in ui specification code %!s(int64=8) %!d(string=hai) anos
imag-store 34d702ea83 Merge pull request #466 from matthiasbeyer/binary-enhance-ui %!s(int64=8) %!d(string=hai) anos
imag-tag 85db34233e Add tag-remove tests %!s(int64=8) %!d(string=hai) anos
imag-view 4e987e32cf Add value_name() call in ui specification code %!s(int64=8) %!d(string=hai) anos
libimagcounter d3dc4eb57d libimagcounter: use generate_error_module!() macro and reexport generated types %!s(int64=8) %!d(string=hai) anos
libimagdiary b68bd7ef8e Impl Display for DiaryId %!s(int64=8) %!d(string=hai) anos
libimagentryfilter dfd6a9b0d3 style adaptations %!s(int64=8) %!d(string=hai) anos
libimagentrylink 3e4b339615 Merge pull request #438 from matthiasbeyer/libimagentrylink/link-type-pub %!s(int64=8) %!d(string=hai) anos
libimagentrylist 38031d5798 Add counter in libimagentrylist::listers::Core %!s(int64=8) %!d(string=hai) anos
libimagentryselect 2aeb853c5f Implement get_or_select_id() %!s(int64=8) %!d(string=hai) anos
libimagentrytag e05d0e6f13 libimagentrytag: Add value_name() call in ui helpers %!s(int64=8) %!d(string=hai) anos
libimagentryview 21dfa9fba2 libimagentryview: use generate_error_module!() macro and reexport generated types %!s(int64=8) %!d(string=hai) anos
libimagerror b1f43e3ef5 Impl Into<error name> for all <errorkindname> %!s(int64=8) %!d(string=hai) anos
libimaginteraction d2fa853a08 libimaginteraction: use generate_error_module!() macro and reexport generated types %!s(int64=8) %!d(string=hai) anos
libimagnotes 8caeb17729 Add Note::get() %!s(int64=8) %!d(string=hai) anos
libimagrt bfa6f593b6 Fix: Re-writing content of String in edit_in_tmpfile() %!s(int64=8) %!d(string=hai) anos
libimagstore 55e6c29275 Add another level of error enclosure %!s(int64=8) %!d(string=hai) anos
libimagstorestdhook 2ad5cb48aa Implement store-unload hooks %!s(int64=8) %!d(string=hai) anos
libimagtimeui b3554f4fd1 Add cli module for building clap components %!s(int64=8) %!d(string=hai) anos
libimagutil 1c723a9a0e Move trace_error() functionality from libimagutil to libimagerror %!s(int64=8) %!d(string=hai) anos
tests 0d9284e48b test utils: Add some helpers to generate entries %!s(int64=8) %!d(string=hai) anos
.editorconfig 88e7c1bd8d Add editorconfig configuration file %!s(int64=8) %!d(string=hai) anos
.gitignore 3e60042c08 Add Cargo.lock to .gitignore %!s(int64=8) %!d(string=hai) anos
.travis.yml 54cf4c114b Add cargo cache for travis %!s(int64=8) %!d(string=hai) anos
CONTRIBUTING.md 3196a8c5df Contributing: Add label explanation %!s(int64=8) %!d(string=hai) anos
LICENSE b0f0b4bcfd Add LICENSE file %!s(int64=9) %!d(string=hai) anos
Makefile f0dcfb1f4b Deduplicates the Makefile %!s(int64=8) %!d(string=hai) anos
README.md f0dcfb1f4b Deduplicates the Makefile %!s(int64=8) %!d(string=hai) anos
default.nix 75cedc1580 Move to rust stable (1.4 atm) so we can use clap %!s(int64=9) %!d(string=hai) anos
imagrc.toml 376832631a Add entry in example config file %!s(int64=8) %!d(string=hai) anos

README.md

imag

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

Goal

Our goal is to

Create a fast, reliable, forwards/backwards compatible commandline personal information management suite which covers all aspects of personal information management, consists of reusable parts and integrates well with known commandline tools.

We try to accomplish these requirements:

  • "fast": We use the awesome, fast and safe programming language "Rust"
  • "reliable": We try to test every aspect of our software. Our build process ensures that the build breaks whenever a library interface changes and the modules which use the library are not updated.
  • "forwards/backwards compatible:" Our (plain text) on-disk data format and storage library both ensure that incompatibilities are captured and resolved (using semver)
  • "commandline": We ensure that everything can be done by commandline calls, for some modules there might be a curses-like UI, but there are no graphical clients and there never will be any within this codebase. We use clap for commandline-interface building and we try to keep the interface easy and consistent between modules.
  • "personal": We store everything as plain text in a store inside the users $HOME directory. There will be a version-control (most surely git) hook integrated to sync between several machines. There are no multi-user features included or planned at the time of writing.
  • "information management": We want to give the user the possibility to put every single information about their personal lives into the store and we try hard to provide a sane interface to query and retrieve data from this database.
  • "covers all the aspects of personal information management": We want to provide modules for:
    • contact management
    • calendar
    • diary
    • notes
    • personal wiki
    • news (rss)
    • passwords
    • images
    • music
    • movies
    • personal project management
    • podcast management
    • ledger
    • mail
    • bibliography management
    • ... and many, many more.
  • "constists of reusable parts": Every functionality is implemented as library. The binaries we ship are just commandline-interace-to-library-interface translators
  • "integrates well with known commandline tools": We do not re-invent the wheel. We do not implement "yet another password manager", but use the standard unix password manager, do not implement a news reader, but use newsbeuter, do not reimplement a mail reader, etc etc. We do not copy images, movies or other data to the store but "link" them into the store, so you can use imag tools to query and access this data, but still live with your beloved commandline apps. We do not want to duplicate work but reuse as much as possible. You don't like one of the applications we use (for example pass as password manager)? Sure, feel free to submit patches so the user is able to switch the used tool, as long as it doesn't break the workflow. We will happily merge them!

Current state of development

This application is in really early development.

We have implemented the very core of the system: the store library. There's also some progress on utility libraries for linking entries, tagging and the hook system of the store is in progress as well. There is also one commandline application: "imag-store" (the "store" subcommand) available by now, but this is meant for developers and debugging purposes as it provides direct core-level store access.

Though, the very core of the system is stable and nothing prevents you from contributing and implementing a module, though some convenience is not yet provided (as the libraries are work-in-progress).

Building/Running

Building

One can build all the modules simply by running make which defaults to building all the modules and placing them in the out/ directory of the project root.

$> make
  ...
$> ls out/
imag-counter  imag-link  imag-notes  imag-store  imag-tag  imag-view

Building all the modules may take some time, so alternatively one can build only a specific module by runing $> make $module where $module is one of the imag-* names, such as imag-counter, imag-link, etc.

Running

To run imag, simply call ./bin/imag. This script has a function to search for modules, which utilizes an environment variable called IMAG_IS_THE_SHIT. To run imag with all components:

$> IMAG_IS_THE_SHIT=$(pwd) ./bin/imag

assuming you are currently in the imag source directory. Otherwise it is

$>IMAG_IS_THE_SHIT=$IMAG_SRC $IMAG_SRC/bin/imag

if $IMAG_SOURCE points to the imag source directory.

To test, simply add --help to one of the above commands. Imag should now be able to find the available commands.

Documentation

For detailed information, please read the documentation (You can either read the Markdown files or compile it to HTML/PDF using pandoc).

License

We chose to distribute this software under terms of GNU LGPLv2.1.

This decision was made to ensure everyone can write applications which use the imag core functionality which is distributed with the imag source distribution.