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
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"
opencode:

View File

@@ -133,11 +133,12 @@ isoConfig // {
virtualisation.docker.enable = true;
services.getty.autologinUser = "workshop";
users.users.root.password = "root";
users.users.workshop = {
isNormalUser = true;
shell = pkgs.bash;
extraGroups = [ "networkmanager" "wheel" "docker" ];
password = "";
password = "workshop";
};
security.sudo.wheelNeedsPassword = false;
@@ -148,7 +149,6 @@ isoConfig // {
git
networkmanager
firefox
xterm
docker
docker-compose
bash
@@ -200,28 +200,52 @@ isoConfig // {
# Install abra for workshop user
if [ ! -f /home/workshop/.local/bin/abra ]; then
echo "🚀 Installing abra for user workshop..."
sudo -u workshop mkdir -p /home/workshop/.local/bin
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
# Initialize Docker Swarm
echo "🔄 Checking Docker Swarm status..."
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
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
# Ensure workshop user is in docker group
echo "🔄 Ensuring workshop user is in docker group..."
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
if [ ! -f /home/workshop/.abra/servers/workshop.local.env ]; then
sudo -u workshop mkdir -p /home/workshop/.abra/servers/
fi
# Set up autocomplete
if command -v abra &> /dev/null; then
sudo -u workshop abra autocomplete bash > /home/workshop/.abra/autocomplete.bash
echo "source ~/.abra/autocomplete.bash" >> /home/workshop/.bashrc
fi
sudo -u workshop source <(abra autocomplete bash)
fi
# Test final DNS resolution
@@ -451,6 +475,21 @@ isoConfig // {
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() {
echo "🚀 CODE CRISPIES Workshop Commands:"
echo ""
@@ -460,6 +499,7 @@ isoConfig // {
echo " deploy <recipe> - Deploy app locally (e.g., deploy wordpress)"
echo " browser [recipe] - Launch Firefox [to specific app]"
echo " desktop - Start GUI desktop session"
echo " abra-status - Check the status of the abra setup service"
echo ""
echo " Cloud Access:"
echo " connect <name> - SSH to cloud server (e.g., connect hopper)"

View File

@@ -90,8 +90,10 @@
"-monitor"
"stdio"
# Add port forwarding for SSH
"-netdev" "user,id=net0,hostfwd=tcp::2222-:22"
"-device" "virtio-net,netdev=net0"
"-netdev"
"user,id=net0,hostfwd=tcp::2222-:22"
"-device"
"virtio-net,netdev=net0"
];
# Fix the auto-login conflict with mkForce
services.displayManager.autoLogin = lib.mkForce {
@@ -100,7 +102,7 @@
};
# Keep GUI session commands for when GUI is used
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" &
'';
})
];