Skip to content

Moskas/yotei

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

yotei 予定

yotei (予定) — Japanese for "schedule" or "plan"

A lightweight Rust daemon that watches your org-mode agenda files and fires desktop notifications for scheduled tasks and deadlines, with full priority handling. Includes a TUI task list viewer.


Features

  • Desktop notifications for SCHEDULED: and DEADLINE: timestamps
  • Priority-aware[#A] → critical urgency, [#B] → normal, [#C] → low
  • TUI list (yotei list) — browse all tasks sorted by priority and time
  • Filters — All / Upcoming (with timestamps) / Priority (A & B only)
  • Zero Emacs dependency — reads raw .org files directly

Installation

Regular

git clone <repo>
cd yotei
cargo install --path .

NixOS

With flakes, add the input to your flake:

{
  inputs.yoteid.url = "github:Moskas/yoteid";
}

Then install the package directly:

# In your system or home-manager config
environment.systemPackages = [ inputs.yoteid.packages.${system}.default ];

Home-Manager module

yotei ships a home-manager module that manages the config file and a systemd user service automatically.

# flake.nix
{
  inputs.yoteid.url = "github:Moskas/yoteid";
}
# In your home-manager configuration
{ inputs, system, ... }:
{
  imports = [ inputs.yoteid.homeManagerModules.default ];

  services.yotei = {
    enable = true;
    package = inputs.yoteid.packages.${system}.default;
    settings = {
      agenda_files = [
        "~/org/todo.org"
        "~/org/work.org"
      ];
      notifications = {
        pre_notify_minutes = 15;
        deadline_pre_notify_minutes = 60;
      };
      daemon = {
        poll_interval_secs = 60;
      };
    };
  };
}

This will:

  • Install the yotei binary
  • Generate ~/.config/yotei/config.toml from your settings
  • Create and enable a yotei systemd user service that runs the daemon

Usage

1. Initialise config

yotei init
# → creates ~/.config/yotei/config.toml

Edit the config to point at your org files:

agenda_files = [
  "~/org/todo.org",
  "~/org/work.org",
]

[notifications]
pre_notify_minutes         = 15   # warn N minutes before SCHEDULED time
deadline_pre_notify_minutes = 60  # warn N minutes before DEADLINE

[daemon]
poll_interval_secs = 60

2. Start the daemon

yotei daemon

The daemon runs in the foreground and fires a notification when a task is within the configured lead-time.

3. Browse tasks in the TUI

yotei list
Key Action
j / Move down
k / Move up
Tab / f Cycle filter (All → Upcoming → Priority)
g / Home Jump to top
G / End Jump to bottom
q / Ctrl-C Quit

4. Debug parsed tasks

yotei dump

Org file format

yotei understands the standard org-mode format:

* TODO [#A] Make it work
  SCHEDULED: <2026-03-06 Fri 18:00>

* TODO [#B] Write tests
  DEADLINE: <2026-03-08 Sun>

* DONE [#C] Refactor module    :work:
  SCHEDULED: <2026-03-01 Sun>

Supported TODO keywords: TODO, DONE, NEXT, WAITING, PROJ, CANCELLED, CANCELED

Priorities: [#A] (critical), [#B] (high), [#C] (normal)

Timestamp formats: with or without time, with or without weekday abbreviation.


Running as a service

Linux (systemd user service)

Save as ~/.config/systemd/user/yotei.service:

[Unit]
Description=yotei org-mode notification daemon
After=graphical-session.target

[Service]
Type=simple
ExecStart=%h/.cargo/bin/yotei daemon
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target
systemctl --user enable --now yotei

macOS (launchd)

Save as ~/Library/LaunchAgents/com.yotei.daemon.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>         <string>com.yotei.daemon</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/YOU/.cargo/bin/yotei</string>
    <string>daemon</string>
  </array>
  <key>RunAtLoad</key>     <true/>
  <key>KeepAlive</key>     <true/>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.yotei.daemon.plist

Roadmap

  • Google Calendar sync
  • Push notification bridge (Gotify / ntfy)
  • Repeating timestamps (+1w, .+1d)
  • Summary subcommand (today / this week)

About

A lightweight Rust daemon that watches your org-mode agenda and notifies about upcoming tasks

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors