- Go 100%
| .github | ||
| config | ||
| docs | ||
| mdbuilder | ||
| mdprint | ||
| plugin | ||
| .gitignore | ||
| .goreleaser.yaml | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
Thermi
Thermi pulls data from a variety of sources and prints them on thermal paper.
For internals and contribution guidance, see:
- docs/architecture.md — end-to-end pipeline and package layout.
- docs/writing-a-plugin.md — how to add a new data source.
- mdprint/README.md — markdown → ESC/POS rendering internals.
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:
./thermi.yaml/usr/local/etc/thermi.yaml/etc/thermi.yaml~/.config/thermi/thermi.yaml~/.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-dfor 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.