deniz.in

Markets

Weather

Loading weather

· via Hacker News – Front Page (native)

Nix flake runs Microsoft 365 desktop Office on Linux via GE-Proton without a VM

A Nix project featured on Hacker News drives Microsoft 365's click-to-run installer through umu and GE-Proton on Linux, with a stack of Wine shims getting Word to launch — though sign-in is still unverified.

Nix flake runs Microsoft 365 desktop Office on Linux via GE-Proton without a VM

A project that surfaced on Hacker News' front page offers a way to run Microsoft 365's desktop Office applications on Linux without a virtual machine, using Wine-based machinery borrowed from the Steam gaming ecosystem. The repository, Tombert's office365_flake on GitHub, packages the setup as Nix flakes and scripts that drive the Windows click-to-run Office installer through umu-launcher with GE-Proton — the Wine build that Valve and GloriousEggroll ship for games — with the Bottles project's ProtoSoda core as a second runner.

According to the project's README, nothing from Microsoft is redistributed: the Office Deployment Tool and the Office suite itself are downloaded at install time by the ms365 script, and a Microsoft 365 licence is still required to sign in.

How it works

Running nix run .#ms365 -- install creates a Proton compat-data prefix, applies a small set of winetricks verbs (corefonts, msxml6, riched20, gdiplus), fetches the Office Deployment Tool, and then downloads several gigabytes of Office into a directory under the user's home before running the click-to-run installer inside the prefix. The README warns that the installer window looks frozen for long stretches and should be left alone. Individual apps get their own entry points afterwards, such as nix run .#word, plus wrapper commands and .desktop entries if you install the flake into your Nix profile.

Nearly every part of the pipeline is configurable through environment variables: the runner, the Office product ID (O365ProPlusRetail by default), the update channel, a pinned build number, language, architecture, which bundled apps to exclude, and whether to switch to Shared Computer Activation for business subscriptions. On the display side there are switches between Wine's Wayland driver and X11/Xwayland, and a DPI override.

The recipe builds on prior community work. The README credits a February 2026 report in the Bottles tracker that got Office 365 x64 running on Wine 10.20, the long-standing ruados and eylenburg Office-on-Wine notes (including the Direct2D registry tweak and copying Click-to-Run DLLs next to the Office binaries), and Bottles' September 2026 announcement that Microsoft 365 installs, signs in with two-factor authentication, and runs Word on its Soda 11 Wine core.

A stack of hand-built shims

Click-to-run Office famously fails on stock Wine, and the README documents a long list of targeted fixes, each reportedly found by reading Wine and Click-to-Run logs. Among them: a replacement Software Protection Platform client DLL so the installer gets past error 0-2031 (17002), where Wine's SLInstallLicense is a stub; a forwarding ole32.dll that implements CoRegisterActivationFilter; a loader notification that rewrites import slots for SetFileShortNameW, FindPackagesByPackageFamily and SetThreadpoolTimerEx, which Wine's kernel32 does not export; hiding QueueUserAPC2 from GetProcAddress because this Wine dispatches special user APCs incorrectly; and accepting unimplemented winhttp and wininet option codes that killed sign-in with errors 53u4r and 12009.

Rendering glitches got fixes as well. Ribbon controls appearing as solid grey blocks were traced to GE-Proton 11's Direct2D ignoring the fill mode of geometry groups; the flake ships the d2d1.dll from nixpkgs' Wine 11.16, where the bug was fixed upstream in February 2026, with its builtin signature blanked so Proton loads it. Dialog windows that made the whole app flicker under Wayland compositors were traced to unowned shadow popups that sway tried to tile as separate windows; the shim assigns those popups an owner so they behave as transient windows instead.

Current status

As of 16 September 2026, tested with GE-Proton11-7 and Microsoft 365 Apps build 16.0.20326.20144, the full suite installs and Word starts, draws its start screen and ribbon, and shows a sign-in button — but the project has not verified sign-in or activation, and Word raises a licence-verification dialog on first start because the licensing shim reports no licences installed. Word is also launched with a quiet-mode flag to sidestep a splash-screen crash. Excel, PowerPoint, Outlook and the remaining apps are installed but untested.

For troubleshooting, the tool provides log directories, ms365 exec subcommands for regedit, winecfg and cmd, the ability to rerun single install phases, ms365 kill for wedged processes, and ms365 reset to delete the prefix while keeping the downloaded Office payload.

Why it matters

Desktop Office is one of the last big reasons many technical Linux users keep a Windows VM or dual-boot partition around. A reproducible, scriptable setup that gets the genuine click-to-run suite installing under Linux — without virtualization and without redistributing Microsoft's binaries — shows how the gaming world's Wine investment (umu as a general-purpose runner, GE-Proton's bleeding-edge builds) can be repurposed for productivity software, something Bottles' own Soda core is also pursuing.

The caveats are real: without verified sign-in this is not yet a daily-driver setup, and Office's update channels could break the pinned workarounds at any time. But the techniques on display — import-slot rewriting, WinRT interface shims, DLL forwarding, targeted native overrides — form a reusable playbook for other stubborn Windows applications, and the project documents them in enough detail for others to extend.

  • #wine
  • #linux
  • #nix
  • #microsoft-365
  • #proton