My Debian 12 Experience - Installation, Setup and Opinions

DAJIX - 28 SEP 2023


Debian is one of the most popular Linux distros around today, and it is known for its stability and reliability. In fact, it is the second-oldest active distro!

Its 12th major release, code-named Bookworm, was released earlier this year. I wanted to switch to Debian for a while, because I was getting tired of system breakages and issues. Here is my experience:

Installation

There’s an inside joke in the Linux community that the hardest part of getting Debian is finding the installer. Luckily, Bookworm did improve the experience significantly, as you don’t have to go searching for the ISO with non-free drivers to make it installable on most modern hardware. You can now just search up Debian, go to the website, and press the big Download button on the front page to get the right ISO for 99% of people. It is the Debian classic installer, which many people find convoluted, and do not like. In my opinion, it sure as hell isn’t pretty, but its functional and relatively easy.

After that finishes downloading, just flash it onto a USB stick and boot onto it (there are a million guides online if you don’t know how to do that already).

You should boot into the GRUB menu, where you choose your install method. Both the text based and graphical are pretty much identical processes, so it doesn’t really matter. Do note, you can get some issues with graphical if you have an NVIDIA graphics card as your primacy GPU, so I would recommend the text installer if you use one.

Debian's GRUB menu

After that, just follow along with the instructions.

Debian installing

My main suggestions here are:

Debian Popularity Contest selection menu

Debian desktop selection menu with everything but "standard system utilities" disabled After all that, just reboot, and you will enter your new installation!

Post-install

If you followed all my tips, you will now be in a terminal screen prompting you to log in. Put in the username and password you set in the installation, and you will be in your shell. First step on any new system is to update, so run

sudo apt update
sudo apt upgrade

After that, you need to get your desktop environment. I am personally a GNOME fan, but Debian supports most major desktops and window managers. For desktops, I always recommend getting the core/minimal version of the package. It still includes everything you need for an enthusiasts’ system. (Do note, if you are setting this up for someone who isn’t very technical, get the full Debian recommended version, they are more bloated, but it will make life easier for them).

Since I am installing GNOME, the package for me was gnome-core. Installing that was a simple sudo apt install gnome-core, and then rebooting with systemctl reboot. After that, you are good! You have a full graphical desktop system!

A Completed Debian install with GNOME

Nvidia

The NVIDIA experience on Debian is… not horrific, although it could be better.

When you install it first, you are running the nouveau open source driver (which is to be expected, most distros are like that). While this is usable for simple desktop usage, e.g. document editing and light web browsing, the tearing is intense, and the performance is crap, so I highly recommend installing the proprietary drivers.

To install said proprietary graphics drivers, Debian has a decent guide on their wiki. The process is relatively straight forward, as long as you are comfortable using terminal.

Once installed, everything should “just work:tm:”. Do remember, if you want to game on your system, make sure to also get the 32-bit libraries to ensure Steam and Proton game support, as explained further down the page.

For people with an Optimus laptop like me, Debian is… a distro. If your laptop has a decent battery, or you keep it at home, you can just stay with the default dGPU offload mode (as most distros and OSes do). That means that everything will run through your integrated graphics card unless: it requests your dedicated GPU, you manually launch it with your dGPU (either by setting environment variables, or through a GUI launch option if your DE has one).

If you have to use your laptop outside the house and have a weaker battery, you probably need a way to disable the dedicated graphics temporarily. The classic tools that were often recommended, like Bumble

My favourite tool for GPU switching, supergfxctl, has unfortunately not been packaged for Debian as far as I can tell.

Getting Apps

However you look at it, Debian Stable has old packages. This is not that bad right now since Bookworm is relatively new, but they will continue ageing from here. While that is great for the systems’ stability (and one of the biggest selling points of Debian), it can get annoying for us desktop users. The community has a massive library of options to remedy this issue, and I am going to list what I think are the best solutions.

Flatpaks

Yes, all of you reading who have used Linux before know that this was coming. I understand that not everyone loves Flatpak’s for a whole slew of reasons, but that’s a topic for another post. To be frank, most flatpak complaints are either irrelevant nowadays thanks to updates and fixes, or completely stupid. TheEvilSkeleton (https://theevilskeleton.gitlab.io/2021/02/11/response-to-flatkill-org.html) and Oro (https://orowith2os.gitlab.io/posts/Flatpak-an-insecurity-nightmare/) have both made great posts going into that topic in detail.

Flatpak has an official guide on their site on how to set it up on Debian.

I used Flatpak is my primary method of app installation on Debian, and it mostly worked fine. The only notable issue I ran into was the Firefox flatpak having most web fonts be completely broken. After a bit of research, I found that the solution was to create the file ~/.var/app/org.mozilla.firefox/config/fontconfig/fonts.conf, and put this XML code into it.

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <!-- Disable bitmap fonts. -->
    <selectfont><rejectfont><pattern>
        <patelt name="scalable"><bool>false</bool></patelt>
    </pattern></rejectfont></selectfont>
</fontconfig>

I have tried to trace back to the person who originally discovered this solution, but this reply to the bug report is the oldest I could find.

Nix

Yeah, that’s right, I am following up one controversial package manager with another. Cry about it.

In all seriousness, Nix is perfect for getting up-to-date CLI programs on Debian. While you can also get GUI apps with Nix, they do not properly support OpenGL without hacks (for some reason that is well above me).

You have two main ways to use Nix on Debian, and I will showcase them both here. Do note, I am just going to stick to Nix Packages, as while Flakes are cool, they are another level of complexity, so unless you already use them, I wouldn’t bother for now.

nix-env

This is the most commonly recommended method of installing software through Nix on non-NixOS distros. It is simple and relatively easy, but also is a waste of Nix’s power. Chris Titus made a simple quick-start guide on using it as a package manager.

home-manager

home-manager is a much more powerful tool which uses Nix to its full extent. Essentially, it generates a configuration file (~/.config/home-manager/home.nix by default), where you declare what programs you want to have on your system, and what configurations they should use. You then just run home-manager switch, and it all is installed and configured automatically. This is truly incredible, as you can just copy this file onto a new system, and have your entire command line environment perfectly replicated. I am currently working on my config so that it installs ZSH, the Powerlevel10k theme (with all of my configurations), and a nerd font, which is absolutely insane to me. It makes distrohopping (which I do A LOT) infinitely easier.

I could probably make a whole article talking about Nix and home-manager, but now let’s get back on topic.

Distrobox

This is the other solution I used, which is incredible in of itself. Distrobox is a tool which runs any major distro as a container on top of your host system, and then integrates said container near-seamlessly with your host. This means I am able to have a Bazzite container for gaming, software from the AUR on an Arch container, a couple of PPAs on an Ubuntu container, and even DaVinci Resolve on an RHEL/Alma container, all at full performance without messing with my host system!

Other options

If you are deeply offended by Flatpaks, Nix or the concept of containers for some reason, there are still a few more options, although I did not use them in my time on Debian.

Daily Driving

After all of that setup, you are left with a really nice system. The biggest issue I ran into whilst getting used to the system was the Firefox flatpak issue I mentioned earlier, but it was a pretty easy fix.

I got Steam from Flathub, and the ProtonPlus flatpak to install Proton-GE (a patched version of Proton to improve game compatibility and performance).

After all that, most things just worked!

Closing thoughts

Debian is a great distro for most people, as it is super stable and supports pretty much every program to ever release for Linux. I ended up daily driving it for around 2 months before hopping. Unfortunately, it is not the distro for me long term, as I enjoy using the latest and greatest desktop environments, which you cannot easily get on Debian.