From b3144e213d4c3c0b7d3712efe91e444909d96b9d Mon Sep 17 00:00:00 2001 From: Albert Armea Date: Tue, 30 Dec 2025 19:52:00 -0500 Subject: [PATCH] Update README and example config for discoverability --- README.md | 27 +++++++++++++++---- config.example.toml | 63 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 77 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index e791ee6..5086f93 100644 --- a/README.md +++ b/README.md @@ -19,23 +19,33 @@ or write your own. ### Home screen +Activities can be made selectively available at certain times of day. + TODO: home screen at different times (bedtime vs afternoon) showing different applications ### Time limits +Activities can have configurable time limits, including: +* individual session length +* total usage per day +* cooldown periods before that particular activity can be restarted + TODO: GIF or video of GCompris a few seconds from closing, emphasizing: * Countdown clock * Warning messaging * Automatic close at end of time * Icon deliberately missing afterwards -- cooldown -### "access to any application that can be run, emulated, or virtualized" +### Anything on Linux + +If it can run on Linux in *any way, shape, or form*, it can be supervised by +`shepherd-launcher`. TODO: show the following running with some subset of the above features highlighted: -* Minecraft -* Steam games (World of Goo, Portal 2) +* Media (Big Buck Bunny locally, YouTube via `mpv`) * ScummVM games (Putt Putt, Secret of Monkey Island) -* Media +* Minecraft +* Steam games (Celeste, A Short Hike) Contributions are welcome for improvements and not yet implemented backends, such as: @@ -44,6 +54,13 @@ such as: * Android apps via Waydroid, including pre-booting Android if necessary [TODO: link to issue] * Legacy Win9x via DOSBox, QEMU, or PCem, including scripts to create a boot-to-app image [TODO: link to issue] * Chrome, including strict sandboxing and support for firewall rules [TODO: link to issue] +* Awareness of whether an Internet connection is available, and an availability + rule that gates activities based on this [TODO: link to issue] +* Porting to other *host* platforms, such as a Microsoft Windows shell + replacement or macOS kiosk via MDM. `shepherd-launcher` is architected such + that `shepherdd`, the core enforcement service, does not render any UI and + performs platform-specific functions like process management in + platform-specific crates. ## Core concepts @@ -136,4 +153,4 @@ compatibility infrastructure: This project was written with the assistance of generative AI-based coding agents. Substantial prompts and design docs provided to agents are disclosed in -[docs/ai](./docs/ai/) +[docs/ai](./docs/ai/). diff --git a/config.example.toml b/config.example.toml index 200a62a..b9b0fbc 100644 --- a/config.example.toml +++ b/config.example.toml @@ -69,7 +69,7 @@ end = "20:00" # This requires ScummVM to be installed (Ubuntu: `sudo apt install scummvm`). # You must install the game files from your copy of the game into ScummVM first. # See https://docs.scummvm.org/en/v2.9.1/use_scummvm/game_files.html for how to do this. -# If you do not have the game files, you can run via Steam instead (see below). +# If you do not have the game files, you can purchase and run via Steam instead (see below). # https://store.steampowered.com/app/294690/PuttPutt_Joins_the_Circus/ [[entries]] id = "scummvm-putt-putt" @@ -95,7 +95,7 @@ end = "20:00" # Secret of Monkey Island via ScummVM # Like above, but with the following caveats: # * I have only tested this with the original CD-ROM version of the game. -# * The GOG version at https://www.gog.com/en/game/the_secret_of_monkey_island_special_edition uses a different engine. +# * The GOG version available for purchase at https://www.gog.com/en/game/the_secret_of_monkey_island_special_edition uses a different engine. # * It does *not* contain ScummVM-compatible data files, so this entry will not work with that version. # * It may be possible to extract compatible files from the GOG installer or run it via WINE, but that is outside the scope of this example. # * See https://www.gratissaugen.de/ultimatetalkies/ for how to do this. @@ -209,17 +209,17 @@ max_volume = 60 # Limit volume during gaming sessions # Steam must be set up and logged in before using these entries. # You must have the games installed in your Steam library. -# Human Resource Machine -# https://store.steampowered.com/app/375820/Human_Resource_Machine +# Celeste via Steam +# https://store.steampowered.com/app/504230/Celeste [[entries]] -id = "steam-human-resource-machine" -label = "Human Resource Machine" -icon = "steam" +id = "steam-celeste" +label = "Celeste" +icon = "~/Games/Icons/Celeste.png" [entries.kind] type = "snap" snap_name = "steam" -args = ["steam://rungameid/375820"] # Steam App ID (passed to 'snap run steam') +args = ["steam://rungameid/504230"] # Steam App ID (passed to 'snap run steam') [entries.availability] [[entries.availability.windows]] @@ -235,10 +235,57 @@ end = "20:00" # No [entries.limits] section - uses service defaults # Omitting limits entirely uses default_max_run_seconds +# A Short Hike via Steam +# https://store.steampowered.com/app/1055540/A_Short_Hike/ +[[entries]] +id = "steam-a-short-hike" +label = "A Short Hike" +icon = "~/Games/Icons/A_Short_Hike.png" + +[entries.kind] +type = "snap" +snap_name = "steam" +args = ["steam://rungameid/1055540"] # Steam App ID (passed to 'snap run steam') + +[entries.availability] +[[entries.availability.windows]] +days = "weekdays" +start = "15:00" +end = "18:00" + +[[entries.availability.windows]] +days = "weekends" +start = "10:00" +end = "20:00" + ## === Media === # Just use `mpv` to play media (for now). # Files can be local on your system or URLs (YouTube, etc). +# "Big Buck Bunny" saved on local disk +# Available for free as CC BY 3.0 at https://peach.blender.org/download/ +[[entries]] +id = "big-buck-bunny" +label = "Big Buck Bunny" +icon = "mpv" + +[entries.kind] +type = "process" # TODO: change to "media" type once supported +command = "mpv" +args = ["~/Videos/big_buck_bunny_720p_h264.mov"] # Local file path + +[entries.availability] + +[[entries.availability.windows]] +days = "weekdays" +start = "15:00" +end = "18:00" + +[[entries.availability.windows]] +days = "weekends" +start = "10:00" +end = "20:00" + # "lofi hip hop radio 📚 beats to relax/study to" streamed live from YouTube [[entries]] id = "lofi-beats"