build: package the desktop instead of the shell

The install list loses the dock, the window helper, the Chrome window
arbiter, the notification wrapper, the compositor and bar configs and the
GTK icon and stylesheet machinery, and gains a look and feel package, a
colour scheme, window rules, Kiosk restrictions and two supervised user
services. Dependencies follow: Plasma and SDDM in, sway, waybar, mako and
gtk-layer-shell out.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-10 08:59:56 -05:00
co-authored by Claude Opus 5
parent d87990f0ac
commit 6e4786f448
9 changed files with 176 additions and 90 deletions
+85 -61
View File
@@ -79,31 +79,15 @@ install -m755 \
"$ROOT/packaging/debian/postinst" \
"$STAGE/DEBIAN/postinst"
# Classroom UI configuration.
install -Dm644 \
"$ROOT/config/sway/config" \
"$STAGE/etc/ekklesia-classroom/sway/config"
install -Dm644 \
"$ROOT/config/waybar/config.jsonc" \
"$STAGE/etc/ekklesia-classroom/waybar/config.jsonc"
install -Dm644 \
"$ROOT/config/waybar/style.css" \
"$STAGE/etc/ekklesia-classroom/waybar/style.css"
# Classroom commands.
install -Dm755 \
"$ROOT/scripts/classroom-browser" \
"$STAGE/usr/local/bin/classroom-browser"
install -Dm755 \
"$ROOT/scripts/classroom-chrome-windows" \
"$STAGE/usr/local/bin/classroom-chrome-windows"
install -Dm755 \
"$ROOT/scripts/classroom-window" \
"$STAGE/usr/local/bin/classroom-window"
install -Dm755 \
"$ROOT/scripts/classroom-dvd" \
@@ -117,21 +101,12 @@ install -Dm755 \
"$ROOT/scripts/classroom-dvd-css-setup" \
"$STAGE/usr/local/bin/classroom-dvd-css-setup"
install -Dm755 \
"$ROOT/scripts/classroom-notify" \
"$STAGE/usr/local/bin/classroom-notify"
install -Dm755 \
"$ROOT/scripts/classroom-notify-test" \
"$STAGE/usr/local/bin/classroom-notify-test"
install -Dm755 \
"$ROOT/scripts/classroom-mqtt" \
"$STAGE/usr/local/bin/classroom-mqtt"
install -Dm755 \
"$ROOT/scripts/classroom-notifications" \
"$STAGE/usr/local/bin/classroom-notifications"
install -Dm755 \
"$ROOT/scripts/classroom-scale" \
@@ -162,47 +137,24 @@ install -Dm644 \
"$ROOT/lib/classroom_chrome.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_chrome.py"
install -Dm644 \
"$ROOT/lib/classroom_icons.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_icons.py"
install -Dm644 \
"$ROOT/lib/classroom_mqtt.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_mqtt.py"
install -Dm644 \
"$ROOT/lib/classroom_style.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_style.py"
install -Dm644 \
"$ROOT/lib/classroom_sway.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_sway.py"
install -Dm644 \
"$ROOT/lib/classroom_vlc.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_vlc.py"
install -Dm644 \
"$ROOT/lib/classroom_optical.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_optical.py"
install -Dm644 \
"$ROOT/config/wallpapers/classroom-default.png" \
"$STAGE/usr/share/backgrounds/ekklesia/classroom-default.png"
"$ROOT/config/wallpapers/classroom-calm.png" \
"$STAGE/usr/share/backgrounds/ekklesia/classroom-calm.png"
install -Dm755 \
"$ROOT/scripts/classroom-dock" \
"$STAGE/usr/local/bin/classroom-dock"
# Stylesheet and notification templates. Both carry measurement tokens
# that are resolved from UI_SCALE when the session starts.
install -Dm644 \
"$ROOT/config/dock/style.css.in" \
"$STAGE/etc/ekklesia-classroom/dock/style.css.in"
install -Dm644 \
"$ROOT/config/mako/config.in" \
"$STAGE/etc/ekklesia-classroom/mako/config.in"
# Chrome enterprise policy: suppress first-run and sign-in nags, and pin
# Home to Wonder Ink. Nothing here restricts where teachers can browse.
@@ -220,8 +172,8 @@ install -Dm755 \
# System configuration.
install -Dm644 \
"$ROOT/systemd/autologin/autologin.conf" \
"$STAGE/etc/systemd/system/[email protected]/autologin.conf"
"$ROOT/config/sddm/ekklesia-classroom.conf" \
"$STAGE/etc/sddm.conf.d/ekklesia-classroom.conf"
install -Dm644 \
"$ROOT/systemd/updater/ekklesia-classroom-update.service" \
@@ -243,21 +195,93 @@ install -Dm644 \
"$ROOT/systemd/mqtt/ekklesia-classroom-mqtt.service" \
"$STAGE/etc/systemd/system/ekklesia-classroom-mqtt.service"
install -Dm644 \
"$ROOT/config/icons/dvd.svg" \
"$STAGE/etc/ekklesia-classroom/icons/dvd.svg"
# The classroom desktop.
#
# Not a shell, and not a daemon: a Plasma session described in files Plasma
# already reads. The panel, the window behaviour, the notifications, the
# lockdown and the palette are all in here, which is why there is no longer
# a dock, a window helper, a notification wrapper or a compositor config in
# the list above.
for setting in kdeglobals kwinrc kwinrulesrc kscreenlockerrc ksmserverrc \
krunnerrc plasmanotifyrc; do
install -Dm644 \
"$ROOT/config/plasma/xdg/${setting}" \
"$STAGE/etc/xdg/${setting}"
done
for scheme in EkklesiaDark EkklesiaLight; do
install -Dm644 \
"$ROOT/config/plasma/colors/${scheme}.colors" \
"$STAGE/usr/share/color-schemes/${scheme}.colors"
done
LOOK="$STAGE/usr/share/plasma/look-and-feel/org.ekklesia.classroom.desktop"
install -Dm644 \
"$ROOT/config/icons/live.svg" \
"$STAGE/etc/ekklesia-classroom/icons/live.svg"
"$ROOT/config/plasma/lookandfeel/metadata.json" \
"$LOOK/metadata.json"
install -Dm644 \
"$ROOT/config/icons/live-off.svg" \
"$STAGE/etc/ekklesia-classroom/icons/live-off.svg"
"$ROOT/config/plasma/lookandfeel/contents/defaults" \
"$LOOK/contents/defaults"
install -Dm644 \
"$ROOT/config/icons/browser.svg" \
"$STAGE/etc/ekklesia-classroom/icons/browser.svg"
"$ROOT/config/plasma/lookandfeel/contents/layouts/org.kde.plasma.desktop-layout.js" \
"$LOOK/contents/layouts/org.kde.plasma.desktop-layout.js"
for entry in "$ROOT"/config/plasma/applications/*.desktop; do
install -Dm644 "$entry" \
"$STAGE/usr/share/applications/$(basename "$entry")"
done
# Shadows Chrome's own entry. XDG_DATA_DIRS searches /usr/local/share first,
# so the panel matches a Chrome window to this launcher instead of to
# Chrome's, and the room gets one button rather than two.
for entry in "$ROOT"/config/plasma/applications-local/*.desktop; do
install -Dm644 "$entry" \
"$STAGE/usr/local/share/applications/$(basename "$entry")"
done
install -Dm644 \
"$ROOT/config/plasma/solid/ekklesia-dvd.desktop" \
"$STAGE/usr/share/solid/actions/ekklesia-dvd.desktop"
for icon in ekklesia-wonderink ekklesia-parent-call; do
install -Dm644 \
"$ROOT/config/icons/${icon}.svg" \
"$STAGE/usr/share/icons/hicolor/scalable/apps/${icon}.svg"
done
# The panel is the only way a teacher has of getting anywhere. Plasma gives
# up restarting it after three crashes in a minute; this does not.
install -Dm644 \
"$ROOT/systemd/user/plasma-plasmashell.service.d/ekklesia-classroom.conf" \
"$STAGE/etc/systemd/user/plasma-plasmashell.service.d/ekklesia-classroom.conf"
install -Dm644 \
"$ROOT/systemd/user/ekklesia-classroom-audio.service" \
"$STAGE/etc/systemd/user/ekklesia-classroom-audio.service"
install -Dm755 \
"$ROOT/scripts/classroom-wonderink" \
"$STAGE/usr/local/bin/classroom-wonderink"
install -Dm755 \
"$ROOT/scripts/classroom-audio" \
"$STAGE/usr/local/bin/classroom-audio"
install -Dm755 \
"$ROOT/scripts/classroom-theme" \
"$STAGE/usr/local/bin/classroom-theme"
install -Dm644 \
"$ROOT/lib/classroom_audio.py" \
"$STAGE/usr/local/lib/ekklesia-classroom/classroom_audio.py"
# DVD mode control bar.
for icon in media-play media-pause chapter-prev chapter-next \