diff --git a/common.nix b/common.nix index 1def7aa..3a2aa27 100644 --- a/common.nix +++ b/common.nix @@ -195,17 +195,22 @@ isoConfig // { fi } - desktop() { - echo "🖥️ Starting GUI session..." - if [ -z "$DISPLAY" ]; then - startx & - export DISPLAY=:0 - sleep 3 - echo "✅ GUI started. Run 'browser' to open Firefox" - else - echo "ℹ️ GUI already running" - fi - } + desktop() { + echo "🖥️ Starting GUI session..." + if command -v startx &> /dev/null; then + if [ -z "$DISPLAY" ]; then + startx & + export DISPLAY=:0 + sleep 3 + echo "✅ GUI started. Check QEMU window or run 'browser'" + else + echo "ℹ️ GUI already running" + fi + else + echo "💡 GUI available in QEMU window (Alt+Tab to switch)" + echo "🖱️ Click on QEMU graphics window to use desktop" + fi + } help() { echo "CODE CRISPIES Workshop Commands:" diff --git a/flake.nix b/flake.nix index 59906f6..5a139cd 100644 --- a/flake.nix +++ b/flake.nix @@ -76,22 +76,27 @@ networking.networkmanager.enable = true; networking.firewall.enable = false; - # Serial console configuration - the RIGHT way + # Hybrid console configuration - serial primary, GUI available boot.kernelParams = [ "console=ttyS0,115200" "console=tty1" ]; # VM specific settings virtualisation.memorySize = 4096; virtualisation.diskSize = 40000; - # Force serial console as primary + # Hybrid mode: GUI available but serial console primary virtualisation.qemu.options = [ - "-nographic" + "-display" "gtk" + "-monitor" "stdio" ]; # Fix the auto-login conflict with mkForce services.displayManager.autoLogin = lib.mkForce { enable = true; user = "workshop"; }; + # Keep GUI session commands for when GUI is used + services.xserver.displayManager.sessionCommands = '' + ${pkgs.xfce.xfce4-terminal}/bin/xfce4-terminal --fullscreen --title="Workshop Terminal" & + ''; }) ]; };