Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-2819GitHub issuePublicReceived

Hyper-V install script

Reported by axelfontaine · filed Sep 9, 2025Closed upstream on 2025-09-10. GitHub close reason: completed. No closing PR or commit is recorded — "completed" alone is not evidence of a fix.

Received and recorded verbatim. Nothing has been checked yet.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
Not yet mapped to any requirement or component.
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Hyper-V install scriptrevision 1 · captured 2026-10-04 11:35 UTC via poll

What do you need?

Before trying Omarchy on real hardware, I decided to kick the tires using Hyper-V. I believe many other Windows users will follow a similar adoption path.

I created the following automated install script that sets up the entire VM, disks, boot order, resolution, ... from scratch and drops you into a windows with the Omarchy install already running:

# Exit on first error
$ErrorActionPreference = "Stop"
trap {
    Write-Error "Error: $($_.Exception.Message)"
    exit 1
}

# Variables
$vmName      = "Omarchy"
$vmHost  = Get-VMHost

# Path where to store everything
#$vmPath  = $vmHost.VirtualMachinePath # Hyper-V VM directory
$vmPath  = (Get-Location).Path #Current Directory
$vhdPath = Join-Path $vmPath "$vmName.vhdx"
$isoUrl  = "https://iso.omarchy.org/omarchy-online.iso"
$isoPath = Join-Path $vmPath "$vmName.iso"

# Create folders
New-Item -ItemType Directory -Force -Path (Split-Path $isoPath) | Out-Null
New-Item -ItemType Directory -Force -Path $vmPath | Out-Null

# Download ISO (skip if already exists)
if (-not (Test-Path $isoPath)) {
    Write-Host "Downloading ISO from $isoUrl ..."
    Start-BitsTransfer -Source $isoUrl -Destination $isoPath
    Write-Host "ISO downloaded to $isoPath"
} else {
    Write-Host "ISO already exists at $isoPath — skipping download"
}

# Get total system memory in bytes
$totalRAM = (Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory
# Half of system RAM in MB, rounded down to nearest whole MB
$halfRAMMB = [math]::Floor(($totalRAM / (1024*1024)) / 2)  # Convert bytes to MB
# Align to 4 MB boundary (Hyper-V prefers multiples of 4)
$alignedRAM = [math]::Floor($halfRAMMB / 4) * 4 * 1024 * 1024

# Check if VM already exists
if (Get-VM -Name $vmName -ErrorAction SilentlyContinue) {
    Write-Host "VM '$vmName' already exists — skipping creation."
} else {
    # Create VM
    New-VM -Name $vmName -MemoryStartupBytes 1GB -Generation 2 -Path $vmPath
    Set-VMMemory -VMName $vmName -DynamicMemoryEnabled $true -MinimumBytes 1GB -MaximumBytes $alignedRAM
    Write-Host "VM '$vmName' created at $vmPath"
}

# Create VHD (skip if it already exists)
if (-not (Test-Path $vhdPath)) {
    New-VHD -Path $vhdPath -SizeBytes 64GB -Dynamic | Out-Null
    Add-VMHardDiskDrive -VMName $vmName -Path $vhdPath
    Write-Host "VHD created at $vhdPath"
} else {
    Write-Host "VHD already exists at $vhdPath — skipping creation"
}

# Check if VHD is already attached
if (-not (Get-VMHardDiskDrive -VMName $vmName | Where-Object { $_.Path -eq $vhdPath })) {
    Add-VMHardDiskDrive -VMName $vmName -Path $vhdPath
    Write-Host "VHD attached."
} else {
    Write-Host "VHD is already attached — skipping."
}

# Check if ISO is already attached
if (-not (Get-VMDvdDrive -VMName $vmName | Where-Object { $_.Path -eq $isoPath })) {
    Add-VMDvdDrive -VMName $vmName -Path $isoPath
    Write-Host "ISO attached."
} else {
    Write-Host "ISO is already attached — skipping."
}

New-VMSwitch -Name "ExternalSwitch" -NetAdapterName "Ethernet" -AllowManagementOS $true
Connect-VMNetworkAdapter -VMName $vmName -SwitchName "ExternalSwitch"

# Disable Secure Boot (needed for unsigned Linux ISOs)
Set-VMFirmware -VMName $vmName -EnableSecureBoot Off

# Get the current boot order
$firmware = Get-VMFirmware -VMName $vmName

# Get the devices
$vhdDevice = $firmware.BootOrder | Where-Object { $_.Device -is [Microsoft.HyperV.PowerShell.HardDiskDrive] }
$cdDevice  = $firmware.BootOrder | Where-Object { $_.Device -is [Microsoft.HyperV.PowerShell.DvdDrive] }

# Set the boot order: VHD first, then DVD
Set-VMFirmware -VMName $vmName -BootOrder $vhdDevice, $cdDevice

# Enable Enhanced Session Mode (host + user)
Set-VMHost -EnableEnhancedSessionMode $true

# Detect host resolution and apply it to VM video
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen
$width  = $screen.Bounds.Width
$height = $screen.Bounds.Height
Set-VMVideo -VMName $vmName -HorizontalResolution $width -VerticalResolution $height -ResolutionType Single
Write-Host "Set VM resolution to $width x $height"

# Start the VM
Start-VM -Name $vmName
Write-Host "VM $vmName started."

# Open the VM console window
$vmConnectPath = "$env:SystemRoot\System32\vmconnect.exe"
Start-Process $vmConnectPath -ArgumentList "localhost", $vmName

It can be invoked as follows:

powershell -ExecutionPolicy Bypass -File .\omarchy-hyperv-setup.ps1

More work is needed inside the VM in the future, as Hyper-V should be detected and then Enhanced Session should be automatically set up. But that can be done separately, along with the other hardware-specific parts of the Omarchy installer.

I'm posting this script here as I didn't know where a good fit would be. Putting it behind a one-liner on the Omarchy homepage or manual that can be pasted directly into Windows Terminal is probably the best place.

View raw text
### What do you need?

Before trying Omarchy on real hardware, I decided to kick the tires using Hyper-V. I believe many other Windows users will follow a similar adoption path.

I created the following automated install script that sets up the entire VM, disks, boot order, resolution, ... from scratch and drops you into a windows with the Omarchy install already running:

```powershell
# Exit on first error
$ErrorActionPreference = "Stop"
trap {
    Write-Error "Error: $($_.Exception.Message)"
    exit 1
}

# Variables
$vmName      = "Omarchy"
$vmHost  = Get-VMHost

# Path where to store everything
#$vmPath  = $vmHost.VirtualMachinePath # Hyper-V VM directory
$vmPath  = (Get-Location).Path #Current Directory
$vhdPath = Join-Path $vmPath "$vmName.vhdx"
$isoUrl  = "https://iso.omarchy.org/omarchy-online.iso"
$isoPath = Join-Path $vmPath "$vmName.iso"

# Create folders
New-Item -ItemType Directory -Force -Path (Split-Path $isoPath) | Out-Null
New-Item -ItemType Directory -Force -Path $vmPath | Out-Null

# Download ISO (skip if already exists)
if (-not (Test-Path $isoPath)) {
    Write-Host "Downloading ISO from $isoUrl ..."
    Start-BitsTransfer -Source $isoUrl -Destination $isoPath
    Write-Host "ISO downloaded to $isoPath"
} else {
    Write-Host "ISO already exists at $isoPath — skipping download"
}

# Get total system memory in bytes
$totalRAM = (Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory
# Half of system RAM in MB, rounded down to nearest whole MB
$halfRAMMB = [math]::Floor(($totalRAM / (1024*1024)) / 2)  # Convert bytes to MB
# Align to 4 MB boundary (Hyper-V prefers multiples of 4)
$alignedRAM = [math]::Floor($halfRAMMB / 4) * 4 * 1024 * 1024

# Check if VM already exists
if (Get-VM -Name $vmName -ErrorAction SilentlyContinue) {
    Write-Host "VM '$vmName' already exists — skipping creation."
} else {
    # Create VM
    New-VM -Name $vmName -MemoryStartupBytes 1GB -Generation 2 -Path $vmPath
    Set-VMMemory -VMName $vmName -DynamicMemoryEnabled $true -MinimumBytes 1GB -MaximumBytes $alignedRAM
    Write-Host "VM '$vmName' created at $vmPath"
}

# Create VHD (skip if it already exists)
if (-not (Test-Path $vhdPath)) {
    New-VHD -Path $vhdPath -SizeBytes 64GB -Dynamic | Out-Null
    Add-VMHardDiskDrive -VMName $vmName -Path $vhdPath
    Write-Host "VHD created at $vhdPath"
} else {
    Write-Host "VHD already exists at $vhdPath — skipping creation"
}

# Check if VHD is already attached
if (-not (Get-VMHardDiskDrive -VMName $vmName | Where-Object { $_.Path -eq $vhdPath })) {
    Add-VMHardDiskDrive -VMName $vmName -Path $vhdPath
    Write-Host "VHD attached."
} else {
    Write-Host "VHD is already attached — skipping."
}

# Check if ISO is already attached
if (-not (Get-VMDvdDrive -VMName $vmName | Where-Object { $_.Path -eq $isoPath })) {
    Add-VMDvdDrive -VMName $vmName -Path $isoPath
    Write-Host "ISO attached."
} else {
    Write-Host "ISO is already attached — skipping."
}

New-VMSwitch -Name "ExternalSwitch" -NetAdapterName "Ethernet" -AllowManagementOS $true
Connect-VMNetworkAdapter -VMName $vmName -SwitchName "ExternalSwitch"

# Disable Secure Boot (needed for unsigned Linux ISOs)
Set-VMFirmware -VMName $vmName -EnableSecureBoot Off

# Get the current boot order
$firmware = Get-VMFirmware -VMName $vmName

# Get the devices
$vhdDevice = $firmware.BootOrder | Where-Object { $_.Device -is [Microsoft.HyperV.PowerShell.HardDiskDrive] }
$cdDevice  = $firmware.BootOrder | Where-Object { $_.Device -is [Microsoft.HyperV.PowerShell.DvdDrive] }

# Set the boot order: VHD first, then DVD
Set-VMFirmware -VMName $vmName -BootOrder $vhdDevice, $cdDevice

# Enable Enhanced Session Mode (host + user)
Set-VMHost -EnableEnhancedSessionMode $true

# Detect host resolution and apply it to VM video
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen
$width  = $screen.Bounds.Width
$height = $screen.Bounds.Height
Set-VMVideo -VMName $vmName -HorizontalResolution $width -VerticalResolution $height -ResolutionType Single
Write-Host "Set VM resolution to $width x $height"

# Start the VM
Start-VM -Name $vmName
Write-Host "VM $vmName started."

# Open the VM console window
$vmConnectPath = "$env:SystemRoot\System32\vmconnect.exe"
Start-Process $vmConnectPath -ArgumentList "localhost", $vmName
```

It can be invoked as follows:

```
powershell -ExecutionPolicy Bypass -File .\omarchy-hyperv-setup.ps1
```

More work is needed inside the VM in the future, as Hyper-V should be detected and then Enhanced Session should be automatically set up. But that can be done separately, along with the other hardware-specific parts of the Omarchy installer.

I'm posting this script here as I didn't know where a good fit would be. Putting it behind a one-liner on the Omarchy homepage or manual that can be pasted directly into Windows Terminal is probably the best place.

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

No decision has been recorded yet.