feat: scale the shell to the room's television

A 32" panel a few feet from the children and a 65" set across a hall
want the same design at different sizes. UI_SCALE in device.conf now
sets that, and nobody has to edit CSS or source to tune a room.

The stylesheet and the notification config become templates carrying
measurement tokens. classroom-dock resolves the stylesheet in memory at
startup; classroom-notifications resolves the notification config into
the session's runtime directory and execs mako on it, so the process is
still just mako and everything that looks for it by name still finds it.
Neither template is rewritten on disk, so an update cannot lose a room's
setting and a room cannot drift from the packaged design.

Dock height and the reserved strip, corner radii, padding, button size,
spacing, every icon, the clock and its inset, and the notification
geometry all follow the scale. Colours, translucency and the hairline
borders do not: those are the design, not the size.

At UI_SCALE=1.0 the rendered stylesheet is byte-identical to the one the
shell used before any of this existed, which is the property worth
keeping. Values outside 0.8 to 1.5 are clamped and anything that is not
a number falls back to 1.0, so a typo in device.conf cannot produce an
unusable classroom.

Device configuration moves into a shared module, since the dock and the
notification daemon now have to agree about what a setting means.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-04 21:33:09 -05:00
co-authored by Claude Opus 5
parent 02094a6931
commit 428eb27a74
10 changed files with 352 additions and 77 deletions
+48
View File
@@ -0,0 +1,48 @@
# Ekklesia Classroom notifications
# Managed by the ekklesia-classroom package.
#
# Matched to the dock: same dark slate (#222632), same hairline white
# border, same rounded corners, white text. Kept slightly more opaque
# than the dock so text stays readable over the wallpaper and over video.
#
# A template, not a finished config. classroom-notifications resolves the
# bracketed measurements from UI_SCALE in device.conf and starts mako on
# the result. At UI_SCALE=1.0 they resolve to the values they had before
# scaling existed.
font=DejaVu Sans @font-size@
background-color=#222632e6
text-color=#ffffffff
border-color=#ffffff21
progress-color=over #464b5ae6
border-size=1
border-radius=@radius@
padding=@padding-v@,@padding-h@
margin=@margin@
width=@width@
height=@height@
anchor=top-right
layer=overlay
sort=-time
max-visible=3
markup=1
format=<b>%s</b>\n%b
icons=1
max-icon-size=@icon-size@
default-timeout=6000
[urgency=low]
default-timeout=4000
[urgency=critical]
background-color=#3a2632f0
border-color=#ff8a8a59
default-timeout=0