Moving to Greener Pastures: Debian to NixOS
skaj-os is currently private due to API keys but will be open-sourced soon!
First and foremost, I should say that I absolutely adore Debian -- it's the Linux distribution that I'm most comfortable with, especially given its package release model. Having a guarantee of package stability is something that should not be taken for granted, considering I've dabbled with Arch and absolutely despise their release model. As much as I love software engineering, I don't want to debug most of my OS core packages. Reading the Arch Wiki every time I want to update a package is tedious and annoying, and having to deal with the fear of totally botching your system every time you update is frustrating. You could boil this down to "skill issue", but I'd prefer to not be constantly working on fixing some bullshit bug because the packages are pretty much untested.
Now, it's kind of ironic that I make these statements since I decided a few weeks
ago to try getting Hyprland,
a bleeding-edge desktop environment, to work on Debian 12 Bookworm. Frankly, the
results have been incredibly good, with a majority of packages/applications
running exactly as expected. Electron-based apps need to have Ozone platform flags
enabled in their .desktop
files, which achieves proper rendering without blurriness.
So why am I switching?
Updating any Hyprland package requires me to build everything from source, which
is honestly worse than Arch's update UX. Ensuring that the Hyprland dependencies
are up-to-date is very difficult on Debian, since most Hyprland deps are bleeding-edge
AUR packages not yet published to apt
. Even trixie
and experimental
package
sources may not have the correct version, which is the main reason I'm switching
to NixOS. I'd like to have Debian-like stability with the ability to lean into the
bleeding-edge without having to compile most dependencies/packages from source.
I'm not someone who writes a ton of C++ for either my dayjob or as a hobby since I absolutely hate the language (a topic for another day perhaps), and if I wanted to spend time debugging system packages, I would write them from scratch using Zig or Rust (probably Zig though).
To handle the switch, I've started working a project I've decided to call skaj-os
,
which is a repository of shell scripts that install my desired environment.
Originally, I thought that this article was going to be titled "Debian to OpenSUSE",
so I had created skaj-os
to be OpenSUSE-compatible, but that horribly failed due
to incompatibility with my system (or something like that, NVIDIA drivers failed
to install properly even though documentation was followed). Rather than struggle
with OpenSUSE, I figured NixOS was worth a shot.
And it definitely was.
Some of the documentation for NixOS has been lacking, wrong, or incomplete, but overall, it's been a joy to edit a total of 2 configuration files:
/etc/nixos/configuration.nix
~/.config/home-manager/home.nix
I've managed to get all of my core applications installed and working, including
fixing linkages for fnm
and node
using nix-ld
. This is a huge win, and honestly
reduces the need for skaj-os
in the first place.
I'm genuinely so pleased with this setup, it's absolutely beautiful and I love the fact that I can develop and play games on the same machine again. I don't have to struggle with WSL nor do I have to wonder if my games can run on a Mac Studio. Here are my specs:
▗▄ ▗▄ ▄▖ jackson@nixos
▄▄🬸█▄▄▄🬸█▛ ▃ -------------
▟▛ ▜▃▟🬕 OS: NixOS 23.11.3409.d7f206b723e4 (Tapir) x86_64
🬋🬋🬫█ █🬛🬋🬋 Host: MS-7B46 (2.0)
🬷▛🮃▙ ▟▛ Kernel: 6.1.74
🮃 ▟█🬴▀▀▀█🬴▀▀ Uptime: 2 hours, 28 mins
▝▀ ▀▘ ▀▘ Packages: 1880 (nix-system), 784 (nix-user), 8 (flatpak)
Shell: zsh 5.9
Display (Dell S2417DG): 2560x1440 @ 144Hz
WM: Hyprland (Wayland)
Cursor: WhiteSur (12px)
Terminal: tmux 3.3a
CPU: Intel(R) Core(TM) i7-8700K (12) @ 4.70 GHz
GPU: NVIDIA GeForce RTX 3070 Lite Hash Rate
Memory: 19.66 GiB / 31.30 GiB (63%)
Swap: Disabled
Disk (/): 123.30 GiB / 915.32 GiB (13%) - ext4
Local IP (eno1): 192.168.4.25/22 *
Locale: en_US.UTF-8>)
I've gotten a lot of core features entirely working, which makes me super stoked. It's been awhile since I've had this much fun customizing a system, it reminds me of my days with an HTC One M7 and xda-developers.
I hope if you're considering a Linux desktop install that you give NixOS some thought, it's been a pleasure to work with stability + customizability.
Thanks for reading!
-- Jackson