No description
Find a file
Ben Lavery-Griffiths d321bfec4c Uopdate documentation
2026-05-01 12:41:10 +01:00
.github Remove GH Workflows 2026-04-19 22:45:38 +01:00
config Standardise on logrus everywhere and error handling 2026-05-01 10:35:50 +01:00
docs Uopdate documentation 2026-05-01 12:41:10 +01:00
mdbuilder Standardise on logrus everywhere and error handling 2026-05-01 10:35:50 +01:00
mdprint Standardise on logrus everywhere and error handling 2026-05-01 10:35:50 +01:00
plugin Fix small plugin bugs 2026-05-01 11:17:13 +01:00
.gitignore Correct config file name 2026-04-18 21:01:54 +01:00
.goreleaser.yaml Init 2025-07-26 22:40:47 +01:00
go.mod Fix small plugin bugs 2026-05-01 11:17:13 +01:00
go.sum Fix small plugin bugs 2026-05-01 11:17:13 +01:00
LICENSE Init 2025-07-26 22:40:47 +01:00
main.go Standardise on logrus everywhere and error handling 2026-05-01 10:35:50 +01:00
README.md Uopdate documentation 2026-05-01 12:41:10 +01:00

Thermi

Thermi pulls data from a variety of sources and prints them on thermal paper.

For internals and contribution guidance, see:

Supported Sources

The following sources are supported:

  • Birthdays (from Fastmail contacts)
  • Events (from Apple iCloud calendar)
  • Jokes (from I Can Haz Dad Jokes)
  • Todo lists (from Nextcloud Tasks)

Additional Features

In addition to the supported sources, Thermi can also print:

  • Text (provided by the user)
  • Time of day (system time)

Installation

Head to the GitHub release page and download the latest release for your platform. Extract the binary and place it in a directory that is in your PATH.

Configuration

Thermi will, by default, look in the following locations for configuration files:

  1. ./thermi.yaml
  2. /usr/local/etc/thermi.yaml
  3. /etc/thermi.yaml
  4. ~/.config/thermi/thermi.yaml
  5. ~/.thermi.yaml

See below for specifying a custom configuration file.

The configuration file is a YAML file with a top-level object called order, under there is a list of plugins to load with their configuration.

Plugins are executed in the order they are listed in the configuration file and can be specified multiple times with different configurations.

Birthday Plugin

The birthday plugin reads contacts over CardDAV. By default it targets Fastmail; point it at any CardDAV server by setting an explicit url. You need to provide your username and password, as well as the number of days before the birthday you want to be notified.

order:
  - plugin: birthdays
    username: your_fastmail_username
    password: your_fastmail_password
    days_before: 7
    # Optional. Defaults to Fastmail's CardDAV endpoint with
    # `<username>/Default` appended. Set this to use a different provider.
    url: https://carddav.example.com/dav/addressbooks/user/alice/Default

Event Plugin

The event plugin reads calendars over CalDAV. By default it targets Apple iCloud; point it at any CalDAV server by setting an explicit url. You need to provide your username and password, as well as the number of days ahead you want events printed for.

order:
  - plugin: events
    calendar: your_icloud_calendar_name
    username: your_icloud_username
    password: your_icloud_password
    days: 7
    # Optional. Defaults to Apple iCloud's CalDAV endpoint. Set this to use
    # a different provider.
    url: https://caldav.example.com/

Joke Plugin

The joke plugin fetches jokes from the "I Can Haz Dad Jokes" API. This has no configuration options.

order:
  - plugin: joke

Text Plugin

The text plugin allows you to print custom text. You can specify the text directly in the configuration file.

order:
    - plugin: text
      text: "Hello, this is a custom message!"
    - plugin: text
      text: |
        This is a multiline
        custom message with _markdown support_!

Time Plugin

The time plugin prints the current system time. This has no configuration options.

order:
  - plugin: time_of_day

Todo Plugin

The todo plugin fetches tasks from Nextcloud Tasks. You need to provide your Nextcloud username, password, and the number of tasks you want to be printed.

order:
  - plugin: todos
    username: your_nextcloud_username
    password: your_nextcloud_password
    url: https://your-nextcloud-instance.com/remote.php/dav

Running Thermi

To run Thermi, simply execute the binary from the command line:

thermi

A number of command line options are available to customize the behavior of Thermi:

thermi -h
Usage of thermi:
  -d    Print debug information - may contain sensitive information
  -f string
        Config file to use
  -output string
        Where to send the rendered markdown: printer|stdout|none (default "printer")
  -v    Print version and exit

The -output flag chooses the sink for the rendered markdown:

  • printer (default) — send the output to the attached ESC/POS thermal printer.
  • stdout — write the markdown to stdout instead of printing, useful for previewing a config.
  • none — build the markdown but discard it; handy with -d for inspecting debug logs.

Very likely you will want to configure you system to run Thermi automatically at a certain time of day. This can be done using a cron job or a systemd timer.