feat: enhance workshop VM setup and developer experience

This commit is contained in:
2025-08-17 00:39:22 +02:00
parent 7320ca5642
commit af9eac4f46
3 changed files with 54 additions and 12 deletions

View File

@@ -107,7 +107,7 @@ destroy-cloud:
cd terraform && terraform destroy -auto-approve cd terraform && terraform destroy -auto-approve
clean: clean:
rm -rf result .direnv terraform/.terraform terraform/terraform.tfstate* rm -rf result .direnv terraform/.terraform terraform/terraform.tfstate* workshop-vm.*
@echo "🧹 Cleaned up build artifacts" @echo "🧹 Cleaned up build artifacts"
opencode: opencode:

View File

@@ -133,11 +133,12 @@ isoConfig // {
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
services.getty.autologinUser = "workshop"; services.getty.autologinUser = "workshop";
users.users.root.password = "root";
users.users.workshop = { users.users.workshop = {
isNormalUser = true; isNormalUser = true;
shell = pkgs.bash; shell = pkgs.bash;
extraGroups = [ "networkmanager" "wheel" "docker" ]; extraGroups = [ "networkmanager" "wheel" "docker" ];
password = ""; password = "workshop";
}; };
security.sudo.wheelNeedsPassword = false; security.sudo.wheelNeedsPassword = false;
@@ -148,7 +149,6 @@ isoConfig // {
git git
networkmanager networkmanager
firefox firefox
xterm
docker docker
docker-compose docker-compose
bash bash
@@ -200,28 +200,52 @@ isoConfig // {
# Install abra for workshop user # Install abra for workshop user
if [ ! -f /home/workshop/.local/bin/abra ]; then if [ ! -f /home/workshop/.local/bin/abra ]; then
echo "🚀 Installing abra for user workshop..."
sudo -u workshop mkdir -p /home/workshop/.local/bin sudo -u workshop mkdir -p /home/workshop/.local/bin
cd /home/workshop cd /home/workshop
sudo -u workshop ${pkgs.curl}/bin/curl -fsSL https://install.abra.coopcloud.tech | sudo -u workshop ${pkgs.bash}/bin/bash # Run installer and log output
install_log="/tmp/abra-install.log"
sudo -u workshop ${pkgs.curl}/bin/curl -fsSL https://install.abra.coopcloud.tech | sudo -u workshop ${pkgs.bash}/bin/bash &> "$install_log"
if [ -f /home/workshop/.local/bin/abra ]; then
echo " abra installed successfully."
else
echo " abra installation failed. See logs: cat $install_log"
fi
else
echo " abra already installed."
fi fi
# Initialize Docker Swarm # Initialize Docker Swarm
echo "🔄 Checking Docker Swarm status..."
if ! ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then if ! ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then
echo "🔥 Initializing Docker Swarm..."
${pkgs.docker}/bin/docker swarm init --advertise-addr 127.0.0.1 2>/dev/null || true ${pkgs.docker}/bin/docker swarm init --advertise-addr 127.0.0.1 2>/dev/null || true
if ${pkgs.docker}/bin/docker info | grep -q "Swarm: active"; then
echo " Docker Swarm initialized."
else
echo " Docker Swarm initialization failed."
fi
else
echo " Docker Swarm already active."
fi fi
# Ensure workshop user is in docker group # Ensure workshop user is in docker group
echo "🔄 Ensuring workshop user is in docker group..."
usermod -aG docker workshop usermod -aG docker workshop
if id -nG workshop | grep -q "docker"; then
echo " workshop user is in docker group."
else
echo " Failed to add workshop user to docker group."
fi
# Create proper abra server configuration # Create proper abra server configuration
if [ ! -f /home/workshop/.abra/servers/workshop.local.env ]; then if [ ! -f /home/workshop/.abra/servers/workshop.local.env ]; then
sudo -u workshop mkdir -p /home/workshop/.abra/servers/ sudo -u workshop mkdir -p /home/workshop/.abra/servers/
fi
# Set up autocomplete # Set up autocomplete
if command -v abra &> /dev/null; then if command -v abra &> /dev/null; then
sudo -u workshop abra autocomplete bash > /home/workshop/.abra/autocomplete.bash sudo -u workshop source <(abra autocomplete bash)
echo "source ~/.abra/autocomplete.bash" >> /home/workshop/.bashrc
fi
fi fi
# Test final DNS resolution # Test final DNS resolution
@@ -451,6 +475,21 @@ isoConfig // {
fi fi
} }
abra-status() {
echo "🔍 Checking workshop-abra-setup service status..."
systemctl status workshop-abra-setup
echo ""
if [ -f /tmp/abra-install.log ]; then
echo "📚 Last abra installation log (/tmp/abra-install.log):"
cat /tmp/abra-install.log
else
echo " No abra installation log found at /tmp/abra-install.log"
fi
echo ""
echo "💡 To check if abra is in your PATH: which abra"
echo "💡 To check abra version: abra --version"
}
help() { help() {
echo "🚀 CODE CRISPIES Workshop Commands:" echo "🚀 CODE CRISPIES Workshop Commands:"
echo "" echo ""
@@ -460,6 +499,7 @@ isoConfig // {
echo " deploy <recipe> - Deploy app locally (e.g., deploy wordpress)" echo " deploy <recipe> - Deploy app locally (e.g., deploy wordpress)"
echo " browser [recipe] - Launch Firefox [to specific app]" echo " browser [recipe] - Launch Firefox [to specific app]"
echo " desktop - Start GUI desktop session" echo " desktop - Start GUI desktop session"
echo " abra-status - Check the status of the abra setup service"
echo "" echo ""
echo " Cloud Access:" echo " Cloud Access:"
echo " connect <name> - SSH to cloud server (e.g., connect hopper)" echo " connect <name> - SSH to cloud server (e.g., connect hopper)"

View File

@@ -90,8 +90,10 @@
"-monitor" "-monitor"
"stdio" "stdio"
# Add port forwarding for SSH # Add port forwarding for SSH
"-netdev" "user,id=net0,hostfwd=tcp::2222-:22" "-netdev"
"-device" "virtio-net,netdev=net0" "user,id=net0,hostfwd=tcp::2222-:22"
"-device"
"virtio-net,netdev=net0"
]; ];
# Fix the auto-login conflict with mkForce # Fix the auto-login conflict with mkForce
services.displayManager.autoLogin = lib.mkForce { services.displayManager.autoLogin = lib.mkForce {
@@ -100,7 +102,7 @@
}; };
# Keep GUI session commands for when GUI is used # Keep GUI session commands for when GUI is used
services.xserver.displayManager.sessionCommands = '' services.xserver.displayManager.sessionCommands = ''
${pkgs.xfce.xfce4-terminal}/bin/xfce4-terminal --fullscreen --title="Workshop Terminal" & ${pkgs.xfce.xfce4-terminal}/bin/xfce4-terminal --fullscreen --maximize --hide-toolbar --hide-borders --hide-menubar --hide-toolbar --title="Workshop Terminal" &
''; '';
}) })
]; ];