Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
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.
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
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", $vmNameIt can be invoked as follows:
powershell -ExecutionPolicy Bypass -File .\omarchy-hyperv-setup.ps1More 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.