diff --git a/bin/omarchy-launch-ms-windows b/bin/omarchy-launch-ms-windows index 534d715a..c09a974e 100755 --- a/bin/omarchy-launch-ms-windows +++ b/bin/omarchy-launch-ms-windows @@ -1,50 +1,40 @@ #!/bin/bash # Docker Compose Windows VM Launcher for Omarchy -# Starts Windows VM via Docker and connects with RDP -# When RDP closes, docker-compose will also stop +# Starts Windows VM via Docker Compose and connects with RDP +# When RDP closes, docker-compose will stop set -e -WINDOWS_STORAGE_DIR="$HOME/.windows" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)" +COMPOSE_DIR="$SCRIPT_DIR/../config/windows-vm" RDP_COMMAND="rdesktop -g 1920x1200 -P -z -x l -r sound:off -u docker 127.0.0.1:3389 -p admin" -DOCKER_COMMAND="docker run -d --name windows -p 8006:8006 -p 3389:3389/tcp -p 3389:3389/udp --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${WINDOWS_STORAGE_DIR}:/storage --stop-timeout 120 dockurr/windows" echo "Starting Windows VM..." # Create Windows storage directory if it doesn't exist -mkdir -p "$WINDOWS_STORAGE_DIR" +mkdir -p "$HOME/.windows" + +# Change to compose directory where docker-compose.yml is located +cd "$COMPOSE_DIR" || { + echo "Error: Could not change to $COMPOSE_DIR" + exit 1 +} -# Check for required dependencies -for cmd in docker rdesktop nc curl; do - if ! command -v "$cmd" >/dev/null 2>&1; then - echo "Error: Required command '$cmd' not found." - echo "Please ensure Docker, rdesktop, and netcat are installed." - exit 1 - fi -done # Function to handle cleanup cleanup() { echo "Shutting down Windows VM..." - docker stop windows 2>/dev/null || true - docker rm windows 2>/dev/null || true + docker-compose down exit 0 } # Set up signal handlers trap cleanup SIGTERM SIGINT -# Check if container already exists and remove it -if docker ps -a --format '{{.Names}}' | grep -q "^windows$"; then - echo "Removing existing Windows container..." - docker stop windows 2>/dev/null || true - docker rm windows 2>/dev/null || true -fi - -# Start docker container -echo "Starting Windows container..." -eval $DOCKER_COMMAND +# Start docker-compose in background +docker-compose up & +COMPOSE_PID=$! # Wait for container to be running echo "Waiting for Windows container to start..." @@ -57,9 +47,9 @@ while true; do echo " Container status: $CONTAINER_STATUS" sleep 2 - # Check if container is still running - if ! docker ps --format '{{.Names}}' | grep -q "^windows$"; then - echo "Docker container died unexpectedly" + # Check if docker-compose process is still running + if ! kill -0 $COMPOSE_PID 2>/dev/null; then + echo "Docker Compose process died unexpectedly" exit 1 fi done @@ -97,4 +87,4 @@ echo "When you close RDP, the Windows VM will automatically shut down." $RDP_COMMAND # If RDP exits, cleanup -cleanup \ No newline at end of file +cleanup diff --git a/config/windows-vm/docker-compose.yml b/config/windows-vm/docker-compose.yml new file mode 100644 index 00000000..5ef8bcf8 --- /dev/null +++ b/config/windows-vm/docker-compose.yml @@ -0,0 +1,21 @@ +services: + windows: + image: dockurr/windows + container_name: windows-omarchy + environment: + VERSION: "11" + RAM_SIZE: "12G" + CPU_CORES: "4" + devices: + - /dev/kvm + - /dev/net/tun + cap_add: + - NET_ADMIN + ports: + - 8006:8006 + - 3389:3389/tcp + - 3389:3389/udp + volumes: + - ~/.windows:/storage + restart: always + stop_grace_period: 2m