Lenovo X1 Carbon Gen 1
I've owned this laptop since 2012. I've been very happy with it, and I think it's worth breaking down what I enjoy about it, and what I don't. I also want to share how the mindset I had when buying it - purchase for your needs now, not for things you want to do in the future - was spot-on and honestly not as extreme as it should have been.
I'm going to start breaking it down by feature first. This is the third thinkpad I've owned - my 2001 Thinkpad T-20, which I bought used in 2005 and was my main machine until 2009, set the standard for the years to come.
The most important part of the computer because it's how you connect to it, having a good-quality keyboard is not optional when computer shopping. It's still a low-profile scissor-action lenovo keyboard which feels pretty good, but the keys now have this upside-down bread-loaf shape, which is much less satisfying than the thinkpad keyboards of the past. However, it still feels great, probably nearly as good as the new butterfly keyboard on the latest Apple laptops.
Notably, it was not trivial to map the caps-lock key to operate as a control key. This is a fairly common thing for programmers to do - right above the shift key is too valuable a real-estate to leave to caps-lock. I'm not sure why it was more difficult than usual to remap this key, but I have the following command in my X11 startup script which manages to do so:
xmodmap -e 'keycode 66 = Control_L' -e 'clear Lock' -e 'add control = Control_L'
This laptop does not come with Dvorak keycaps as an option, and the indentations for the trackpoint means you couldn't move the caps anyway; though since nobody else would ever use this laptop this does not bother me.
This keyboard has a Fn key at the bottom left, where the control key would normally extend. This didn't bother me because I remap caps-lock, but I can understand it will bother people. I don't install the thinkpad extensions under linux so I've no idea if any of those function keys do anything.
One last thing about the keyboard - this one doesn't have a Break key. I'm extremely interested in secure operating systems, and this practice of not having a physical Break key bothers me a little. Nevertheless, it as other keys that could be mapped in its place, such as PrtSc.
As someone who spends more than two hours a day on public transport, 14" is the most useful size for a laptop. The X1 is extremely thin and light, which is effortlessly convenient. When I first considered the 16:9 ratio I found it silly - are people watching movies on their laptop? Why would you ever want a widescreen? However, it actually makes it a more convienient size. It's more like an A4 book than a big awkward tile. It has a 1600x900 natural resolution which looks fine.
Trackpad / Trackpoint
The trackpad is way too big, and will completely get on your nerves. You'll be typing and then accidentally select text and delete it, or accidentally click out of a game, or accidentally... who knows. However, it's not too difficult to disable the stupid thing:
xinput disable 11
The trackpoint is wonderful for a keyboard user - you don't have to take your hand far from the home row to move the cursor. Honestly, everything else being equal, this is what keeps me coming back to thinkpads.
Unfortunately, the laptop comes with an in-built camera. However, it is easy to cover it with a small segment of post-it note or with a piece of paper and sticky tape.
The default SSD is 128 GiB in size, which may be small by most measures, but looking at my own usage patterns I'm not sure that's true. I divided it in two, leaving a 64 GiB partition with the standard Windows 8 install, and left a few GiB for swap. In the 59 GiB I have left, I built a 20 GiB windows VM. In the remaining space, I once ran out of room! However it turned out to be WebGL hammering the system log. I've never wanted more space.
That said, I did all my professional work on a chroot on a USB stick. Work's development environment was based on Ubuntu LTS. I would use Xephyr to run programs like IntelliJ Idea, which does not work well with a non-reparenting window manager, and even added a flag to prevent programs running within from grabbing my stinking keyboard focus.
This computer has 4 GiB of RAM which by the time I bought it was no longer enough to translate pypy with itself, let alone run my analysis tools on the live graphs. I decided with this purchase that I would not optimise for running large jobs on this laptop. Why not rent a server from AWS or GCP? I could get a machine with 120+ GiB of RAM for an hour for about AU$2. It turned out that the number of times I needed more than that 4 GiB in the time since, I can count on one hand.
The important thing is that the battery would last easily 6 hours, which was effectively unheard of in 2012. The performance frankly wasn't important.
That said, I did emulate Windows from time to time, using it to run SQL Server databases and a Java Swing client under test, and it held up perfectly.
It has a USB 3 port, a powered USB port, and Mini DisplayPort out. The laptop itself isn't wide enough for Ethernet, though it does have a 4G feature. I bought an external DVD drive, "just in case".
I very much considered going for an alternate architecture - I had a handful of uses for x86-64, but would have enjoyed going for ARM or something more exotic. In the end, it didn't make much of a difference, though the Windows VM thing was handy in the early days.
Setting Up For Development
I like a low-clutter but flexible environment to work in.
Debian Stable is a great base to build from. It has whatever tools you need, and I feel very experienced at wrangling it to my needs. I also use GNU Guix or Nix to install packages for my use or for development, which better handles different versions - especially different C library versions.
GNU Emacs. If you've never used an editor where the user experience is based around search and interactivity, I really pity you. Til this day, nothing has ever come close to the fantastic usability of Emacs. Especially if you have the essential ido-mode.
StumpWM is the window manager of choice - it's clearly written by someone who thinks usability and flexibility is important. The prefix key for window management commands is C-t, which on a Dvorak layout is on the home row, and doesn't shadow anything meaningful. There's also the fact that you can connect to the running process and control it from the command line or SLIME under emacs.
Initially I also needed CLISP as SBCL had a bug that made StumpWM boot so extremely slowly, but that was fixed by the first Debian upgrade.
Conkeror is pretty close to the ideal browser. It organises open pages into buffers rather than tabs, which means it's easy to switch between them by searching. All navigation and editing can be done by searching. It's a bit tricky to figure out what firefox version you need to be running to keep conkeror working, but it's well worth it.
Schroot, which is a fantastic way to get environments from different systems running.
I also install Xephyr, for when applications don't want to work under StumpWM. I have added a flag to it to prevent applications within from grabbing the X input, which is such an ugly security-violating feature baked right into the X protocol.
HATE is a simple terminal emulator. It has no menus, which means you don't have to go to the effort of figuring out how to prevent the Alt key from being swallowed. How people use BASH without a working Alt key I have no idea.
Since AWS exists, don't buy specs that you don't need on a regular basis. Since laptops make terrible gaming machines, buy a much cheaper desktop that you can optimise for that purpose. If you want a laptop for programming, optimise for ergonomics.