Update README and example config for discoverability

This commit is contained in:
Albert Armea 2025-12-30 19:52:00 -05:00
parent a17fb5104d
commit b3144e213d
2 changed files with 77 additions and 13 deletions

View file

@ -19,23 +19,33 @@ or write your own.
### Home screen ### 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 TODO: home screen at different times (bedtime vs afternoon) showing different applications
### Time limits ### 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: TODO: GIF or video of GCompris a few seconds from closing, emphasizing:
* Countdown clock * Countdown clock
* Warning messaging * Warning messaging
* Automatic close at end of time * Automatic close at end of time
* Icon deliberately missing afterwards -- cooldown * 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: TODO: show the following running with some subset of the above features highlighted:
* Minecraft * Media (Big Buck Bunny locally, YouTube via `mpv`)
* Steam games (World of Goo, Portal 2)
* ScummVM games (Putt Putt, Secret of Monkey Island) * 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, Contributions are welcome for improvements and not yet implemented backends,
such as: such as:
@ -44,6 +54,13 @@ such as:
* Android apps via Waydroid, including pre-booting Android if necessary [TODO: link to issue] * 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] * 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] * 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 ## Core concepts
@ -136,4 +153,4 @@ compatibility infrastructure:
This project was written with the assistance of generative AI-based coding This project was written with the assistance of generative AI-based coding
agents. Substantial prompts and design docs provided to agents are disclosed in agents. Substantial prompts and design docs provided to agents are disclosed in
[docs/ai](./docs/ai/) [docs/ai](./docs/ai/).

View file

@ -69,7 +69,7 @@ end = "20:00"
# This requires ScummVM to be installed (Ubuntu: `sudo apt install scummvm`). # 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. # 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. # 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/ # https://store.steampowered.com/app/294690/PuttPutt_Joins_the_Circus/
[[entries]] [[entries]]
id = "scummvm-putt-putt" id = "scummvm-putt-putt"
@ -95,7 +95,7 @@ end = "20:00"
# Secret of Monkey Island via ScummVM # Secret of Monkey Island via ScummVM
# Like above, but with the following caveats: # Like above, but with the following caveats:
# * I have only tested this with the original CD-ROM version of the game. # * 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 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. # * 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. # * 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. # Steam must be set up and logged in before using these entries.
# You must have the games installed in your Steam library. # You must have the games installed in your Steam library.
# Human Resource Machine # Celeste via Steam
# https://store.steampowered.com/app/375820/Human_Resource_Machine # https://store.steampowered.com/app/504230/Celeste
[[entries]] [[entries]]
id = "steam-human-resource-machine" id = "steam-celeste"
label = "Human Resource Machine" label = "Celeste"
icon = "steam" icon = "~/Games/Icons/Celeste.png"
[entries.kind] [entries.kind]
type = "snap" type = "snap"
snap_name = "steam" 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]
[[entries.availability.windows]] [[entries.availability.windows]]
@ -235,10 +235,57 @@ end = "20:00"
# No [entries.limits] section - uses service defaults # No [entries.limits] section - uses service defaults
# Omitting limits entirely uses default_max_run_seconds # 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 === ## === Media ===
# Just use `mpv` to play media (for now). # Just use `mpv` to play media (for now).
# Files can be local on your system or URLs (YouTube, etc). # 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 # "lofi hip hop radio 📚 beats to relax/study to" streamed live from YouTube
[[entries]] [[entries]]
id = "lofi-beats" id = "lofi-beats"