Magically style your desktop with Stylix

Stylix is a stunning Nix Flake that automatically styles your desktop.
A hand drawn woodmark spelling "Stylix" with a brush in place of the "l".
A hand drawn woodmark spelling "Stylix" with a brush in place of the "l".
4 minutes read

#Configuration hellscape

What’s a better way to waste your own time than to customize your desktop? Heck, there are entire communities like Unixporn based around this hobby. I have spent countless months on this myself, as far back as my first post about custom setups. It can be really fun at first, but it can quickly become tiring. The hardest part for me has always been configuring color schemes, because manually doing so was too much manual effort.

In the configuration from the aforementioned post, I used Arch, which is famous for its customizability. There, I settled on using Pywal, which is a handy CLI tool that generates a color scheme from my wallpaper and could output it in various file formats. Note: Pywal has been archived, but pywal16 looks like a good successor.

A screenshot of my Arch setup, where the color scheme is generated using Pywal and my wallpaper.
A screenshot of my Arch setup, where the color scheme is generated using Pywal and my wallpaper.

There are other tools like Tinted Theming (previously base16) and Catppuccin that do the same, but with a fixed set of color schemes. Nonetheless, this was still too much work for me, because it involved the manual step of finding out where to put the generated files for each application I was using.

#Nix

Nowadays, I’m not using Arch anymore. Instead, I’m using another Linux-based operating system called NixOS. It is just as customizable as Arch, but it uses a different package manager and configuration system called Nix.

Nix is made unique by the way it lets you write a single configuration file and use it anywhere you want! Gone are the days of crawling through the settings on every new device you set up. Since the configuration is also text-based, it’s often uploaded to platforms like GitHub where it can be shared with others, e.g. in the form of so-called Flakes.

#Stylix

Bluntly put, Stylix is just a Flake like every other Flake before it. But it can be so much more, because it takes the core selling point of Nix and elevates it to another level! Similarly to Nix, Stylix takes your preferences and applies them anywhere you want. But Stylix does so with your styling preferences and to a variety of applications.

And in contrast to the other tools I mentioned, Stylix isn’t just limited to just color schemes: It can also do wallpapers, fonts and even icon packs. It doesn’t even matter whether you’re using GNOME, KDE, or Hyprland — Stylix can probably already style your entire desktop. And if it doesn’t, you can just contribute a module or use its templating engine in your own configuration!

#Demo

Just because I’m so proud of my configuration, and you probably want to know what Stylix would look like, here is a quick demo from my own NixOS configuration.

A screenshot of my NixOS setup showing a GNOME desktop with a selection of applications that can be styled using Stylix.
A screenshot of my NixOS setup showing a GNOME desktop with a selection of applications that can be styled using Stylix.

As you can see, Stylix can style any application, be it browsers, terminals, Spicetify, or even modded Discord clients. In addition to that, all native GTK and QT applications are supported, which should cover most Linux needs. In fact, my current NixOS configuration doesn’t have a single app that’s not styled using Stylix!

#Try it yourself

If you want to give Stylix a try, just head over to its documentation on the installation process. Vimjoyer has also made a great video covering this process. Additionally, Stylix provides testbeds which let you preview application themes before installing them. You can run these on any system with Nix installed, but be told that they might take some time to compile.

This has been my first long-form blog post, so if you have any feedback or suggestions, make sure to get in touch with me until I implement a commenting feature :)