Files
malta-workshop/usb/flake.nix
2025-08-11 12:07:23 +02:00

184 lines
6.9 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
description = "CODE CRISPIES Workshop Live Environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixos-generators.url = "github:nix-community/nixos-generators";
};
outputs = { self, nixpkgs, nixos-generators }:
let
system = "x86_64-linux";
participantNames = [
"hopper" "curie" "lovelace" "noether" "hamilton"
"franklin" "johnson" "clarke" "goldberg" "liskov"
"wing" "rosen" "shaw" "karp" "rich"
];
in {
packages.${system}.live-iso = nixos-generators.nixosGenerate {
inherit system;
format = "iso";
modules = [
({ pkgs, ... }: {
# WiFi + NetworkManager
networking = {
networkmanager.enable = true;
wireless.enable = false; # Disable wpa_supplicant, use NetworkManager
};
# Auto-connect to workshop WiFi
systemd.services.workshop-wifi = {
wantedBy = [ "multi-user.target" ];
after = [ "NetworkManager.service" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
User = "workshop";
};
script = ''
sleep 10 # Wait for NetworkManager to start
${pkgs.networkmanager}/bin/nmcli dev wifi connect "CODE_CRISPIES_GUEST" password "workshop2024" || true
'';
};
# Auto-login workshop user
services.getty.autologinUser = "workshop";
users.users.workshop = {
isNormalUser = true;
shell = pkgs.zsh;
extraGroups = [ "networkmanager" ];
};
# Workshop shell environment with CORRECT recipes
programs.zsh = {
enable = true;
interactiveShellInit = ''
echo "🍪 CODE CRISPIES Workshop Environment"
echo "📶 WiFi: CODE_CRISPIES_GUEST"
echo "📡 Available servers:"
${builtins.concatStringsSep "\n" (map (name:
"echo \" - ${name}.codecrispi.es\""
) participantNames)}
echo ""
echo "💡 Commands: connect <name> | recipes | help"
connect() {
[ -z "$1" ] && {
echo "Usage: connect <name>"
echo "Available: ${builtins.concatStringsSep " " participantNames}"
return 1
}
echo "🔗 Connecting to $1.codecrispi.es..."
ssh -o StrictHostKeyChecking=no workshop@$1.codecrispi.es
}
recipes() {
echo "📦 Popular Co-op Cloud recipes (Score 3+):"
echo ""
echo "🌐 Content Management:"
echo " wordpress - CMS/Blog platform"
echo " ghost - Headless Node.js CMS"
echo " dokuwiki - Simple text-based wiki"
echo ""
echo " Productivity & Collaboration:"
echo " nextcloud - File sharing & collaboration"
echo " hedgedoc - Collaborative markdown editor"
echo " collabora - Online office suite"
echo " onlyoffice - Office suite with editors"
echo " outline - Wiki and knowledge base"
echo ""
echo "🍽 Lifestyle & Organization:"
echo " mealie - Recipe manager & meal planner"
echo ""
echo "💬 Communication:"
echo " mattermost - Team chat platform"
echo " rocketchat - Team communications"
echo ""
echo "🎯 Event & Community Management:"
echo " engelsystem - Volunteer shift management"
echo " loomio - Group decision making"
echo " mrbs - Meeting room booking"
echo " rallly - Doodle poll alternative"
echo ""
echo "🛠 Development & Git:"
echo " gitea - Self-hosted Git service"
echo " custom-php - Custom PHP applications"
echo ""
echo "🎨 Creative & Media:"
echo " owncast - Live streaming platform"
echo ""
echo "Deploy example:"
echo " abra app new wordpress -S --domain=mysite.<yourname>.codecrispi.es"
}
help() {
echo "📚 CODE CRISPIES Workshop Guide"
echo ""
echo "1 Connect to your assigned server:"
echo " connect <yourname> # e.g., connect hopper"
echo ""
echo "2 Check your server status:"
echo " abra server ls"
echo " abra app ls"
echo ""
echo "3 Deploy your first app:"
echo " abra app new wordpress -S --domain=mysite.<yourname>.codecrispi.es"
echo " abra app deploy mysite.<yourname>.codecrispi.es"
echo ""
echo "4 Check deployment status:"
echo " abra app ps mysite.<yourname>.codecrispi.es"
echo " abra app logs mysite.<yourname>.codecrispi.es"
echo ""
echo "5 Access your site:"
echo " https://mysite.<yourname>.codecrispi.es"
echo ""
echo "🆘 Need help? Ask the workshop facilitator!"
echo "📦 See all recipes: recipes"
}
'';
};
environment.systemPackages = with pkgs; [
openssh
curl
git
networkmanager
];
# Auto-start terminal in graphical environment
services.xserver = {
enable = true;
displayManager = {
autoLogin.enable = true;
autoLogin.user = "workshop";
sessionCommands = ''
${pkgs.xterm}/bin/xterm -maximized -e ${pkgs.zsh}/bin/zsh &
'';
};
desktopManager.xfce.enable = true;
};
# Enable hardware support for most WiFi cards
hardware.enableRedistributableFirmware = true;
# ISO-specific settings
isoImage.makeEfiBootable = true;
isoImage.makeUsbBootable = true;
})
];
};
# Dev shell
devShells.${system}.default = nixpkgs.legacyPackages.${system}.mkShell {
buildInputs = with nixpkgs.legacyPackages.${system}; [
terraform
nixos-rebuild
docker
openssh
jq
];
};
};
}