Trying very hard not to miss calendar events
Rust 99.4%
Shell 0.6%
22 3 0

Clone this repository

https://tangled.org/juanlu.space/alarma https://tangled.org/did:plc:p7v4p6njfpdv6gen4bllnkqm/alarma
git@knot.juanlu.space:juanlu.space/alarma git@knot.juanlu.space:did:plc:p7v4p6njfpdv6gen4bllnkqm/alarma

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Alarma#

Reads events from Evolution Data Server (EDS).

Installation#

Requirements#

  • Linux with GNOME desktop environment
  • Evolution Data Server (libedataserver-1.2)
  • pkg-config
  • Rust 1.70 or later
sudo apt-get install libedataserver1.2-dev pkg-config

Usage#

List calendar sources#

alarma sources list

List events#

# List all events for the next 60 days
alarma events list

# Filter by specific calendar source
alarma events list --source "my-calendar-uid"

# Custom date range
alarma events list --date-from 2026-01-01 --date-until 2026-12-31

# JSON output
alarma events list --format json

Development#

Architecture#

The project follows clean architecture principles:

  • Domain Layer: Pure Rust business logic with no external dependencies
  • Infrastructure Layer: Platform-specific implementations (EDS, future: CalDAV, Google Calendar)
  • Presentation Layer: CLI and future UI implementations
crates/
├── alarma-core/
│   └── src/
│       ├── domain/       # Domain models (Event, CalendarSource, etc.)
│       ├── repository.rs # Repository trait definitions
│       ├── service.rs    # Business logic layer
│       └── error.rs      # Error types
├── alarma-eds/
│   └── src/
│       ├── bindings/     # Generated FFI bindings
│       ├── ffi/          # Safe FFI wrappers
│       └── repository.rs # EDS repository implementation
└── alarma-cli/
    └── src/
        ├── commands/     # Command handlers
        ├── output/       # Output formatters
        └── main.rs
┌─────────────────────────────────────────────────────────┐
│                     Presentation Layer                  │
│                     (alarma-cli)                        │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │   Commands   │  │   Output     │  │   CLI Args   │   │
│  │   Handlers   │  │  Formatters  │  │   Parsing    │   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
└─────────────────────────────────────────────────────────┘
                           │
                           ↓
┌─────────────────────────────────────────────────────────┐
│                      Domain Layer                       │
│                     (alarma-core)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │   Domain     │  │  Repository  │  │   Service    │   │
│  │   Models     │  │    Traits    │  │    Layer     │   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                         │
│  • CalendarEvent  • CalendarSource  • DateRange         │
│  • EventTime      • AlarmaError     • CalendarService   │
└─────────────────────────────────────────────────────────┘
                           ↑
                           │
┌─────────────────────────────────────────────────────────┐
│                   Infrastructure Layer                  │
│                      (alarma-eds)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │     FFI      │  │   Bindings   │  │  Repository  │   │
│  │   Wrappers   │  │  (Generated) │  │     Impl     │   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                         │
│  • RAII Safety    • Bindgen        • EdsRepository      │
│  • Error Mapping  • Memory Mgmt    • EDS Integration    │
└─────────────────────────────────────────────────────────┘
                           │
                           ↓
                ┌──────────────────────┐
                │  Evolution Data      │
                │  Server (C library)  │
                └──────────────────────┘