mirror of
https://github.com/lotabout/skim.git
synced 2026-09-09 23:06:17 -04:00
* wip: windows support * feat: windows support * feat: add windows target to CI * chore: generate completions & manpage * Update src/util.rs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore: cleanup & doc * chore: generate completions & manpage * chore: generate dist * fix: reduplicate default test * chore: regate tmux * chore: remove useless test-utils feature * fix(windows): ignore dirs in default_command * docs: update shell docs for windows * chore: generate completions & manpage * chore(justfile): do not ignore failed tests * fix: upload correct junit after profile change * fix: always execute exit commands * fix: windows-specific ctrl-c handling * chore: misc docs & other updates Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore: generate completions & manpage * chore: include license in MSI installer --------- Co-authored-by: Skim bot <skim-bot@skim-rs.github.io> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Your Name <you@example.com>
122 lines
5.8 KiB
Ruby
122 lines
5.8 KiB
Ruby
# -*- mode: ruby -*-
|
|
# vi: set ft=ruby :
|
|
#
|
|
# Windows development VM for testing skim on Windows without a GUI.
|
|
#
|
|
# Prerequisites (host, NixOS):
|
|
# virtualisation.libvirtd.enable = true;
|
|
# users.users.<you>.extraGroups = [ "libvirtd" ]; # then log out/in
|
|
#
|
|
# Usage:
|
|
# vagrant up # First boot: downloads box, provisions (~15-20 min)
|
|
# vagrant up --provision # Re-run provisioning on existing VM
|
|
# vagrant ssh # SSH in via vagrant
|
|
# vagrant ssh-config # Show IP/key if you prefer a raw ssh command
|
|
# vagrant halt # Stop the VM
|
|
# vagrant destroy # Delete the VM
|
|
#
|
|
# Inside the VM:
|
|
# cd C:\vagrant # Project root (synced from host, see note below)
|
|
# cargo build # Build skim
|
|
# cargo test # Run tests
|
|
#
|
|
# Note: The first `vagrant up` requires internet access on the VM to install
|
|
# packages via Chocolatey.
|
|
|
|
Vagrant.configure("2") do |config|
|
|
# Windows Server 2022 Core — minimal footprint, no desktop GUI.
|
|
# Box source: https://app.vagrantup.com/gusztavvargadr/boxes/windows-server-2022-standard-core
|
|
config.vm.box = "gusztavvargadr/windows-server-2022-standard-core"
|
|
|
|
# Vagrant manages the VM via WinRM (the Windows default).
|
|
config.vm.communicator = "winrm"
|
|
config.winrm.username = "vagrant"
|
|
config.winrm.password = "vagrant"
|
|
config.winrm.timeout = 600 # provisioning can take a while on first boot
|
|
|
|
config.vm.provider "libvirt" do |lv|
|
|
lv.driver = "kvm"
|
|
lv.memory = 2048
|
|
lv.cpus = 2
|
|
end
|
|
|
|
# rsync is used for the synced folder because libvirt has no native
|
|
# shared-folder support for Windows guests. rsync must be present on the
|
|
# guest, so the folder is disabled on boot and synced via a post-provision
|
|
# trigger (after Chocolatey installs rsync below).
|
|
# Re-sync manually at any time with: vagrant rsync
|
|
# rsync is used because libvirt has no native shared-folder support for
|
|
# Windows guests. On a brand-new VM the very first `vagrant up` will fail
|
|
# the rsync step (rsync not yet installed on the guest); run
|
|
# `vagrant provision && vagrant rsync` to recover, or just
|
|
# `vagrant destroy && vagrant up` after the box is cached locally.
|
|
# cwRsync (the Windows rsync from Chocolatey) uses Cygwin paths, so the
|
|
# guest path must use /cygdrive/c/... rather than a bare /vagrant.
|
|
config.vm.synced_folder ".", "/cygdrive/c/vagrant", type: "rsync",
|
|
rsync__exclude: [".git/", "target/", ".jj/"],
|
|
rsync__args: ["--verbose", "--archive", "--delete", "--copy-links", "--no-owner", "--no-group"]
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Provisioning: configure OpenSSH + install Rust toolchain via Chocolatey.
|
|
# The box ships with Win32-OpenSSH already present, so we only configure it.
|
|
# Runs once on `vagrant up`; re-run with `vagrant provision`.
|
|
# ---------------------------------------------------------------------------
|
|
config.vm.provision "shell", privileged: true, inline: <<-'POWERSHELL'
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# --- Chocolatey -------------------------------------------------------------
|
|
Write-Host "==> Installing Chocolatey..."
|
|
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
|
|
Set-ExecutionPolicy Bypass -Scope Process -Force
|
|
[System.Net.ServicePointManager]::SecurityProtocol =
|
|
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072
|
|
Invoke-Expression (
|
|
(New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')
|
|
)
|
|
}
|
|
|
|
# --- OpenSSH Server ---------------------------------------------------------
|
|
# The box ships with Win32-OpenSSH binaries at C:\Program Files\OpenSSH-Win64.
|
|
# Re-run install-sshd.ps1 to register the service (idempotent; safe to
|
|
# re-run if the service is already present).
|
|
Write-Host "==> Registering and starting sshd..."
|
|
& "C:\Program Files\OpenSSH-Win64\install-sshd.ps1"
|
|
Set-Service -Name sshd -StartupType Automatic
|
|
Start-Service -Name sshd
|
|
|
|
# Use PowerShell as the default shell for SSH sessions.
|
|
$regPath = "HKLM:\SOFTWARE\OpenSSH"
|
|
if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null }
|
|
Set-ItemProperty -Path $regPath -Name DefaultShell `
|
|
-Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
|
|
# Allow inbound SSH through the Windows firewall.
|
|
$rule = Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue
|
|
if (-not $rule) {
|
|
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" `
|
|
-DisplayName "OpenSSH Server (sshd)" `
|
|
-Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
|
|
}
|
|
|
|
# --- Rust, Git, rsync -------------------------------------------------------
|
|
Write-Host "==> Installing Rust, Git, rsync, and MinGW..."
|
|
choco install -y rust git rsync mingw
|
|
|
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") +
|
|
";" + [System.Environment]::GetEnvironmentVariable("Path", "User")
|
|
|
|
# Add MinGW bin to the persistent system PATH so dlltool.exe is found in
|
|
# SSH sessions (which don't run the Chocolatey shim refresh).
|
|
$mingwBin = "C:\ProgramData\mingw64\mingw64\bin"
|
|
$machinePath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
|
|
if ($machinePath -notlike "*$mingwBin*") {
|
|
[System.Environment]::SetEnvironmentVariable("Path", "$machinePath;$mingwBin", "Machine")
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "==> Provisioning complete."
|
|
Write-Host " SSH into the VM: vagrant ssh-config (then ssh to the reported IP)"
|
|
Write-Host " Build skim: cd C:\vagrant && cargo build"
|
|
POWERSHELL
|
|
end
|