Work is ongoing in the background in preparation to switch from a Hyprland+XFCE setup to a purely Niri one. Currently, in this repository, you will see the "old" configuration until I have fully updated everything, so, no worries, it will not change every five seconds under your fingers.
(last updated: 09/08/2025)
- All desktop modules
- All gpu modules
- All hardware modules
- All icons
- All input modules
- All program modules
- All shell scripts
- All storage modules
- All theming modules
- All uncategorized modules
- All user modules
- All virtualisation modules
- Main configuration.nix
- Crazy mindmap of the entire configuration, because why not?
(last updated: 09/08/2025)
- Brand new README.md
Before finishing up the brand new README.md
file, I am testing the new configuration on a broader range of hardware (including laptops), and am testing most functionality to assure there has been no major regression and to polish the rest of the features. It is coming along very nicely, and it should be ready to be uploaded here within the month of August.
My networking has been really unstable over the past two months, and I have been quite busy doing a lot of things tech related…not. Worry not, work is still ongoing despite the hurdles, and I am now daily driving the very same NixOS + Niri configuration that will soon come here. However, there are still things that I need to finish, such as repolishing a few of the reworked modules, update and overhaul the README, work around certain of Niri's annoying limitations in some places, continue testing daily to catch any glaring bugs and issues, and wait for some pull requests in nixpkgs to be merged for a fully fucntionaly system (we do be hating when the calculator can't build and thus blocks super critical security updates, thanks for nothing, NixOS! Ended up just making my own better). Anyway, you may continue to read what I wrote a few weeks…months(?) ago below.
Relevant changes will include, but will probably not be limited to:
- Removing the Hyprland Wayland compositor.
- Removing the XFCE desktop environment.
- Adding the Niri Wayland compositor.
- Adapting the relevant shell scripts, where possible, to work with Niri (this will also allow me to complete #3).
- Cleaning up other modules & making the syntax and comments across them more consisent.
- Pulling some of my configuration files from my dotfiles to here.
Here are some of the reasons I am making the switch to Niri:
- Less resource usage and a bit faster on my machines (especially noticeable on my older laptops).
- Actually runs on my ThinkPad L510 (as such, XFCE is no longer needed, as I only had it for computers where Hyprland does not work).
- The concept of this scrollable (not-really-automatic-but-tilling) Wayland compositor intruiges me, and I quite like it for now.
- It allows me to take a step back and refresh a lot of other things that I used to use until now, such as my default terminal emulator, or how I handle some configuration files.
- It allows me to experiment with a pure Wayland-only setup (though, XWaylandsatellite will probably end up being used at some point).
- It allows me to notice and potentially fix issues that I did not notice in Hyprland, such as QT apps not liking the
gtk2
engine for theming in a pure Wayland environment (this one hurts my soul (but I found a solution)).
For now, the configuration will not change. I am testing everything on my side and will upload everything once the work is complete. Yep, another big commit coming up.
This NixOS configuration is made for a single-user, desktop environment on an X86_64 (AMD64) CPU-based PC.
It assumes an installation pulling packages from the unstable
branch.
It is a successor to my previous NixOS configuration, which is now archived.
When using this configuration, make sure to read and modify each module of interest to you. It is, after all, made for myself first.
This only applies if you are booting in BIOS mode.
In the Boot.nix
module, you will find the option to set the storage device on which the Limine
bootloader should be installed onto (boot.loader.limine.biosDevice
). You need to set this value for it to be installed.
Be careful: Using /dev/sdX
is not recommended, for if you use multiple drives, these names may change upon reboots or other hardware/software changes. Instead, it is recommended to use the disk's ID, found in /dev/disk/by-id
. An example using a Samsung NVME SSD is provided in the configuration.
In the User/Name.nix
module, you can set your user's name & description (title). They will automatically be applied to the modules that need them, using ${config.userName}
& ${config.userTitle}
where needed.
To see which modules use these variables, open a terminal emulator where this configuration is located, & you can run the following commands:
grep -Rn "\${config.userName}"
grep -Rn "\${config.userTitle}"
"-R
" reads all files under each directory, recursively, also following any symbolic links.
"-n
" shows the relevant line number at the end of the file name.
In the Networking.nix
module, you can set the PC's name over the network at networking.hostName
.
If you have initially installed NixOS with a version different from the one present in this configuration, you will need to change its value (currently, 25.05
to the desired one in the Nix-settings.nix
module.
Note that, after that, you should never change this number. Only change it when fully re-installing NixOS.
To enable support for NVIDIA GPUs (16XX+ 20XX+) with the relevant proprietary drivers, you can uncomment the ./NVIDIA.nix
import in the configuration.nix
module.
Currently, the Flathub Flatpak repository cannot be easily declaratively defined in NixOS & Home Manager by themselves. As such, it needs to be manually added with a shell command after installation.
If you are using the FISH shell, I added an abbreviation that will do it for you: enable-flathub
.
If you are installing on a virtual machine, you might consider uncommenting the relevant Guest agents/additions in the configuration.nix
module.
This configuration is aimed and sometimes assumes (to be fixed) the use of the Hyprland Wayland compositor. However, you can enable the XFCE desktop environment instead by uncommenting the relevant modules in the configuration.nix
module, as long as you also disable Hyprland in the ./Hyprland/Enable.nix
module.
By default, systemctl suspend
should just work. However, on some older hardware with certain firmware bugs and other quirks, it might not work properly. This is the case on my ThinkPad L510 (see NixOS/nixpkgs#409934 for more details).
If this is the case for your computer, you can uncomment a custom suspend override in the Power.nix
module, which will use pm-suspend
from the pmutils
package to suspend.
- Single user.
- Personal computing.
- Desktops & laptops.
- Secure Boot.
- Accessibility.
- Touchscreen.
- Remote desktop.
- Snap packaging system.
- Computers with:
- A non-x86_64 (AMD64) CPU architecture.
- No adequate GPU acceleration when using
Hyprland
. - Hybrid GPU setup (NVIDIA PRIME, etc).
- Less than 2 GiB of RAM (swap can be heavily used with less than 4, 8-16 GiB is recommended).
- Less than 64 GiB of storage (some Nix storage optimizations are already enabled).
Help is available in:
- The configuration.nix(5) man page.
- The on-device manual by running the
nixos-help
command. - The online manual
- The NixOS Wiki
- The Nix.dev documentation for the Nix ecosystem.
A searchable list of available packages for NixOS can be found here:
NixOS package search
A searchable list of available options for NixOS can be found here:
NixOS options search
A (slow) list of available options for Home Manager can be found here:
Home Manager search
The beautiful wallpaper in the screenshot is made by Byrotek.