About a year ago my Framework laptop arrived. Finally, after fretting constantly about finding hardware that I would feel good about supporting, here it was: first-class Linux support, best-in-class maintainability, and a company that seemed pretty concerned about sustainability. Is it the year of the Linux Desktop? Am I hallucinating? Is there a gas leak in my house?
Let me get ahead of some inevitable critiques: yes, an Apple machine with an M1 is probably technologically superior particularly in terms of power and portability. Perhaps even more glaring is the fact that, as a newcomer to the space, buying a Framework is going to offer much less of a guarantee about stability and/or future support. Buying this laptop is for early adopters, and I’m okay with the concessions I’m making! I know that I could buy something more refined, but this is what I wanted, and I accept the caveats.
At the same time that I moved my hardware from the Paleolithic Thinkpad X220 – yes, I was using a laptop from 2011 as my daily driver for a while – I also decided to take the dive and migrate my OS from Arch Linux to NixOS. I know, right? I’m a glutton for punishment.
Here, then, is my paired review of using the Framework laptop for a year with NixOS as a Framework newbie and NixOS newbie. Two blog posts for the price of one!
Framework: Just the Hardware
The Framework is… a pretty good laptop! Frankly, for the first model from a brand new company, Framework did an astounding job of feeling like your everyday consumer electronics seller. Pre-ordering opened up quick, shipped soon thereafter, and there weren’t any hiccups.
Details
You might’ve seen elsewhere that Framework detected potential problems with the trackpad hardware. My experience was receiving a bit of material to secure the trackpad ribbon and a link to instructions that took five minutes to perform. An (unsurprisingly, for Framework?) easy operation.
Compared to my then-employer’s modern-day Thinkpad (not my X220), the aluminum body feels a lot better than any type of plastic, and the trackpad is better than I expected it would be.
I push my laptop harder than the average citizen by virtue of strenuous computing activity like software compilation regularly, but it definitely highlights the fact that my laptop gets hot. I wish it didn’t get this hot. I certainly couldn’t rest the laptop on my bare legs while pushing the CPU, and I’m intimately familiar with the sound of the laptop’s fan. I suspect that I may have tripped the temperature poweroff once or twice, because it has gotten that hot in the past.
Battery life is… okay. Absolutely behind your average Macbook, and I’ve spent some time investigating my power draw. I would, however, put it in the ballpark of some of my other Linux laptops, which makes me think that it isn’t significantly below the average. With all of my regular windows open - a browser, alacritty, emacs, some messaging apps - polybar reports 9.24W power draw. Here’s some other miscellaneous stats:
▗▄▄▄ ▗▄▄▄▄ ▄▄▄▖ tylerjl@diesel
▜███▙ ▜███▙ ▟███▛ --------------
▜███▙ ▜███▙▟███▛ OS: NixOS 22.05 (Quokka) x86_64
▜███▙ ▜██████▛ Host: Framework FRANBMCP08
▟█████████████████▙ ▜████▛ ▟▙ Kernel: 5.18.19
▟███████████████████▙ ▜███▙ ▟██▙ Uptime: 2 hours, 37 mins
▄▄▄▄▖ ▜███▙ ▟███▛ Packages: 800 (nix-system), 2622 (nix-user)
▟███▛ ▜██▛ ▟███▛ Shell: bash 5.1.16
▟███▛ ▜▛ ▟███▛ Resolution: 2256x1504
▟███████████▛ ▟██████████▙ DE: none+i3
▜██████████▛ ▟███████████▛ WM: i3
▟███▛ ▟▙ ▟███▛ Theme: Nordic-darker [GTK2/3]
▟███▛ ▟██▙ ▟███▛ Icons: Adwaita [GTK2/3]
▟███▛ ▜███▙ ▝▀▀▀▀ Terminal: tmux
▜██▛ ▜███▙ ▜██████████████████▛ CPU: 11th Gen Intel i7-1185G7 (8) @ 4.800GHz
▜▛ ▟████▙ ▜████████████████▛ GPU: Intel TigerLake-LP GT2 [Iris Xe Graphics]
▟██████▙ ▜███▙ Memory: 25552MiB / 31898MiB
▟███▛▜███▙ ▜███▙
▟███▛ ▜███▙ ▜███▙
▝▀▀▀ ▀▀▀▀▘ ▀▀▀▘
I sure wish Framework provided fwupd support!
I have yet to update my BIOS because I’d prefer to use fwupd
rather than create a mess with my bootloader.
That said, I haven’t experienced anything profoundly negative with my old-ish BIOS and am content to wait… for now.
I am very bummed out that deep sleep still isn’t supported.
Unfortunately Framework is at the mercy of Intel here, so aside from exerting market pressure, Linux users on this chipset may be out of luck for an indeterminate amount of time.
I work around this with a variety of either s2idle
or hibernation shenanigans.
Not ideal - but an even more glaring problem is (rarely) that my OS either a) doesn’t wake up or b) can’t recognize the trackpad after waking. It can be annoying!
I am delighted at how well the expansion cards work, particularly for being new and novel features. I bought a few more than the laptop has slots for when I have varying port needs and it all… just works! Easy to swap in and out, and for a variety of purposes ranging from driving two external displays to a power supply.
You might’ve seen that the upgrade kit includes a new cover with a more rigid aluminum CNC. I seem to recall that it did feel a little more limber than my previous laptop when I first got my Framework, but it really doesn’t bother me (if I notice it at all any more).
The kill switches for both the camera (which is good quality) and the microphone (which is acceptable) work as expected. Whether I’m on Zoom, Slack, Jitsi, or Discord, I can toggle them without any worry that my hardware will go awry and behave in unexpected ways - so I toggle them as necessary.
Summary
I think I’d offer a moderate endorsement of the current Framework. You’d probably be hard-pressed to find a company that offers the idealogical principals they do paired with the hardware quality of a Framework, but you’ll be somewhere between “early adopter” and “mainstream hardware” in terms of stability and bugs. I’m looking forward to buying the RJ45 ethernet module and probably a new mainboard down the road, but in particular, the heat dissipation, lack of ARM or AMD options, and Linux quirks are paper cuts - but overall I’m satisfied.
NixOS for the non-expert
Full disclosure: I’ll probably write more nix content in the near future because I have lots of general thoughts about the ecosystem, but the Internet is already kind of on cooldown for nix content at the moment. Instead I’ll focus on what it’s been like to jump ship from Arch Linux to NixOS and the experience doing so on the Framework.
Details
Graham blazed this particular trail so I had a cheat sheet. Happily, you don’t even need a custom kernel any more, all of the hardware just works. As a bonus the nixos-hardware repository has Framework settings so you can even get a jump start on optimizing your configuration for the Framework specifically.
The fingerprint reader just works, too! It’s very nice to have those out-of-the-box compatibility surprises on Linux. I “enrolled” all my fingers and anything that hooks into PAM works (sudo
, polkit, and so on). I’ve only accidentally pressed it too hard once and inadvertently turned off the laptop.
I don’t know that there’s a whole lot to report about the intersection of Framework hardware and NixOS that is specific to the distribution. The module hotplugging works, trackpad works, all peripherals work. I’m running my system root on an encrypted ZFS volume (native encryption, not LUKS) and have no complaints. Once or twice I’ve had to delay a system update because nixpkgs helpfully reports an incompatibility with the latest kernel and ZFS modules, so I wait a week or two then upgrade.
What about NixOS itself? Years ago I tried to convert to NixOS but failed and have lived primarily in Arch Linux ever since. However, I’ve always been drawn to the rigor of the design of NixOS, nix, and nixpkgs, so I decided to go all-in when migrating my laptop to a Framework. I am probably not the median Linux user, having maintained a handful of AUR packages for many years and wielding the experience of a few decades’ of Linux use, so I embarked on the experiment with a sharpened skillset.
I won’t belabor the typical nix feedback: docs need some polish, the CLI ergonomics are in a state of jagged flux, and some simple operations (“use this package version, not the latest”) still aren’t easy.
But I’m convinced! I’ve joined the proud ranks of zealous nix users ready and prepared to defend our honored distribution. Is it for everyone? No. Is it perfect? No. But I am happy to make the tradeoffs that NixOS chooses to make, and I am a productive user that hasn’t had to make many concessions for the benefits.
Here are the most significant items of note:
- Use flakes. Use flakes. Use flakes. I know they’re experimental, but I’m not going back. My OS revision is much easier to reason about. It’s visibly pinned in my
flake.lock
file and I even have a small script that lets me preview system updates (to see what packages are pending and what version). Flakes make tracking my system in git easy, and overlays/user packages are very easy to use. - ZFS paired with NixOS - and putting all of my important data in syncthing - has made me essentially fearless on the system. System updates place prior system configurations in the bootloader and ZFS is another line of defense against mistakes.
- I also made the leap from homeshick to home-manager at the same time. home-manager is pretty good! If you’re stuck in the past like me and using i3, emacs, and other venerable programs, home-manager ties them all together beautifully.
- Surprisingly, NixOS tends to be more up-to-date than many of the packages I rely on in Arch Linux. The package that highlighted this for me was
consul-template
, but it’s occurred more than once now. While you might think this makes NixOS less stable than even Arch, the ease of rolling back mitigates this - not that each upgrade breaks my system (upgrades have been pretty stable). -
Nix (the language) is challenging but not impossible. I’m currently running with ~19 custom-written nix packages of my own. For example, I run
wesher
in my homelab and here’s the package (I should probably PR this to nixpkgs):{ lib, buildGoModule, fetchFromGitHub }: buildGoModule rec { pname = "wesher"; version = "0.2.6"; src = fetchFromGitHub { owner = "costela"; repo = pname; rev = "v${version}"; sha256 = "sha256-EIajvcBhS5G9dJzRgXhnD1QKOAhmzngdyCU4L7itT8U="; }; vendorSha256 = "sha256-BZzhBC4C0OoAxUEDROkggCQF35C9Z4+0/Jk0ZD8Hz1s="; ldflags = [ "-X main.version=${version}" ]; meta = with lib; { description = "Wireguard overlay mesh network manager"; homepage = "https://github.com/costela/wesher"; license = licenses.gpl3; }; }
Summary
As mentioned, I’ll have more to say in a different blog post, but the mental effort to overcome NixOS and its unique take on software has been worth it. I like pinpointed revisions, the extensive package catalog, and the portability (I’m re-using my common config between some different hosts). With flakes becoming more ubiquitous, it looks like the ecosystem will continue to improve.
Conclusion
…and that’s about it. I’ll probably have more to say in the future but those are the important parts.
If you want more details about anything I’ve written about here (or other general questions), commenting here on my blog via the embedded Discourse is probably the most direct way, although I’m active on other places like Hacker News/Reddit as well.