Date: December 15, 2025
Time Required: ~45 minutes
Prerequisites:
- VirtualBox installed
- openSUSE Leap 15.6 ISO downloaded
- 8GB+ RAM available
- 50GB+ disk space
-
Launch VirtualBox
-
Click "New" button (or Machine → New)
-
In the dialog:
Name and Operating System:
Name: geckoforge-test Folder: (default is fine) Type: Linux Version: openSUSE (64-bit)Click Next
RAM: 8192 MB (8 GB)
Note: If you have 16GB+ RAM available, consider 12GB or 16GB for better performance.
Click Next
○ Create a virtual hard disk now
Click Create
○ VDI (VirtualBox Disk Image)
Click Next
○ Dynamically allocated
Note: This means the VM disk only uses space as needed, not the full 50GB upfront.
Click Next
File location: geckoforge-test (default)
Size: 50.00 GB
Click Create
- Right-click geckoforge-test VM
- Select Settings
Go to System tab:
Motherboard Tab:
✓ Enable EFI (special OSes only) ← CRITICAL!
Boot Order:
✓ Optical
✓ Hard Disk
☐ Floppy
☐ Network
Processor Tab:
Processor(s): 4 CPUs
Click OK to apply
Go to Display tab:
Video Memory: 128 MB
Graphics Controller: VMSVGA (or VBoxSVGA)
☐ Enable 3D Acceleration (keep unchecked)
Click OK
Go to Shared Folders tab:
-
Click the folder icon with + (Add Shared Folder)
-
In the dialog:
Folder Path: Click dropdown → Other Navigate to: /home/jay/Documents/Vaidya-Solutions-Code/geckoforge Select Folder Folder Name: geckoforge ← Will be used to mount later ✓ Auto-mount ✓ Make Permanent ☐ Read-only (leave unchecked) Mount point: (leave blank - will auto-mount to /media/sf_geckoforge) -
Click OK
-
Click OK to close Settings
- With geckoforge-test selected, go to Settings
- Go to Storage tab
- Under Controller: IDE or Controller: SATA, select Empty (optical drive)
- On the right, under Attributes, click the disc icon
- Select "Choose a disk file..."
- Navigate to your downloaded ISO:
openSUSE-Leap-15.6-DVD-x86_64-Current.iso - Click Open
- Click OK to close Settings
- Select geckoforge-test
- Click Start (green arrow)
- VM window opens and boots from ISO
When you see the openSUSE boot menu:
> Installation
Upgrade
Rescue System
...
- Select "Installation" (should be default)
- Press Enter
Wait: System loads installer (~1-2 minutes)
Language: English (or your preference)
Keyboard Layout: English (US) (or your preference)
Click Next
○ No, Skip Online Repositories ← Recommended for faster install
Note: We'll update after installation via scripts.
Click Next
○ Desktop with KDE Plasma ← CRITICAL! Select this one
Do NOT select:
- ☐ Server
- ☐ Transactional Server
- ☐ Desktop with GNOME
Click Next
Default partitioning is PERFECT:
Partition Setup:
/boot/efi 512 MB vfat
/ (rest) Btrfs with snapshots ✓
Filesystem: Btrfs
Enable Snapshots: Yes ✓
Don't change anything here - openSUSE's default Btrfs setup is exactly what geckoforge expects!
Click Next
Region: (Your region, e.g., America)
Time Zone: (Your timezone, e.g., New York)
Hardware Clock Set To UTC: ✓ (keep checked)
Click Next
IMPORTANT: Create your user account
User's Full Name: Jay Elliott (or your name)
Username: jay ← This matches geckoforge defaults
Password: [your password]
Confirm Password: [your password]
☐ Use this password for system administrator ← UNCHECK THIS
✓ Automatic Login ← Optional, convenient for testing
Click Next
Root Password: [your root password]
Confirm Password: [your root password]
Security Note: For testing VM, you can use the same password as your user.
Click Next
You'll see a summary screen. Verify:
✓ System: x86_64, EFI
✓ Keyboard: English (US)
✓ Partitioning: Btrfs with snapshots
✓ Software: KDE Plasma Desktop
✓ User: jay
Optional: Click "Software" to see what's being installed
- You should see patterns like
kde,kde_plasma,base,enhanced_base
Click Install (bottom right)
Popup asks: "Start Installation?"
All data on selected drives will be erased!
Click Install
Wait: Installation takes 15-20 minutes
You'll see:
- Package installation progress
- Generating initrd
- Preparing system for first boot
DO NOT CLOSE THE WINDOW OR STOP THE VM
When complete:
Installation Successfully Completed
Click Finish
-
VM will reboot automatically
-
IMPORTANT: When you see the boot screen, quickly go to:
- VirtualBox menu: Devices → Optical Drives → Remove disk from virtual drive
- Or it may auto-eject
-
System boots into openSUSE for the first time
If you enabled Auto Login: You'll boot directly to KDE Plasma desktop
If not:
Username: jay
Password: [your password]
Click Log In
KDE may show a welcome wizard. You can:
- Click through it (takes 2 minutes)
- Or skip: Click "Skip" or close window
- Click Application Launcher (bottom left, KDE logo)
- Type:
konsole - Press Enter
Or use keyboard shortcut: Ctrl+Alt+T
# Refresh repositories
sudo zypper refresh
# Update all packages
sudo zypper update -yWait: Updates take ~5-10 minutes depending on how recent your ISO is.
When prompted about conflicts or vendor changes:
Solution 1: replace [package] with [newer version]
Type: 1 and press Enter (choose to replace/update)
# Install required packages
sudo zypper install -y virtualbox-guest-tools kernel-devel
# Reboot to activate Guest Additions
sudo rebootWait: VM reboots (~30 seconds)
After reboot, login again:
Username: jay
Password: [your password]
Open terminal (Konsole) again:
# Add your user to VirtualBox shared folder group
sudo usermod -aG vboxsf $USER
# Verify it was added
groups $USERExpected output should include: ... wheel vboxsf ...
sudo rebootNote: You MUST reboot for group membership to activate. Logging out/in is not enough.
After reboot and login, open terminal:
# Check if shared folder is mounted
ls -la /media/sf_geckoforge
# You should see your geckoforge repo files:
# home/ scripts/ docs/ etc.If it says "Permission denied": Group membership didn't apply yet. Try:
# Manual mount (temporary)
sudo mount -t vboxsf geckoforge /mnt/geckoforge
cd /mnt/geckoforgeIf it says "No such file or directory": Shared folder not configured. Go back to Phase 2, Step 10.
# Go to your geckoforge repo (via shared folder)
cd /media/sf_geckoforge
# Verify you're in the right place
ls -la
# Should show: home/ scripts/ docs/ README.md etc.
# Check current location
pwd
# Should show: /media/sf_geckoforge# Ensure scripts are executable
chmod +x scripts/*.sh# Run the main setup script
./scripts/firstrun-user.shThis script will:
- Detect no NVIDIA GPU (gracefully skip GPU setup)
- Install Docker
- Install Nix (multi-user)
- Set up Home-Manager
- Guide you through configuration
Follow the prompts:
- Docker setup:
y(yes) - NVIDIA detection: Will say "No NVIDIA GPU detected - skipping"
- Nix installation:
y(yes) - Home-Manager setup:
y(yes)
Wait: This takes ~10-15 minutes
After firstrun-user.sh completes:
# Reload shell to pick up Nix
source ~/.nix-profile/etc/profile.d/nix.sh
# Verify Nix is available
nix --version
# Should show: nix (Nix) 2.x.x
# Verify Home-Manager is available
home-manager --version
# Should show: 24.05 (or similar)# Navigate to home config
cd /media/sf_geckoforge/home
# Apply your full configuration
home-manager switch --flake .This installs:
- VS Code + all 29 extensions
- Python, Node.js, Go, Elixir, etc.
- Development tools
- All Nix modules (power, network, docker, etc.)
Wait: First build takes ~10-15 minutes (downloads packages)
Expected output:
Starting Home Manager activation
...
[vscode] VS Code configured with 29 extensions
[docker] Docker utilities installed
[network] DNS-over-TLS configured
...
Activation complete
# Check VS Code
code --version
# Check Node.js
node --version
# Check Python
python3 --version
# Check Go
go version
# Check Docker
docker --version
# Test Docker
sudo usermod -aG docker $USER
# Logout/login or newgrp docker for group to take effect# Launch VS Code
code /media/sf_geckoforge
# Or open specific file
code /media/sf_geckoforge/home/home.nixVS Code should:
- Launch successfully
- Show all extensions in Extensions panel
- Prompt to sign into GitHub Copilot (if enabled)
Create base snapshot now:
- In VirtualBox window menu: Machine → Take Snapshot
- Name:
01-base-geckoforge-setup - Description:
After firstrun-user.sh and home-manager switch - Click OK
Before testing any change:
- Take snapshot: Name it
before-test-[feature] - Make changes in WSL2 (they appear instantly in VM via shared folder)
- Test in VM:
cd /media/sf_geckoforge && ... - If breaks: Machine → Restore Snapshot
- Fix in WSL2
- Test again
In WSL2:
cd ~/Documents/Vaidya-Solutions-Code/geckoforge
vim home/home.nix # Make changes
# No git commit needed!In VM (changes visible immediately):
cd /media/sf_geckoforge/home
home-manager switch --flake . # Apply changesIf it breaks:
- VirtualBox: Restore snapshot (10 seconds)
- WSL2: Fix the config
- VM: Try again (instantly sees new changes)
# Check if VirtualBox modules loaded
lsmod | grep vbox
# Check if shared folder is defined
VBoxControl sharedfolder list
# Manual mount
sudo mkdir -p /mnt/geckoforge
sudo mount -t vboxsf geckoforge /mnt/geckoforge
cd /mnt/geckoforge# Verify group membership
groups
# Should show: ... vboxsf ...
# If not there, add again
sudo usermod -aG vboxsf $USER
sudo reboot# Add user to docker group
sudo usermod -aG docker $USER
# Either logout/login OR
newgrp docker
# Test
docker ps# Check Nix is sourced
which nix
# Should show: /nix/store/.../bin/nix
# If not, source Nix profile
source ~/.nix-profile/etc/profile.d/nix.sh
# Try again
cd /media/sf_geckoforge/home
home-manager switch --flake . --show-trace# Check if installed
which code
# Should show path
# If not, ensure home-manager applied successfully
cd /media/sf_geckoforge/home
home-manager switch --flake .
# Try launching with error output
code --verbose# Access shared folder
cd /media/sf_geckoforge
# Apply Home-Manager changes
cd /media/sf_geckoforge/home && home-manager switch --flake .
# Check Home-Manager generations
home-manager generations
# Rollback if something breaks
home-manager rollback
# Update system packages
sudo zypper refresh && sudo zypper update
# Reboot VM
sudo reboot
# Shutdown VM
sudo shutdown -h now✅ You now have:
- Working openSUSE Leap 15.6 + KDE Plasma
- VirtualBox Guest Additions (shared folders working)
- Docker installed and configured
- Nix + Home-Manager set up
- VS Code with all extensions
- Complete development environment
- Instant edit-test workflow via shared folders
✅ You can:
- Edit configs in WSL2
- Test instantly in VM
- Revert with snapshots in seconds
- Document any failures
- Iterate quickly
🚀 Next phase: Once you've tested everything and are confident, we'll set up Packer automation to build reproducible VMs automatically!
Total Setup Time: ~45 minutes
Your geckoforge environment is now ready for testing! 🎉