X1 Carbon Gen 7 + NixOS

I recently purchased a Thinkpad X1 Carbon (Gen 7, with 10th gen processor)1 and installed NixOS on it.

Setting up Linux

I used these instructions2 to install NixOS alongside Windows.

Note the following:

  • Disable Secure Boot in BIOS. NixOS won’t boot otherwise.
  • Use nixos-unstable and choose the latest kernel (linuxPackages_latest)

As usual, refer the Arch wiki for details.

See my configuration.nix for full NixOS config.

What works

  • 4k resolution
    • GNOME selects 200% scaling, which is perfect for the Carbon
  • Audio
  • Microphone (and Yeti microphone)
  • Thunderbolt, with 5k resolution in LG Ultrafine 5k monitor
    • requires 5.9 kernel (linuxPackages_testing on NixOS), or this patch
  • Fingerprint reader
    • Works in both login screen & command-line sudo
  • Suspend
  • Web camera
  • Trackpad
    • Nearly as good as that of a Macbook

Works, but unreliable

  • WiFi periodic interruption, esp. after waking up from suspend
    • Workaround: reboot once.
    • Might need newer firmware/ drivers than what NixOS provides? See here
  • Audio via thunderbolt 3 can be choppy (seems to be fixed in recent updates)
  • Netflix video can be choppy on 5k resolution (4k is fine)

Software issues

I enjoy using GNOME (see GNOME delights).

  • Google Chrome: trackpad gestures don’t work (they do however work on GNOME Web browser)
  • Redshift will not work on Wayland; and GNOME’s night light is broken on 5k tiled display.

Performance

Performance is reasonably good for both home-office and coffee-shop use. The carbon does suffer a bit with some long compilation (eg: GHCJS) tasks, however I can offload that to my workstation at home (via manual ssh or distributed build), and then use its binary cache (see here). Per the pareto principle, the carbon is still a delight to use.

  1. https://twitter.com/sridca/status/1304155221183131648

    ↩︎
  2. Note that you can use the builtin Windows disk manager to resize the partition. No need to install a third party app as this article indicates.

    ↩︎