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 5301f582ab fixup! Add first codebase for CLI helpers 8 tahun lalu
.imag-documentation be0a907145 Add .imag-documentation 8 tahun lalu
bin 67d536fa74 Merge pull request #567 from matthiasbeyer/bin/imag-seperator-remove 8 tahun lalu
doc 3e4d01a339 Add missing dependency: which 8 tahun lalu
imag-bookmark ab91a08179 Add link: doc/src/04020-module-bookmarks.md -> imag-bookmark/README.md 8 tahun lalu
imag-counter f527e7eb0a changed default behavior from unit to None 8 tahun lalu
imag-diary 989ee1864a Merge pull request #604 from matthiasbeyer/imag-diary/warnings 8 tahun lalu
imag-link 703788d9d2 Replace trace_error() with trace_error_exit() where appropriate 8 tahun lalu
imag-notes 34ea40381f removed warnings 8 tahun lalu
imag-ref 6981bbdff1 Add link: doc/src/04020-module-ref.md -> imag-ref/README.md 8 tahun lalu
imag-store ce766427da Merge pull request #561 from matthiasbeyer/libimagstore/verify 8 tahun lalu
imag-tag 703788d9d2 Replace trace_error() with trace_error_exit() where appropriate 8 tahun lalu
imag-view 6e56653c8e shorten exit on error 8 tahun lalu
libimagbookmark 77c56a7d8a libimagbookmark: Deny warnings 8 tahun lalu
libimagcounter 5301f582ab fixup! Add first codebase for CLI helpers 8 tahun lalu
libimagdiary 9337a14cdd Update all version strings: 0.1.0 -> 0.2.0 8 tahun lalu
libimagentryfilter 79c1edcbd1 Add BoolFilter 8 tahun lalu
libimagentrylink 6f07359416 Merge pull request #534 from matthiasbeyer/libimagentrylink/tmp-fix-external-link-checking 8 tahun lalu
libimagentrylist 7f57e5e234 Move from a helper function to a typeclass. 8 tahun lalu
libimagentrymarkdown 32d255aa05 libimagentrymarkdown: Deny warnings 8 tahun lalu
libimagentryselect cdaed70125 libimagentryselect: Deny warnings 8 tahun lalu
libimagentrytag 9337a14cdd Update all version strings: 0.1.0 -> 0.2.0 8 tahun lalu
libimagentryview 9c994b2011 Add VersionsViewer 8 tahun lalu
libimagerror 6578abdf3d libimagerror: Eliminate unused imports 8 tahun lalu
libimaginteraction 0bb34b4777 libimaginteraction: Deny warnings 8 tahun lalu
libimagnotes 9337a14cdd Update all version strings: 0.1.0 -> 0.2.0 8 tahun lalu
libimagref 2ccea914dd libimagref: Deny warnings and fix denied warnings 8 tahun lalu
libimagrt 6571429123 Search for imagrc in RTP and not in RTP/store 8 tahun lalu
libimagstore b6437a0b0f Implement Debug for FileLockEntry, do not derive it 8 tahun lalu
libimagstorestdhook 47d0377026 Print debugging information in debug hook when setting config 8 tahun lalu
libimagtimeui a84a3b1fff libimagtimeui: Deny warnings and fix denied 8 tahun lalu
libimagutil d050be4cbc Refactor, generate code with macro 8 tahun lalu
tests f999c91283 tests: Add --config setting 8 tahun lalu
.editorconfig 88e7c1bd8d Add editorconfig configuration file 9 tahun lalu
.gitignore b55789578c Ignore /out 8 tahun lalu
.travis.yml c7b9de3bbd travis: try to remove "tree" call 8 tahun lalu
CONTRIBUTING.md 5417b01864 fixup! Add guideline how to contributing without github acc 8 tahun lalu
LICENSE b0f0b4bcfd Add LICENSE file 9 tahun lalu
Makefile 7c8c9b5264 Add Makefile target for building the lib documentation 8 tahun lalu
README.md e9e9950db7 Update README 8 tahun lalu
default.nix 36dbde8f9b Remove imag project dependency: lldb - we never used it! 8 tahun lalu
imagrc.toml d017f22757 Add setting in imagrc, to allow implictely creating the store path 8 tahun lalu

README.md

imag

Imag is a CLI PIM suite you can integrate in your tools of choice (Editor, MUA, RSS reader, etc etc).

Please contribute!

We are looking work contributors!

There is always a number of complexity/easy tagged issues available in the issue tracker you can start with and we are open to questions!

Feel free to open issues for asking questions, suggesting features or other things!

Also have a look at the CONTRIBUTING.md file!

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, though some more utility work is to be done. We have the store working, a hooks API and some default hooks are in development. Basic features like tagging and linking entries is possible as well as viewing entries. Some small things are implemented, like a note-taking module, a basic diary module, a counter module and a bookmark module. These modules contain basic features and are subject to change. More modules are about to be implemented.

Though, the very core of the system is stable and nothing prevents you from contributing and implementing a module.

Building/Running

Here goes how to try imag out.

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 ./out/imag. If you include the out directory in your $PATH, imag is able to find the other imag executables. Try it out by running:

$> PATH=$PATH:$(pwd)/out imag --help

To test, simply add --help to one of the above commands:

$> PATH=$PATH:$(pwd)/out imag counter --help

Documentation

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

Please note that the documentation is work in progress as well and may be outdated.

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.