From af9eac4f466ee18f758d4ac40c13eafe0d9bf3b4 Mon Sep 17 00:00:00 2001 From: Michael Czechowski Date: Sun, 17 Aug 2025 00:39:22 +0200 Subject: [PATCH] feat: enhance workshop VM setup and developer experience --- Makefile | 2 +- common.nix | 56 ++++++++++++++++++++++++++++++++++++++++++++++-------- flake.nix | 8 +++++--- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 8a045ff..5fb7a97 100644 --- a/Makefile +++ b/Makefile @@ -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: diff --git a/common.nix b/common.nix index ba28f12..47f1604 100644 --- a/common.nix +++ b/common.nix @@ -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 + # Set up autocomplete + if command -v abra &> /dev/null; then + 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 - 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 - SSH to cloud server (e.g., connect hopper)" diff --git a/flake.nix b/flake.nix index 70f0800..5066a3a 100644 --- a/flake.nix +++ b/flake.nix @@ -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" & ''; }) ];