OS Hopping with the Dell XPS 7590

apple - penguin - window

the beginning: macOS

After 6 years with my trusty 2014 MacBook Pro, I finally decided to make the jump and upgrade my laptop. I wanted something with a little larger screen realestate, more RAM and a more powerful CPU. My Mac has a 13 inch screen, and as I got more used to my oversized monitors I use at work, developing projects at home on such a little screen became less appealing. Additionally, while there is nothing inadvertently slow about the computer, after a few years of updates, and with working on more intensive machine learning projects, it just doesn’t have as much zip or memory as I would like.

My first instinct was to start looking at the 2020 MacBook Pro 16-inch laptops. These machines really are beautiful. macOS is so user friendly, and installing and working with different software is a breeze. Simultaneously the aesthetics of Mac products, despite being almost annoyingly unchanging, hold a special place in my heart. But, for me the biggest downside is the massive price tag on the new MacBooks. I know they are luxury products, but I just had a hard time justifying spending nearly three grand on a new laptop when my current one worked.

So weighing my options of letting my kids starve for a month, or not getting a Mac, I decided to take a look at the Dell XPS. These computers have been making quite a buzz for a while now as a solid workhorse for both development and everyday computing needs. For me one of the biggest draws was specs that matched those of the MacBooks, while managing to be significantly cheaper. At the same times the time the biggest con was losing macOS.

the middle: Windows

Up until this point I had primarily been a macOS user. I grew up using Macintosh, and had one all through college. It was the OS I first learned to program on, and I really enjoyed the tooling available and the terminal experience. However, I use Windows as my daily driver at work, and so had become a little more comfortable with it. At the same time the new Windows Subsystem for Linux (WSL2) seemed like an amazing option for using Windows, while still being able to have a Unix style terminal, with all of the tools I had grown to love.

So I went for it and purchased the Dell XPS 7590 15, with a Intel i7, a GeForce GTX 1650, 1 TB SSD hard drive and a 4K OLED display. With deal from Costco, I was able to get it for 1,800, which seemed like a no brainer for those specs. This computer is a powerhouse, the display is amazing, the keyboard is smooth, and the overall look is quite sleek. The trackpad is OK, not as responsive as my Mac, but nothing that would turn me off from the laptop.

Right away I got started using Ubuntu through WSL2 and the new Windows terminal.

The Windows Subsystem for Linux lets developers run a GNU/Linux environment – including most command-line tools, utilities, and applications – directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup.
https://docs.microsoft.com/en-us/windows/wsl/about

I used this setup for a while, and it was really great. It allowed me to stay in the Unix world I had become used to with my Mac, and then still use the Dell with Windows. My biggest complaints were you don’t have a true /home directory, and then GUI app development. I have been doing a lot of experimentation creating GUI apps recently, and coding a GUI app in OpenGL for instance in WSL2 just got to be a little wonky. It is my understanding that Microsoft is doing more work around running native Linux applications on Windows through WSL, but it just isn’t there yet. Finally while the aesthetic of Windows 10 is ok, I am a huge sucker for visual appeal, and I still missed the desktop look Mac offered.

All of these gripes are relatively minor and for the most part had valid non-hack workarounds. But I have a problem with not being happy, and the thought of using Linux as my full desktop was still nagging at the back of my mind.

the end: Linux

Prior to purchasing the XPS, I had toyed around with a number of Linux distributions on an old iMac that I had. The ones that stood out to me were Manjaro KDE and Elementry OS. I tried Ubuntu GNOME for a while as well, but I wanted to keep exploring other distros for fun. Because of this, I had a little better idea of what flavors of linux I wanted to try with my new laptop.

Let me just say, I am most definitely a Linux beginner. I have been picking stuff up as I go, and am really enamored by the Linux project, but I still have a lot to learn and nothing I say here should be taken as gospel. With that said, I knew what I wanted in a distribution, and had read around enough that I had a sense of what to look for when testing what would run best on the Dell XPS.

So I decided to dual boot. There are a number of pros and cons, but for me I wanted to keep Windows installed partially as a fallback, and then also I could use it to test things on Windows if I wanted to. There are plenty of great tutorial articles out there for dual booting with Windows, specifically for the Dell XPS, so I will not go over to much detail here, but will share some links that I found helpful, this one from snej.de and this other one from itsfoss. I would pay special attention to the steps the itsfoss article lays out for partitioning the hard drive for your new Linux distro. If you decide to go with a Ubuntu based distro, this repo from TillmanBerg has some great tips for getting everything running smoothly with Linux, I also found some tips in this fork from MuDiAhmed useful. Finally for creating bootable USB drives, this balenaEtcher application is amazing.

The first concern was a distribution/desktop environment that had good support for HiDPI displays. The DELL XPS OLED screen is 4K, and has much higher pixel density than most other laptop’s lower resolution screens. Because many linux desktop environments are designed to expect a lower number of pixels per inch, when I would test them out on the XPS everything would be microscopically small. From what I have read, and experimented with, the KDE and GNOME desktops seem to have the best HiDPI support out of the box. The other minor issue that plagued most distros I tried, was working screen brightness controls. This was something I didn’t anticipate being a huge problem, but there seems to be no good solution for getting the brightness controls to work on the Dell XPS with out some really hacky workarounds (please let me know if you know of a fix that works for you).

I first started off with Linux Mint 20 Cinnamon. Cinnamon boasts HiDPI support, and that most things should just work with your PC’s hardware without too much fine tuning. I think it was probably partially my inexperience, and maybe just the XPS, but I had a really hard time getting everything to scale the way I wanted it.

After tinkering with Mint for a while, I decided to test out another distro, and moved on to kubuntu. From a looks, and themeing standpoint, KDE is my favorite desktop that I have tried out. In particular, this video shows some of the amazing potential the KDE desktop has for customization.

Sadly the HiDPI options in KDE were ok, but I still had some problems. Most prevalent was horizontal lines in windows with transparency applied. The annoying thing is, the most common “solution” for HiDPI problems like this is “just change your resolution to 1920×1200”. What this means is that you end up with a slightly blurry screen. It seemed silly to me to buy a laptop with a 4K screen, if you can’t use it.

So I continued searching, and everything that I read pointed to GNOME as having the best HiDPI support out of the box. So I decided to try out vanilla Ubuntu which uses GNOME by default. This version of Ubuntu probably has the greatest amount of support and because it is one of the more widely used versions, there are a lot of online helps. The first thing I noticed when I booted up off of the USB stick, is that the desktop automatically detected the HiDPI display, and everything scaled correctly the first time I logged in. Sadly some things like screen brightness, and power consumption still needed some tweaking, but nothing that was a deal breaker. After coming off of the beautiful KDE desktop, I was a slightly underwhelmed at the customization options available for GNOME. The GNOME-Tweak tool offers a decent amount of customization and themes, but I didn’t think it was as easy to use and did not offer as many options as the KDE desktop. In the end though I was able to get everything to look pretty much how I wanted and install all the tools I needed for my development work.

Ubuntu GNOME

the new end: Pop!_OS

After using Ubuntu GNOME for about a month I was really enjoying it, and felt like I had replaced the Mac sized hole in my heart I had while using Windows.

One day I decided to hop onto my Windows partition to push some projects I had been working on to github. Very foolishly, I saw that there were available Windows updates, and let them install, then disaster! After the updates I logged off of Windows and tried to log back into the Linux partition, but I couldn’t get it to boot up. I kept getting weird errors about missing files, and issues with the hard drive. After researching and looking around in the BIOS menu, I realized that some how during the update, Windows had switched my hard drive SATA settings from AHCI back to RAID (this is a setting you change when setting up your computer for dual boot with Linux). After going through the process of switching the SATA settings back to AHCI, I wasn’t able to boot into the Windows partition. Every time I would boot up, the Widows startup manager would ask me to reset my computer to factory settings. I went back and forth with these issues for a while and then in a moment of desperation, just wiped the Windows partition. In hindsight I think I was probably too rash, and it would have been beneficial to figure out how to keep the Windows partition. But, if I really need Windows I can always reinstall it to a new partition, or look into other options for running Windows applications such as Wine. Now I was left with a couple hundred gigs of free space on my hard drive. So I decided to install another Linux distribution that I had heard a lot about and was interested in trying, Pop!_OS.

For those who don’t know Pop!_OS is a derivative of Ubuntu GNOME, created by the folks at System76. It is primarily designed to be used as the OS for the laptops they sell, but you can download the distro to install on your own machine as well. The most amazing thing about Pop!_OS is that EVERYTHING just works. The HiDPI display is instantly detected, the screen brightness works, wifi works, the power settings are preconfigured for better battery life, and they even make switching between the Nvidia GPU and the integrated graphics card as easy as clicking a button. So while it is technically still Ubuntu GNOME, all of the additional tweaks makes it out of the box the cleanest and most hassle free distro I have used. Additionally it provides a lot of great features such as a well developed set of keyboard short-cuts for efficient desktop management, a useful window tiling feature, and a vast software library integrated into the desktop through the Pop!_shop application.

Pop!_OS

While some people consider a bare bones Linux distribution, where you are forced to configure every detail of your desktop, a right of passage, I have enjoyed Pop!_OS as a fabulous starting point, and a great way to help me transition away from macOS to Linux.