Part of the Science in the City Festival - Single-participant learning environments for hands-on Co-op Cloud deployment practice.
See the workshop slides for detailed presentation and materials.
# 1. Start local VM for development/testing
make vm
# 2. Build USB drives for participants
make usb-build
make usb-flash USB_DEVICE=/dev/sdX
# 3. Test your USB build
make usb-testsetup # REQUIRED: Setup local proxy first!
recipes # Show available apps
deploy wordpress # Deploy locally
browser wordpress # Open directly in Firefox# Focus on local development and testing
# All deployment happens locally on your USB/VMSingle Participant Model: Each environment (USB/VM) is complete and self-contained.
- USB Boot: Bootable NixOS with Docker + abra for hands-on learning
- Local VM: Identical environment for development/testing
- Local Environment: Self-contained workshop environment
- Wildcard DNS:
*.workshop.localresolves to127.0.0.1via dnsmasq
Pre-configured with:
- Automatic WiFi connection to workshop network
- Docker Swarm + abra installation
- SSH client for cloud access
- Wildcard DNS resolution (dnsmasq)
- Terminal-first interface (
desktopcommand for GUI) - Helper commands:
recipes,deploy,browser,help - Tab completion for all commands
Build and flash:
make usb-build
make usb-flash USB_DEVICE=/dev/sdbTest your workshop environment:
make usb-test # Test ISO in QEMU
make status-local # Check local servicesmake vm # Start VM (simulates USB environment)
make usb-build # Build ISO to ./build/iso/
make usb-test # Test ISO in QEMUThe VM simulates the USB experience with identical configuration and commands.
Build Locations:
- USB ISOs:
./build/iso/result/iso/*.iso - VM builds:
./result/(Nix default)
For the complete list of all recipes, see RECIPES.md
Based on Co-op Cloud with quality scoring:
- gitea - Self-hosted Git service
- nextcloud - Personal cloud storage & collaboration
- mealie - Recipe manager and meal planner
- gotosocial - Lightweight Fediverse server
- wordpress - Website & blog platform
- collabora - Online office suite
- croc - File transfer tool
- custom-php - Custom PHP applications
- dokuwiki - Simple wiki software
- engelsystem - Event coordination
- fab-manager - FabLab management
- ghost - Professional publishing platform
- karrot - Grassroots initiatives platform
- lauti - Calendar software for events
- loomio - Collaborative decision-making
- mattermost / mattermost-lts - Team collaboration
- mrbs - Meeting room booking system
- onlyoffice - Document editing suite
- open-inventory - Inventory management
- outline - Team knowledge base
- owncast - Self-hosted live streaming
- rallly - Group meeting scheduler
- Content: hedgedoc, mediawiki, seafile
- Communication: jitsi-meet, matrix-synapse, rocketchat
- Business: prestashop, invoiceninja, kimai, pretix
- Development: drone, n8n, gitlab, jupyter-lab
- Analytics: plausible, matomo, uptime-kuma, grafana
- Media & Social: peertube, funkwhale, mastodon, pixelfed, jellyfin
In USB/VM environments:
-
setup- REQUIRED FIRST: Setup local DNS proxy -
recipes- Show complete Co-op Cloud catalog -
deploy <app>- Deploy locally with tab completion -
browser [app]- Launch Firefox [to specific app] -
install- Repair abra installation if needed -
desktop- Start GUI session -
help- Show all commands and debug info
Examples:
# Deploy and open WordPress
deploy wordpress
browser wordpress # Opens http://wordpress.workshop.local in Firefox
# Just open browser
browser # Opens Firefox with blank page
# Use tab completion
deploy <TAB> # Shows all available recipes
browser <TAB> # Shows deployed applications- Nix with flakes enabled
- 2GB+ RAM for VM testing
- USB drive (8GB+) for workshop distribution
- SSH key at
~/.ssh/id_ed25519.pub(for cloud deployment only)
# Format Nix files
make format # Format Nix files
# Start development environment
make opencode # Start opencode in dev shellmake clean # Clean build artifacts (./build/ and ./result/)# Check WiFi connection (should connect automatically)
nmcli connection show --active
# Check abra installation
sudo abra --version
# Repair abra installation
install
# Check abra service status
sudo systemctl status workshop-abra-install
# Check DNS resolution
dig @127.0.0.1 test.workshop.local
# Check running services
docker service ls
# Check DNS service
systemctl status dnsmasq
# Restart if needed
sudo systemctl restart dnsmasq