Introduction
A year ago I installed NixOS, while still keeping Windows 11 on a separate disk. Initially I thought I might still need the applications there for daily usage. As time went by I improved my NixOS config, gradually tried out Linux open source alternatives to popular Windows applications, and in the end found myself not opening Windows for months. I wanted to collect here all my learning and experiences from that Windows-Linux transition. This is then by definition a very personal take, as my needs might be different than anyone else’s.
Software
Below are apps that I used on Windows which did not have direct alternatives on Linux, or in my mind were still superior to the alternatives, and what I ultimately did to keep the same functionality.
Microsoft Office
Microsoft Office suite is ubiquitous. I have been using those products forever, mostly at work, where many of the advanced and newest features are used on daily basis. I am familiar with them, know how to use them fluently, know all the shortcuts, etc. I thought it will be difficult to not have them on a NixOS PC.
On Linux there are at least three alternatives:
All of them are available in Nixpkgs repository, so installing is as easy as adding a package to the config.
After some cursory search for differences I decided to try LibreOffice. The UI
looks nice enough and is pretty clear. It works fine, opens, and saves in
Microsoft .docx format for interoperability if necessary. So far I have only
used LibreOffice Writer and LibreOffice Calc, and both of them were perfectly
fine for my needs.
Turns out that my needs are just: create and print something for my kids for school, or write some official letter. So far no need for any advanced features, online Google Docs would have sufficed…
To summarize: 👍️ OK to switch to Linux alternatives.
Adobe Lightroom Classic
I use Adobe Lightroom to edit and develop all photos from my mirror-less full-frame camera. It was another tool that seems indispensable thanks to its features and ease of use.
Initially, I experimented with Wine to have Lightroom installed and emulated, but that did not really work out for me.
There are a few alternatives to Lightroom in the Linux world:
DigiKam is more of digital asset manager rather than an editor, and RawTherapee—raw photo processing system. Darktable is often presented as more complex than Lightroom, with steeper learning curve, but ultimately giving you more control over the process. It is of course available in Nixpkgs, so I installed and tried to switch to it.
My installation coincided with darktable version 5.4 being released with a new tone mapping module—AgX. I read the excellent overview of the Scene-Referred Workflow with AgX by Avid Andrew, and I watched a very detailed lecture on AgX by Boris Hajdukovic. I learned a lot from both of them, starting from color representation and related transformations, to practical workflow in darktable.
After this learning I was able to comfortably edit the RAW images from the camera using the AgX and other related modules. This was enough for my editing needs.
Where darktable lacks compared to Lightroom is masking and noise reduction. Lightroom with its AI-supported tools really does wonders to pictures taken in the dark with high ISO. That is definitely something that I miss, but so far I did not have to switch back even for noisy images—darktable is enough.
Another aspect is in usability—in Lightroom I can copy a set of settings and paste them to another, similar picture, or just save them as develop preset. This works differently in darktable—you can create names styles from a given image history stack and then apply them to selected images. This is not as as straight-forward as in Lightroom, but again, it is not a deal breaker.
Overall: 👍️ OK to switch to Linux alternative.
Adobe Photoshop
I use Adobe Photoshop very occasionally, it is definitely not a mandatory tool for me. The replacement here is obviously GIMP—GNU Image Manipulation Program.
GIMP has been in development for years, and not that long ago released their version 3.0. It had much, much improved in the last 10–12 years since I last tried it out. It is quite fast, supports layer-based image manipulation and all the curves for photo editing. I was able to do everything I needed in GIMP fairly quickly, and I am prepared to follow more tutorials if I ever need to do anything more advanced there.
Overall: 👍️ OK to switch to Linux alternative.
I also have Krita installed, but I have never really used it, and consider it more of painting program than image manipulation / creation.
Adobe Premiere
I have used Adobe Premiere a couple of times to edit an 8-episode series of my trip of a lifetime and some films from my kids’ events and activities. I became pretty familiar with it.
Here, on Linux there are really only two alternatives:
They are both available in Nixpkgs and I have them both installed. I did use Kdenlive for a moment, just to play around with it, but later decided to dive head first into DaVinci Resolve.
DaVinci Resolve is famous for its color correction capabilities, but it is also one-stop solution for professional editing, visual effects and audio postprocessing. Again, I started learning, especially from DaVinci’s free books: The Beginner’s Guide to DaVinci Resolve 20 and The Editor’s Guide to DaVinci Resolve 20. After that I was able to do everything I needed for my projects in DaVinci Resolve.
One thing that I want to mention is stability of the program on NixOS. DaVinci Resolve support on Linux is limited to a set of enterprise Linux versions, but I had virtually no issues on NixOS. No issues with my NVIDIA GPU, no issues with the codecs I used or exporting the material for YouTube. It is however a memory-hungry program, and a few times when doing object tracking, DaVinci used all free RAM out of my 64GB and crashed the system. I have not really seen this behaviour on the latest version I use.
Overall: 👍️ OK to switch to Linux alternative.
ComicRackCE
ComicRack is the legendary Comic Manager, developed by Markus Eisenstöck (cYo) as a free, although not open source application. Unfortunately, it has not been updated in 10 years and the author disappeared from the Internet and the program with him.
There is a project to revive it however, a decompiled version of the original, just to keep it alive:
To this day I have not found anything better to manage comics either in Windows- or Linux-land. It is absolutely the best—I have managed my 50000 comics collection with it and want to use it for as long as I can and need.
Since there is no alternative really, I again attempted to install it using Wine. I had some success—I was able to open it and use normally to browse the collection, edit the metadata or read comics. However when I wanted to fetch metadata for new comics using ComicVine plugin (which is my primary use of the program nowadays) it consistently crashed and I could not find a solution to that problem.
I was really disheartened about this, but then I encountered WinApps—different approach to running Windows apps on Linux. But more on that later.
For now: 👎️ Not OK to switch from Windows.
Bambu-Studio
Bambu-Studio is a slicing software for BambuLab and other 3D printers. I use it with my A1 mini.
It is available in Nixpkgs repository, so I installed it, but it has been not been a smooth experience unfortunately. It was difficult to get it running at first, had to wait for a bunch of fixes. And then when it started, it turns out Wayland support is not there so scaling is not working and everything is very small on my 5k monitor. But worse yet, the preview was not working at all which made the program unusable. Those issues have been around for at least 2 years with no clear resolution for Nixos (Bambu has 5k+ issues in their repo).
As suggested by some of the comments in the above issues I tried out a dockerized version of Bambu-Studio with remote desktop, but it was laggy and not a good overall experience.
Another suggestion was using AppImage version of the program, and that finally worked, including the 3D preview.
So ultimately: 👍️ OK to switch from Windows.
Autodesk Fusion
Autodesk Fusion is a computer-aided design (CAD) design software application. It has a nice version for personal use which was enough for my needs to occasionally model something to 3d print. It is unfortunately not available for Linux.
There is one project that builds on Wine and attempts to make Fusion easily installable on Linux, including NixOS:
I have not been able to run in on NixOS though. There was always something interfering, or not being able to login, etc.
The problem is also that there are really no other alternatives to Fusion on Linux. There is FreeCAD and OpenSCAD but they are no match to Fusion. FreeCAD is supposedly getting better, and perhaps that is the direction any free open source Linux supporter needs to take, and perhaps I should also learn to use it. OpenSCAD is a little different in that it is not and interactive modeller, but rather a script language for programmatic declaration of 3D models. It could also be useful in certain areas like designing custom keyboard cases.
For now: 👎️ Not OK to switch from Windows.
Steam and Games
It is 2026 and Linux gaming is a thing.
Steam is a digital distribution service and storefront, but in practice it is probably the most-used game launcher. It is available on Nixpkgs, and not only as a package to install, but also as an option to install and configure.
Steam is using Proton, which is a compatibility tool for use with the Steam client which allows Windows games to run on Linux via Wine. This tool allows one to play thousands of games on Linux, with varied degree “playability,” but most of them run just fine.
I installed Steam via nixos option, and proceeded to test different games. I installed Fallout 4, copied over my saves from Windows, even installed Bethini Pie to tweak the settings, and started to play. There were no issues whatsoever, the frame rate, without any scientific comparisons, was the same as on Windows—I finished the game on Linux.
I also tried Control, Hogwart’s Legacy, Cyberpunk 2077 and Red Dead Redemption—all run fine, no issues whatsoever—no glitches, no audio scratches, frame-rate again as expected.
For non-Steam games, from GOG or Epic store I used Heroic Games Launcher and I had no issues in the games played through it.
Warning
There are known issues if you want to play competitive games that require kernel-level anti-cheat. That is not supported on Linux as far as I know.
Overall: 👍️ OK to switch from Windows.
WinApps
At some point in my NixOS journey I encountered WinApps
as an alternative for running Windows applications. Instead of using Wine it
runs Windows inside a container (via docker, podman or lib-virt),
and then uses FreeRDP for connecting to it.
Additionally, it scans the Windows container for any installed applications and adds
them to your host Linux system as desktop applications, which makes them appear
alongside all other apps in Linux launcher. This makes for a really seamless
experience.
On Nixos, you have to add them as your flake inputs:
inputs = {
winapps = {
url = "github:winapps-org/winapps";
inputs.nixpkgs.follows = "nixpkgs";
};
};
And then add the packages from those inputs, create a container, create a config file and you are done:
{
config,
flakePath,
lib,
pkgs,
user,
inputs,
...
}:
with lib; let
containerBackend = "docker";
windowsDir = "/mnt/local/C/docker/winapps/data";
cfg = config.services.winapps;
in {
options = {
services.winapps = {
enable = mkEnableOption "WinApps";
};
};
config = mkIf cfg.enable {
nix.settings = {
substituters = ["https://winapps.cachix.org/"];
trusted-public-keys = ["winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g="];
};
environment.systemPackages = with pkgs; [
inputs.winapps.packages.x86_64-linux.winapps
inputs.winapps.packages.x86_64-linux.winapps-launcher
freerdp
];
virtualisation.docker = {
enable = true;
autoPrune.enable = true;
};
virtualisation.oci-containers = {
backend = containerBackend;
containers = {
"WinApps" = {
serviceName = "WinApps";
image = "ghcr.io/dockur/windows:latest";
environment = {
"VERSION" = "11";
"RAM_SIZE" = "16G";
"CPU_CORES" = "4";
"DISK_SIZE" = "64G";
"HOME" = "/home/${user}";
};
environmentFiles = [config.sops.templates."winapps.env".path];
ports = [
"8006:8006"
"3389:3389/tcp"
"3389:3389/udp"
];
extraOptions = [
"--cap-add=NET_ADMIN"
"--cap-add=CAP_NET_RAW"
"--sysctl=net.ipv4.ip_forward=1"
];
volumes = [
"${windowsDir}:/storage"
"/home/${user}:/shared"
"${flakePath}/modules/nixos/winapps/oem:/oem"
];
devices = [
"/dev/kvm"
"/dev/net/tun"
];
autoStart = false;
};
};
};
systemd.tmpfiles.rules = [
"d ${windowsDir} 0755 root root - -"
];
users.users.${user}.extraGroups = [containerBackend];
sops = {
templates = {
"winapps.env".content = "PASSWORD=${config.sops.placeholder."user/anarion/password"}";
"winapps.conf" = {
path = "/home/${user}/.config/winapps/winapps.conf";
content = ''
RDP_USER="${user}"
RDP_PASS="${config.sops.placeholder."user/anarion/password"}"
WAFLAVOR="${containerBackend}"
RDP_SCALE="140"
REMOVABLE_MEDIA="/run/media"
RDP_IP="127.0.0.1"
VM_NAME="RDPWindows"
RDP_FLAGS="/cert:ignore /sound /microphone +home-drive"
PORT_TIMEOUT="5"
RDP_TIMEOUT="30"
APP_SCAN_TIMEOUT="60"
BOOT_TIMEOUT="120"
HIDEF="on"
'';
owner = user;
group = containerBackend;
};
};
};
};
}You can then run Windows from your launcher, expand the FreeRDP session to
full screen and it is as if using Windows natively. There is no mouse lag or
system lag at all, everything does feel like on a normal Windows PC—the system
is perfectly responsive, stable and usable.
I am able to use all the programs I mentioned above as not ready for Linux: ComicRackCE, Autodesk Fusion without any issues.
Granted, there is still Windows needed in this approach, it is not a true Linux experience, but if there are some critical programs that you need to use on Windows, then this is perfectly good approach.
It completes my needs and my table with updated evaluation:
Hardware
Software in only part of Linux story or transition. Hardware needs to be mentioned as well, as the drivers might not be available for it on Linux, the support might be limited, or the devices might work differently or in limited capacity.
Streamdeck
One notable example here is Elgato Stream Deck. It is an external device with a set of programmable display keys, that can serve as additional input depending on context—show keys specifically for the currently running program like Adobe Photoshop or OBS.
Officially it is compatible only with Windows and macOS, but there are at least a few workarounds / alternatives for Linux:
The first one, StreamController, seemed the most recommended by the community and it has a NixOS option, so that is what I chose. This app has an associated Plugin Store, which lets you download some basic plugins like clocks, weather, audio control, etc,. Unfortunately, the Elgato plugins are not compatible with Linux, so the multitude of Plugins and Profiles from this ecosystem are not available.
For my needs though, what StreamController offers is enough.
Overall: 👍️ OK to switch from Windows.
Webcams
I have two webcams that I very occasionally use, and on Windows they of course work, plug and play.
Sony Alpha 7 III
On Windows, when using Imaging Edge Webcam the camera can be used as a webcam in remote control mode. This works very well, giving a high-quality picture (no audio of course).
That software is not available for Linux unfortunately, but there is something else: gPhoto2—a free, redistributable, ready to use set of digital camera software applications for Unix-like systems, which has support for my camera.
Then thanks to some helpful blog posts I was able to create a nix module for myself:
# credit: https://opensource.com/article/22/12/old-camera-webcam-linux
{
lib,
pkgs,
config,
...
}:
with lib; let
cfg = config.modules.webcam;
startWebcam = pkgs.writeShellScriptBin "start-webcam" ''
systemctl restart webcam
'';
in {
options.modules.webcam = {
enable = mkEnableOption "Enable webcam support via gphoto2";
};
config = mkIf cfg.enable {
systemd.services.webcam = {
enable = true;
script = ''
${pkgs.gphoto2}/bin/gphoto2 --stdout --capture-movie |
${pkgs.ffmpeg}/bin/ffmpeg -i - \
-vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video2
'';
# wantedBy = ["multi-user.target"];
};
services.udev.extraRules = ''
ACTION=="add", \
SUBSYSTEM=="usb", \
ATTR{idVendor}=="054c", \
ATTR{idProduct}=="0c34", \
RUN+="${startWebcam}/bin/start-webcam"
'';
};
}When enabled, and when camera is connected to the PC, this module runs gphoto2 in capture mode and then pipes it to ffmpeg which then exposes the stream as Video4Linux loopback device. This unfortunately does not make the camera visible in the browser. I have to first run OBS, configure the camera from Dummy Video Device and then start virtual camera. Only then the camera is detected by the browser and can be used for Google Meet and similar services.
This works quite ok, although since gphoto2 can only access the camera’s “preview” stream and not the full Live View output, and Sony limited the PTP output to 1024×576 resolution, then that is the maximum we get for the webcam. So not quite the Full HD as on Windows, although better than 720p.
Overall: 👍️ enough to switch from Windows.
Logitech Brio
Logitech Brio is a dedicated webcam, no need for fiddling with gphoto2—it just works. Connect via USB and it is detected as a webcam in the system, with full 4K / 30fps resolution and 100Mbps bitrate.
Warning
It has to be connected to a high-bandwidth USB port and via an appropriate high-bandwidth USB cable.
It works with OBS as well, although is a bit fragile: sometimes the camera is detected but is only showing flashing black and white image and no settings work. Need to remove it, reopen and then it starts working.
Overall: 👍️ OK to switch from Windows.
Failure
I also experimented with getting the HDMI output from Sony camera via a cheap HDMI to USB-TypeC video capture device (MACROSILICON). The device was detected,
/dev/video0was created, but no playback was possible and device was always busy.
Summary
As you can see, my experience with switching from Windows to Linux is a positive one. I have not booted Windows for over half a year now.
I was able to find and use the available alternatives for Linux, while sometimes learning new tools / workflows. WinApps has been the last missing link to fully switching to Linux, even though this is sort of a workaround.
Here’s a summary of my assessments:
| Software / Hardware | Assessment | Notes |
|---|---|---|
| Microsoft Office | 👍️ OK | LibreOffice works well for my (arguably basic) needs |
| Adobe Lightroom Classic | 👍️ OK | Darktable with AgX workflow is actually very good, more powerful than Lightroom |
| Adobe Photoshop | 👍️ OK | GIMP 3.0 meets my occasional needs |
| Adobe Premiere | 👍️ OK | DaVinci Resolve is a capable alternative |
| ComicRackCE | 👎️ OK (via WinApps) | Requires WinApps for full functionality |
| Bambu-Studio | 👍️ OK | AppImage version works after initial issues |
| Autodesk Fusion | 👎️ OK (via WinApps) | Requires WinApps, no good Linux alternatives [for me] |
| Steam and Games | 👍️ OK | Proton enables most games to run well |
| Streamdeck | 👍️ OK | StreamController provides basic functionality |
| Webcam: Sony Alpha 7 III | 👍️ OK | gphoto2 + ffmpeg provides 1024×576 resolution |
| Webcam: Logitech Brio | 👍️ OK | Works natively with occasional detection issues |