✨ Bringing Windows Vista to KDE Plasma 6 — A Complete Linux Transformation Guide
Distro-agnostic. Built and tested on Void Linux + KDE Plasma 6 Wayland, but every step works the same on Arch, Fedora, openSUSE, NixOS, or Debian-based distros — only the package names change.
This article walks through everything I did to turn my Linux desktop into a pixel-faithful Windows Vista clone, including the parts that nobody documents: real Aero glass on Spotify, IE9-style Firefox, blur extended to GTK/libadwaita apps, and the obscure quirks that cost me hours.
Table of contents
- What you’re building
- Prerequisites
- VistaThemePlasma — the desktop core
- Plymouth boot splash
- Real Vista fonts (extracted from a Vista ISO)
- Vista wallpapers
- GTK/libadwaita apps — Windows-7-Better
- Firefox → Internet Explorer 9 (BeautyFox)
- Spotify with WMPotify + real Aero glass
- Extending the Aero blur to every GTK app
- Quirks & fixes cheat sheet
- Credits
What you’re building
When everything is in place you get:
- A Plasma 6 desktop with the Vista start orb, Aero Glass titlebars, the Vista taskbar, Vista cursor and sound theme
- A Plymouth boot splash that looks like Vista booting
- Authentic Vista fonts (Segoe UI, Calibri, Cambria, Consolas, …)
- All GTK 2/3/4 + libadwaita apps themed to match
- Firefox styled as Internet Explorer 9 (full chrome, not just a CSS shim)
- Spotify running with the WMP11/Vista look, real transparency, real live blur behind the window, and a working WMP-style mini-player
The screenshots in your head are the goal. Let’s go.
Prerequisites
| Component | Why |
|---|---|
| KDE Plasma 6 (any distro) | The entire transformation hangs off Plasma’s theming engine |
| KWin running with compositing | Required for any blur/transparency |
git, make, g++ with C++23 |
We will build one out-of-tree KWin effect and one in-memory CEF patch |
kwriteconfig6, kreadconfig6, qdbus |
KDE config tooling, ship with Plasma |
| A Windows Vista SP2 ISO | For the real fonts and wallpapers. Any Vista ISO works |
About 12 GB free in $HOME |
Vista’s install.wim is 3.4 GB; we extract from it then delete |
Wayland note: Plasma 6 Wayland works for everything in this guide. Some sub-components (notably the Spotify transparency patch) target X11 internals — we force XWayland for those specific apps. You do not need to log into a full X11 session.
VistaThemePlasma — the desktop core
VistaThemePlasma (VTP) is a fork of WackyIdeas’ AeroThemePlasma. It ships:
- The Aero Glass Blur KWin effect (
aeroglassblur) - The Aero Glide window-open animation (
aeroglide) - The SMOD window decoration (Vista titlebar, the round close button, the inner border)
- A Vista-Black Plasma desktop theme
- A taskbar plasmoid, start orb plasmoid, sidebar gadgets
- Cursor theme and sound theme
Install
cd ~
git clone https://gitgud.io/aeroshell/atp/aerothemeplasma.git vistathemeplasma
cd vistathemeplasma
./install.sh
The installer is interactive — pick “all” when prompted. It builds the C++ KWin plugins against your Plasma 6 / Qt 6 headers, drops them in ~/.local/share/kwin/effects and /usr/lib/qt6/plugins/kwin/effects/plugins, and writes a Plasma desktop theme to ~/.local/share/plasma/desktoptheme/Vista-Black.
After it finishes:
# enable the effects
kwriteconfig6 --file kwinrc --group Plugins --key aeroglassblurEnabled true
kwriteconfig6 --file kwinrc --group Plugins --key aeroglideEnabled true
kwriteconfig6 --file kwinrc --group Plugins --key blurEnabled false # disable stock blur, aeroglassblur replaces it
qdbus org.kde.KWin /KWin reconfigure
Then in System Settings:
- Appearance → Global Theme → Vista
- Appearance → Plasma Style → Vista-Black
- Appearance → Application Style → Window Decorations → SMOD
- Appearance → Cursors → Aero cursors
- Appearance → Sounds → Vista sounds
- Workspace Behavior → Desktop Effects → enable Aero Glass Blur
Log out and back in once.
Wayland caveat (from the README): VTP “currently lacks full Wayland support”. Most things work, but the SMOD decoration’s inner-border drawing relies on X11 atoms — you’ll see slightly different decoration behavior on Wayland for some XWayland apps.
Plymouth boot splash
PlymouthVista replaces the boot splash with the Vista boot animation.
cd ~
git clone https://github.com/aeroshell-desktop/PlymouthVista.git
cd PlymouthVista
sudo ./install.sh
# pick the theme and rebuild initramfs (the installer does this)
sudo plymouth-set-default-theme -R PlymouthVista
On Void replace the rebuild step with xbps-reconfigure -f linux<version>; on Arch use mkinitcpio -P; on Fedora dracut -f. The installer handles most of these.
Real Vista fonts (extracted from a Vista ISO)
Microsoft licenses Segoe UI, Calibri, Cambria, etc. only with Vista/Windows itself, so you cannot legally download them as standalone files. You can extract them from a Vista ISO you own.
Save this as ~/install-vista-fonts.sh:
#!/bin/bash
set -e
ISO="$HOME/path/to/your-windows-vista.iso" # adjust to wherever your ISO is
WORKDIR="/tmp/vistafonts"
rm -rf "$WORKDIR" && mkdir -p "$WORKDIR" && cd "$WORKDIR"
echo "[*] Extracting install.wim from ISO..."
7z x "$ISO" sources/install.wim -o"$WORKDIR"
echo "[*] Extracting fonts from install.wim..."
7z x "$WORKDIR/sources/install.wim" 1/Windows/Fonts -o"$WORKDIR"
echo "[*] Installing fonts..."
sudo mkdir -p /usr/share/fonts/vista
for prefix in segoe Segoe consola calibri cambria corbel cour tahoma arial trebuc verdana; do
sudo cp "$WORKDIR/1/Windows/Fonts"/${prefix}*.ttf /usr/share/fonts/vista/ 2>/dev/null || true
done
sudo fc-cache -fv
echo "[*] Done. Set Segoe UI as your system font in System Settings → Fonts."
chmod +x install-vista-fonts.sh && ./install-vista-fonts.sh
The ISO ships four editions (Home Basic / Premium / Business / Ultimate), all with identical font files, so picking image 1 works. The 3.4 GB install.wim is decompressed in /tmp; remove /tmp/vistafonts afterwards.
Vista wallpapers
Same source ISO contains all 36 default Vista wallpapers at 1920×1440. To get them:
ISO="$HOME/path/to/your-windows-vista.iso" # same ISO as the fonts step
mkdir -p /tmp/vista-extract && cd /tmp/vista-extract
7z e "$ISO" "sources/install.wim"
mkdir -p ~/Pictures/Vista-Wallpapers
7z e install.wim "1/Windows/Web/Wallpaper/*.jpg" -o"$HOME/Pictures/Vista-Wallpapers"
cd ~ && rm -rf /tmp/vista-extract
Right-click the desktop → Configure Desktop → pick a file.
GTK/libadwaita apps — Windows-7-Better
VTP themes Qt/KDE apps. GTK and libadwaita apps need their own theme. Windows-7-Better (display name: Windows 7 Extended, an extended fork of B00MERANG’s Windows 7 theme by Gamer95875) covers GTK 2 / 3 / 4 + libadwaita + Cinnamon-shell + Metacity:
git clone https://gitgud.io/Gamer95875/Windows-7-Better.git ~/.themes/Windows-7-Better
Then in System Settings → Appearance → Application Style → GTK pick Windows-7-Better. Run git pull in the clone whenever you want updates — the maintainer pushes fixes frequently.
libadwaita is special
GTK 4 / libadwaita apps refuse to read the system GTK theme. You override them globally by symlinking the GTK4 portion into ~/.config:
cp -r ~/.themes/Windows-7-Better/gtk-4.0 ~/.config/
That breaks hot-swapping of GTK 4 themes but applies the Vista look immediately to GNOME apps like nautilus, gnome-tweaks, etc. The trade-off is documented in the project’s README.
Per-app fixes when an app looks wrong
Some apps (Lutris, some Electron apps) cap their own colors. Right-click the titlebar → More Actions → Configure Special Window Settings, copy the application name, and apply per-window overrides — there’s a screenshot-walk-through in the Windows-7-Better README that covers this exact case.
Firefox → Internet Explorer 9 (BeautyFox)
BeautyFox by Dominic Hayes-Feren (dominichayesferen, originally angelbruni) is a complete Firefox chrome reskin with multiple appearance modes. We want IE9PreRelease (there’s also IE9PreRelease7777 if you want the slightly earlier PR 7777 build of IE9 instead of PR 7930).
The repo’s
mainbranch is BeautyFox 2.0 — still WIP at the time of writing. Use thebeautyfox-1branch for the released 1.0 that matches this guide.
Install
BeautyFox has two halves: a chrome/ folder that goes into your Firefox profile, and a Firefox Folder/ whose contents go next to the Firefox binary itself (so the theme can override built-in pages like about:newtab).
# 1. Clone the 1.0 release branch
git clone -b beautyfox-1 https://github.com/dominichayesferen/BeautyFox.git ~/BeautyFox
# 2. Find your Firefox profile folder
ls ~/.mozilla/firefox/*.default* # pick the active one
PROFILE="$HOME/.mozilla/firefox/<yours>.default-default"
# 3. Copy chrome/ into the profile
cp -r ~/BeautyFox/"Profile Folder"/chrome "$PROFILE/"
# 4. Copy Firefox Folder/ contents next to the Firefox binary
# (path depends on distro/package — adjust)
sudo cp -r ~/BeautyFox/"Firefox Folder"/* /usr/lib/firefox-esr/ # or /usr/lib/firefox/ on non-ESR
Enable userChrome.css and the IE9 appearance
In about:config set:
| Key | Value |
|---|---|
toolkit.legacyUserProfileCustomizations.stylesheets |
true |
BeautyFox.appearance.IE9PreRelease |
true (create as Boolean) |
svg.context-properties.content.enabled |
true |
layout.css.color-mix.enabled |
true |
Then about:support → Clear startup cache → restart Firefox. The window now has the IE9 chrome — back/forward/home, address bar with favicon and lock icon, separate search bar, the works. The BeautyFox Settings panel (accessible from the menu) lets you toggle other appearance modes if you want to A/B between IE9, IE9 PR 7777, IE7, etc.
If you edit
userChrome.scssyourself, recompile withsass userChrome.scss userChrome.css— the repo ships with a precompileduserChrome.cssand source map already.
Recommended extras
- DownThemAll for the IE-style download dialog
- Tab Mix Plus to lift Firefox’s tab bar to where IE9’s was
Spotify with WMPotify + real Aero glass
This is the part I spent the most time on. There are four moving pieces and a couple of non-obvious gotchas. Skim the whole section before starting.
Components
- Spicetify — installs theme/JS into Spotify’s CEF bundle
- WMPotify — a Spicetify theme that draws Spotify as WMP11 / Vista Aero
- libcef-transparency-linux — an LD_AUDIT-loaded patch that makes Spotify’s X11 window transparent (Spotify has no
--enable-transparent-visualsknob) - KWin aeroglassblur with Spotify’s window class in its force-blur list — draws real Aero blur behind the transparent window
- A KWin Window Rule that lifts Spotify’s built-in minimum size — makes WMPotify’s mini-mode work
Step 1 — Install Spicetify
curl -fsSL https://raw.githubusercontent.com/spicetify/cli/main/install.sh | sh
spicetify backup apply
If you installed Spotify from a system package (e.g. Void’s
spotify-x86_64, Arch’s AUR, Fedora’s RPM Fusion), Spicetify will need write access to the Spotify install dir. On Void mine lives at/usr/libexec/spotify/. Spicetify will warn if it can’t write — fix the permissions per its docs.
Step 2 — Install WMPotify
The official one-liner:
curl -fsSL https://raw.githubusercontent.com/Ingan121/WMPotify/master/installer/install.sh | sh
This sets current_theme = WMPotify and pulls the wmpvis custom app.
Make sure these are on in ~/.config/spicetify/config-xpui.ini:
inject_css = 1
replace_colors = 1
overwrite_assets = 1
inject_theme_js = 1
Step 3 — Add an [aero] color scheme
WMPotify’s stock color.ini only ships [light] and [dark]. If you set color_scheme = aero (which feels right semantically since the in-app Style = Aero is the real toggle), Spicetify warns “Color scheme ‘aero’ not found; using first scheme” and silently falls back to light.
Open ~/.config/spicetify/Themes/WMPotify/color.ini and append:
[aero]
main = 1a2230
subtext = a8b8d0
shadow = 000000
text = ffffff
button = 4ac8ff
button-active = 88dcff
accent = 4ac8ff
card = 1a2230
sidebar = 1a2230
player = 0e1828
main-elevated = 222d40
highlight-elevated = 2a3850
Then spicetify apply.
Step 4 — Build libcef-transparency-linux
CEF (the Chromium Embedded Framework that Spotify ships) does not expose a transparency toggle on Linux. fixpointer/libcef-transparency-linux patches CEF in memory via LD_AUDIT:
mkdir -p ~/repos && cd ~/repos
git clone https://github.com/fixpointer/libcef-transparency-linux.git
cd libcef-transparency-linux
make # builds patcher_lib.so against libpmparser
The result is ~/repos/libcef-transparency-linux/patcher_lib.so (~63 KB). It uses LD_AUDIT to scan CEF’s memory pages for a known byte pattern and rewrite the X11 transparency flag — the on-disk libcef.so is never touched. When Spotify ships a new CEF, the byte pattern may need to be updated in patcher_lib.cc; that’s the maintenance cost.
Step 5 — Wrap the Spotify launcher
Spotify on Linux is normally a 3-line shell wrapper /usr/bin/spotify calling /usr/libexec/spotify/spotify. We want every launch (menu, dock, MIME handler for spotify: URIs) to:
- Set
LD_AUDITso CEF gets patched - Pass
--ozone-platform=x11so Spotify runs under XWayland (the transparency patch targets X11; KDE Wayland sessions otherwise auto-selectozone=wayland)
Create the wrapper at ~/.local/bin/spotify-aero:
mkdir -p ~/.local/bin
cat > ~/.local/bin/spotify-aero <<EOF
#!/bin/sh
exec env LD_AUDIT="$HOME/repos/libcef-transparency-linux/patcher_lib.so" \\
/usr/bin/spotify --ozone-platform=x11 "\$@"
EOF
chmod +x ~/.local/bin/spotify-aero
The <<EOF (unquoted) lets $HOME expand to the absolute path at install time, so the file ends up with a real path baked in — necessary because .desktop files cannot expand ~ or $HOME themselves.
Then override the system desktop entry with a user-level one — ~/.local/share/applications/spotify.desktop:
[Desktop Entry]
Type=Application
Name=Spotify
GenericName=Music Player
Icon=spotify-client
TryExec=spotify
Exec=PATH_TO_HOME/.local/bin/spotify-aero %U
Terminal=false
MimeType=x-scheme-handler/spotify;
Categories=Audio;Music;Player;AudioVideo;
StartupWMClass=spotify
Replace PATH_TO_HOME with the absolute path to your home folder (echo $HOME will tell you — typically /home/yourname). .desktop Exec lines must use absolute paths; KDE/GNOME launchers will not expand ~ or $HOME.
Refresh the desktop database:
update-desktop-database ~/.local/share/applications/
Quirk I burned half an hour on: if you write the
env LD_AUDIT=... /usr/bin/spotify --ozone-platform=x11 %Udirectly into theExec=line,gio launch(and KDE’s launcher) silently drop the--ozone-platform=x11token while keeping theenv LD_AUDIT=...prefix. The patcher loads, the flag doesn’t reach Spotify, and you end up on Wayland ozone with a transparent buffer that KWin doesn’t blur. Always wrap multi-token Exec lines in a script.
Step 6 — Force aeroglassblur on the Spotify window
The aeroglassblur effect uses its own config group — not [Effect-blur]:
kwriteconfig6 --file kwinrc --group Effect-aeroglassblur --key WindowClasses "spotify"
qdbus org.kde.KWin /KWin reconfigure
WindowClasses is a \n-separated list (each entry exact-match, no regex). It’s matched against the window’s resourceName OR resourceClass. Spotify under XWayland exposes resourceName=spotify (lowercase) and resourceClass=Spotify (capital S), so the lowercase entry alone is enough.
If you previously wrote WindowClasses to [Effect-blur], that does nothing — the stock Blur effect is disabled and its config group is ignored. This is the single biggest pitfall.
To diagnose any window class quickly without installing xprop, load a one-shot KWin script:
cat > /tmp/list-windows.js <<'EOF'
const wins = workspace.windowList();
for (const w of wins) {
print("CLAUDE_WIN", "resourceName=" + w.resourceName,
"resourceClass=" + w.resourceClass,
"caption=" + w.caption);
}
EOF
sid=$(qdbus org.kde.KWin /Scripting org.kde.kwin.Scripting.loadScript /tmp/list-windows.js "winfo")
qdbus org.kde.KWin /Scripting/Script$sid org.kde.kwin.Script.run
grep CLAUDE_WIN ~/.local/share/sddm/wayland-session.log | tail -10
# (path varies by display manager: SDDM → above; GDM → journalctl --user -t kwin_wayland)
Step 7 — Mini-mode via KWin Window Rule
WMPotify implements the WMP11 mini-player by shrinking the main Spotify window below Spotify’s hard-coded minimum size. On Windows the Windhawk “CEF/Spotify Tweaks” mod lifts that minimum; on Linux you do it with a KWin rule:
uuid=$(uuidgen)
cat >> ~/.config/kwinrulesrc <<EOF
[$uuid]
Description=WMPotify Mini Mode
clientmachine=localhost
wmclass=spotify Spotify
wmclasscomplete=true
wmclassmatch=1
windowrole=spotify
windowrolematch=1
minsize=385,60
minsizerule=2
EOF
# update the [General] index
existing=$(kreadconfig6 --file kwinrulesrc --group General --key rules)
kwriteconfig6 --file kwinrulesrc --group General --key rules "${existing},${uuid}"
count=$(kreadconfig6 --file kwinrulesrc --group General --key count)
kwriteconfig6 --file kwinrulesrc --group General --key count $((count+1))
qdbus org.kde.KWin /KWin reconfigure
The key field is minsize=385,60 paired with minsizerule=2 (Force). After this, drag any Spotify window edge inward — WMPotify’s CSS reflows into the WMP11 mini layout when you cross the threshold.
KWin rules only apply to newly mapped windows. Close and relaunch Spotify after writing the rule.
Step 8 — Refresh the CSS map when Spotify updates
Spotify changes its internal CSS class names roughly every release. WMPotify caches a mapping; when it drifts you’ll see a dialog like:
WMPotify failed to initialize due to an error. Missing elements: .Root__globalNav .main-globalNav-historyButtons …
Fix is a one-liner (Spotify must be closed):
spicetify restore backup apply
The backup step refetches the remote CSS map. Re-run spicetify apply if you also changed color.ini.
Extending the Aero blur to every GTK app
The same WindowClasses list that blurs Spotify can blur any window class. The catch: it’s exact match only, split by \n, no regex. So you have to list every class variant.
A reasonable starter set (binary names + Capitalized form + org.gnome.* app-ids) for installed GNOME and popular libadwaita apps:
classes=$(printf '%s\n' \
spotify \
baobab Baobab org.gnome.baobab \
gnome-control-center Gnome-control-center org.gnome.Settings \
gnome-maps Gnome-maps org.gnome.Maps \
gnome-tweaks Gnome-tweaks org.gnome.tweaks org.gnome.Tweaks \
zenity Zenity \
tecla Tecla org.gnome.Tecla \
nautilus Nautilus org.gnome.Nautilus \
evince Evince org.gnome.Evince \
eog Eog org.gnome.eog \
gnome-text-editor org.gnome.TextEditor \
gedit Gedit org.gnome.gedit \
gnome-calculator Gnome-calculator org.gnome.Calculator \
gnome-calendar Gnome-calendar org.gnome.Calendar \
gnome-clocks org.gnome.clocks \
gnome-screenshot Gnome-screenshot \
gnome-system-monitor Gnome-system-monitor org.gnome.SystemMonitor \
gnome-disk-utility Gnome-disk-utility org.gnome.DiskUtility \
gnome-logs org.gnome.Logs \
gnome-weather org.gnome.Weather \
gnome-software org.gnome.Software \
loupe org.gnome.Loupe \
snapshot org.gnome.Snapshot \
totem org.gnome.Totem \
newsflash io.gitlab.news_flash.NewsFlash \
bottles com.usebottles.bottles \
amberol io.bassi.Amberol \
apostrophe org.gnome.gitlab.somas.Apostrophe)
kwriteconfig6 --file kwinrc --group Effect-aeroglassblur --key WindowClasses "$classes"
qdbus org.kde.KWin /KWin reconfigure
For any app not on the list, run the KWin-script window enumerator from the Spotify section to learn its class, then append.
Alternative: blur everything, allow-list the exceptions
If you’d rather have every window blurred and only carve out specific exceptions (start orb, certain KDE dialogs), flip the matching:
kwriteconfig6 --file kwinrc --group Effect-aeroglassblur --key BlurNonMatching true
kwriteconfig6 --file kwinrc --group Effect-aeroglassblur --key NoBlurWindowClasses "plasmashell"
qdbus org.kde.KWin /KWin reconfigure
NoBlurWindowClasses accepts regex (unlike WindowClasses). This is the lazier setup but you may over-blur some KDE app dialogs. I went with the explicit allow-list approach.
Quirks & fixes cheat sheet
| Symptom | Cause | Fix |
|---|---|---|
| WMPotify error dialog: “Some UI elements required by WMPotify are missing” | Spotify CSS class names changed in an update; Spicetify’s cached CSS map is stale | Close Spotify → spicetify restore backup apply |
spicetify apply prints warning Color scheme 'aero' not found; using first scheme |
WMPotify’s color.ini only has [light] and [dark] |
Append [aero] block to ~/.config/spicetify/Themes/WMPotify/color.ini (snippet above), then spicetify apply |
| Spotify window is transparent but no blur appears behind it | WindowClasses written to the wrong config group |
Use [Effect-aeroglassblur], NOT [Effect-blur] (the stock blur is disabled by VTP and its group is ignored) |
WindowClasses=spotify in [Effect-aeroglassblur] but blur still missing |
The aeroglassblur effect cached its config — a qdbus reconfigure only takes effect on new paints |
Toggle aeroglassblurEnabled off → reconfigure → on → reconfigure |
Spotify is launched from the menu, LD_AUDIT loads, but --ozone-platform=x11 is missing from /proc/$pid/cmdline |
gio launch and KDE launchers drop trailing tokens when the Exec= line starts with env VAR=val cmd args … |
Move the launch line into ~/.local/bin/spotify-aero, point the Exec= at that wrapper |
| WMP-style mini-mode won’t shrink past Spotify’s hard minimum | Spotify caps the window’s minimum size internally | KWin Window Rule with minsize=385,60 + minsizerule=2 (Force), matched on wmclass=spotify Spotify exact + windowrole=spotify exact |
| The Vista start orb gets blurred along with everything else | BlurNonMatching=true blurs every window |
Switch to the explicit allow-list (BlurNonMatching=false, list classes in WindowClasses) |
| libadwaita / GNOME apps ignore your GTK theme | libadwaita locks down theming at runtime | cp -r ~/.themes/Windows-7-Better/gtk-4.0 ~/.config/ (note: breaks hot-swap of GTK4 themes) |
| BeautyFox / userChrome doesn’t load after Firefox restart | toolkit.legacyUserProfileCustomizations.stylesheets not enabled |
Set it to true in about:config |
| Spotify under XWayland blurs but decorations look wrong | SMOD’s inner-border atom path is X11-only | Add a per-window decoration override for spotify in VTP / disable SMOD inner borders for that class |
Credits
Every component here is someone else’s work — I just made them play nice on one desktop.
- VistaThemePlasma — fork by aeroshell-desktop, based on WackyIdeas / AeroThemePlasma
- PlymouthVista — aeroshell-desktop/PlymouthVista
- Windows-7-Better (Windows 7 Extended) GTK theme — Gamer95875 on gitgud.io, itself a fork of B00MERANG’s Windows 7 theme
- WMPotify — Ingan121/WMPotify
- BeautyFox (the IE9 Firefox skin) — dominichayesferen/BeautyFox, originally by
angelbruni - libcef-transparency-linux — fixpointer/libcef-transparency-linux
- kwin-effects-forceblur — taj-ny/kwin-effects-forceblur (Plasma 6 fork of the stock blur effect, depended on by VTP)
Windows, Windows Vista, Internet Explorer, Segoe UI, Aero, and the Windows logos are trademarks of Microsoft Corporation. This guide is a personal-desktop transformation; nothing here is for redistribution of Microsoft assets, and the font/wallpaper steps assume you legally own a Vista install media.
If you reproduce this and hit a quirk I didn’t cover, drop a note — I’ll fold it into the cheat-sheet table.