imag

Matthias Beyer

July 26, 2019

imag

Personal information management suite

Idea

  • Collect Metadata
    • calendar, contacts, todos…
  • Connect Metadata
  • Query Metadata

Future…

  • Automatic suggestions

Hey Dave…

Existing tools

  • taskwarrior
  • khal
  • khard
  • abook

yes, but…

Existing tools

  • no interoperability
  • no composability
  • no scriptability
  • not always text-only

Workflow

  • Email comes in
  • imag classifies it
  • it is from Lisa
  • it is in a thread of emails

Workflow

  • … which is connected to a calendar entry (tomorrow)
  • … which is connected to a recipe
  • … which is connected to a shopping list
  • … which is connected to opening times of a shop

Workflow

  • The shop closes at 8pm, it is 6pm
  • this seems to be important!
  • imag notifies you

Goals

  • plain text only
  • scriptable
  • composable

Facts

  • Rust
  • init commit: 2015-10-18
  • 41,827 LOC (2019-07-14, master)
    • 34,925 LOC Rust
    • 3,025 LOC Markdown (documentation)

Facts

Implemented domains:

  • bookmark
  • contact
  • diary (log)
  • habit
  • notes
  • timetrack
  • wiki
  • todo / mail (rewrite pending)

Architecture

  1. “Core”
    1. “The Store”
    2. “The Runtime”
  2. “Entry layer”
  3. “Domain layer”
  4. “UI Layer”
    MVC anyone?

Core: The Store

  • Filesystem abstraction
  • CRUD interface
  • defines “Entry”
  • Different backends (FS, inmemory for testing)

Core: Entry

  1. Header
  2. Content
[imag]
version = "0.10.0"

[somemore]
headers = 123

Core: The Runtime

  • Configuration handling
  • CLI utilities (clap)
  • Logging setup

Entry layer

  • Extensions for “Entry”
    • “link”
    • “tag”
    • “category”
    • “edit”
    • “…”

Domain layer

  • diary
  • bookmark
  • contact
  • todo

UI Layer

  • CLI
  • (TUI)
  • (GUI)
  • (WUI)

External libraries

  • Policy: Use what’s useful
  • clap
  • toml

Extracted libraries

  • toml-query
    • human-readable X-Path for toml
  • filters
    • composable (failable) predicates
  • kairos
    • human-readable date/time processing

Concepts

  • StoreId
  • Entry
  • FileLockEntry
  • Store
  • Traits
    • extending Store
    • extending Entry
  • Iterators

More Concepts

  • IsA
  • (Header)Partial

Other things

  • Minimal coding styleguide
  • LGPL-2.1 (only)
  • Documentation: pandoc
  • Website: hugo
  • Contributions
    • Signed-off-by
    • anything I can pull/apply

Thanks

Thank you for your attention!