TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Your family’s day as a metro map, for TRMNL e-ink displays
ProductivityJavaScript · LiquidGitHub @ExcuseMiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Your family's day as a metro map, for TRMNL e-ink displays
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Your family's day drawn as a transit map. One line per person runs across
the board under an hour strip; events are stops on their line, the people at
a shared event are joined across their lines, a holiday is named beside the
date and a day off is named at the line's head. The whole thing lays itself
out to the screen it lands on: TRMNL OG, OG V2, TRMNL X in landscape or
portrait, and every mashup size.
It runs entirely on TRMNL Serverless: plugin/src/transform.js fetches
your ICS feeds and normalises them, plugin/src/shared.liquid draws the map.
No server of your own.Read the full README ↗Your family's day drawn as a transit map. One line per person runs across the board under an hour strip; events are stops on their line, the people at a shared event are joined across their lines, a holiday is named beside the date and a day off is named at the line's head. The whole thing lays itself out to the screen it lands on: TRMNL OG, OG V2, TRMNL X in landscape or portrait, and every mashup size.
It runs entirely on TRMNL Serverless: plugin/src/transform.js fetches
your ICS feeds and normalises them, plugin/src/shared.liquid draws the map.
No server of your own.
In TRMNL: Plugins → Recipes, find Metro Calendar and install it (direct link). Nothing to build or upload.
The plugin starts on an example day while Calendars is empty. Example Day picks which one; see the demo folder for what each shows.
To show your own calendars, paste their ICS links into Calendars, one per row, with a name in front of each:
Alex https://calendar.google.com/calendar/ical/…/basic.ics
Sam https://outlook.live.com/owa/calendar/…/calendar.ics
Sam webcal://p12-caldav.icloud.com/published/2/…
https://…/family.ics
https://…/holidays.ics holiday
Each name is a line on the board; the same name twice puts two calendars
on one line; a link with no name is the whole household's and shows on
every line. Google's public-holiday calendars are recognised by their
address; for another provider's, put holiday after the link. A link
with no name at all, in a list with no names, is a line named as its
service names the calendar.
To route one shared feed to several people by rules (a school calendar
with each child's class in the title), switch Set Up With to the
setup helper and paste a JSON configuration into Configuration. Build it with the
Configuration editor,
which also previews the map at every device size, or write it by hand
(see CONFIG.md). The editor opens as a step-by-step setup:
who lives here, then one screen per calendar with click-by-click
instructions for finding its link in Google Calendar, iCloud, Outlook,
Nextcloud or Synology, and a check that reads the calendar back to you
("Found 14 appointments, the next is Swimming on Tuesday at 4") before it
adds anything. It saves your answers in your browser as you go, and
pasting back what TRMNL already has reopens it with every answer filled
in. Add ?full to the address for the old page with every control on it
at once. No ICS links yet? The editor's Examples
section has three presets (Family of 4, Parent on Shifts,
One Shared Calendar): pick one, draw the map, then swap the
placeholder links for your own.
webcal:// link.{
"version": 1,
"docs": "https://raw.githubusercontent.com/ExcuseMi/trmnl-metro-calendar-plugin/main/CONFIG.md",
"lines": [{ "name": "Sam" }, { "name": "Alex" }, { "name": "Kids" }],
"calendars": [
{ "url": "https://…/work.ics", "line": "Sam" },
{ "url": "https://…/alex.ics", "line": "Alex" },
{ "url": "https://…/school.ics",
"rules": [{ "match": { "type": "word", "value": "L2" }, "line": "Kids" },
{ "match": { "type": "contains", "value": "staff" }, "hide": true }] }
]
}
A line is just a name: its side, texture and shade are worked out for you.
A calendar says whose it is with line; one without a line is the
household's, and anything in it no rule routes goes on every line.
Rules match on the title or another field (word, contains, exact,
regex), or on status, weekday, duration, time, any, and
and/or/not of those, and can assign one or more lines, rewrite the
title, or hide the event. Everything is documented in
CONFIG.md; what the drawing means in rules.md; how to change the board without making it worse in
MAINTENANCE.md.
Recurring events: daily, weekly, monthly and yearly rules are read with
INTERVAL, UNTIL, COUNT, BYDAY (including "the third Tuesday"),
BYMONTHDAY, BYMONTH and BYSETPOS, and EXDATE and RECURRENCE-ID
overrides are honoured. A rule by week number or day of the year, or one
firing several times a day, shows on its first date only.
trmnl.bettens.dev. It stores
nothing and logs no calendar address. It sits behind Cloudflare, whose
own logs this project does not control. If you would rather nothing
leave your browser, paste or upload the .ics text instead.cd plugin && trmnlp serve # local preview at http://127.0.0.1:4567
./test.sh # every suite
./test.sh node # only the ones without a browser (engine, geometry, editor)
./test.sh trmnl tests/layout/band_spec.rb # only the trmnlp suite: paths, rspec arguments
The suites that render the plugin or run its transform are RSpec files in
plugin/tests/, on trmnlp's own test framework
(trmnlp test, run in the trmnl/trmnlp image by tools/trmnl-test, needs
Docker); the report is under test/trmnl-report/.
To run your own copy rather than the recipe: Plugins → Private Plugins →
New, name it, save, then from plugin/ run ./push.sh. Not
trmnlp push: the server takes 100KB per file and the sources are several
times that, so push.sh strips the comments and minifies before it
uploads, and refuses to upload a build that does not render (the
shipped spec in plugin/tests/).
The board is drawn by solver/, a set of plain node modules bundled into the
template by plugin/bundle.js; plugin/src/transform.js turns calendars into
facts and decides nothing about the picture. rules.md is the specification
for what the drawing means.
The layout is verified with headless-Chrome screenshots of trmnlp build
output at real device sizes; the renders in docs/ come from that. The
editor needs to be served over http to load the plugin template for its
preview (python3 -m http.server from the repo root works).
MIT, see LICENSE.
The quickest way to a board that reads like the examples is the editor's AI prompt: it describes the plugin, your calendars and what makes a board read well. Paste it into an assistant, paste the answer back, and you have a configuration that names the lines, routes a mixed feed to the right people and trims the titles, without writing a rule by hand. Each demo board is also a worked example: demo/simpsons/config.json, demo/futurama/config.json, demo/friends/config.json.
Optional settings: Time Format, Location and Temperature Unit for the weather, the Weather Alert Banner with its rain chance, cold and heat thresholds, and Show The Example Anyway.