Switch desktop from Budgie to KDE Plasma; OpenRGB support and misc packages

Budgie's Wayland session had been broken; Plasma 6 replaces it with SDDM
still handling the Wayland greeter. Since the KDE apps in apps.nix were
already installed as GTK/MATE replacements, Budgie's exclude-package list
is no longer needed under native Plasma.

Also: OpenRGB service + udev rule, RTL-SDR/system tweaks, lmms, qemu,
qt5/qt6 qtwayland, nix flakes enabled.
This commit is contained in:
Nexoniarz 2026-09-18 12:46:12 +02:00
commit 095e869faa
4 changed files with 48 additions and 37 deletions

View file

@ -5,7 +5,7 @@ My personal NixOS system configuration.
## Overview ## Overview
- **OS:** NixOS 26.05 (unstable channel) - **OS:** NixOS 26.05 (unstable channel)
- **Desktop:** Budgie on Wayland (labwc), SDDM - **Desktop:** KDE Plasma 6 on Wayland (KWin), SDDM
- **Bootloader:** Limine - **Bootloader:** Limine
- **Terminal:** Konsole - **Terminal:** Konsole
- **Shell:** Zsh - **Shell:** Zsh
@ -19,7 +19,7 @@ My personal NixOS system configuration.
| `configuration.nix` | Imports only | | `configuration.nix` | Imports only |
| `modules/system.nix` | Boot, networking, locale, audio, hardening | | `modules/system.nix` | Boot, networking, locale, audio, hardening |
| `modules/drivers.nix` | GPU, tablet, I2C, RTL-SDR | | `modules/drivers.nix` | GPU, tablet, I2C, RTL-SDR |
| `modules/desktop.nix` | Budgie, theming | | `modules/desktop.nix` | Plasma, theming |
| `modules/users.nix` | Account, shell, Steam | | `modules/users.nix` | Account, shell, Steam |
| `modules/apps.nix` | Installed packages | | `modules/apps.nix` | Installed packages |
| `modules/scripts.nix` | Custom scripts in `modules/scripts/` | | `modules/scripts.nix` | Custom scripts in `modules/scripts/` |

View file

@ -1,14 +1,21 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
let let
# Both SDR++ and rtl_433 default to supporting every radio ever made, which # Both SDR++ and rtl_433 default to supporting every radio ever made, which
# drags in UHD (USRP firmware), BladeRF and LimeSuite — ~1.5 GB for hardware # drags in UHD (USRP firmware), BladeRF and LimeSuite — ~1.5 GB for
# we don't own. These two overrides cut that down to the RTL-SDR paths. # hardware we don't own. These two overrides cut that down to the RTL-SDR paths.
soapysdrLean = pkgs.soapysdr.override { soapysdrLean = pkgs.soapysdr.override {
extraPackages = with pkgs; [ soapyrtlsdr soapyremote ]; extraPackages = with pkgs; [
soapyrtlsdr
soapyremote
];
}; };
rtl433Lean = pkgs.rtl_433.override { soapysdr-with-plugins = soapysdrLean; }; rtl433Lean = pkgs.rtl_433.override {
soapysdr-with-plugins = soapysdrLean;
};
# Leaves the RTL-SDR, rtl_tcp, file and network sources on. # Leaves the RTL-SDR, rtl_tcp, file and network sources on.
sdrppLean = pkgs.sdrpp.override { sdrppLean = pkgs.sdrpp.override {
@ -23,15 +30,17 @@ let
dragonlabs_source = false; dragonlabs_source = false;
spectran_http_source = false; spectran_http_source = false;
}; };
in in
{ {
users.users."nexoniarz".packages = with pkgs; [ users.users."nexoniarz".packages = with pkgs; [
tumbler tumbler
brightnessctl brightnessctl
ddcutil ddcutil
lm_sensors # sensors-detect helps ddcutil find the I2C buses lm_sensors
networkmanager networkmanager
xdg-user-dirs # Resolves localized folder names (Obrazy, not Pictures) xdg-user-dirs
# Apps # Apps
blender blender
@ -46,6 +55,8 @@ in
obs-studio obs-studio
sdrppLean sdrppLean
rtl433Lean rtl433Lean
lmms
openrgb
# Games # Games
prismlauncher prismlauncher
@ -86,5 +97,8 @@ in
kdePackages.konsole kdePackages.konsole
kdePackages.dolphin kdePackages.dolphin
kdePackages.plasma-systemmonitor kdePackages.plasma-systemmonitor
qt5.qtwayland
qt6.qtwayland
qemu
]; ];
} }

View file

@ -1,13 +1,14 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
# Budgie ships only a Wayland session here (labwc); xserver stays on for # Plasma ships a proper Wayland session (KWin) with solid Xwayland
# Xwayland and for the xkb layout below. # support; xserver stays on for that Xwayland layer and for the xkb
# layout below, not because the session itself needs it.
services.xserver.enable = true; services.xserver.enable = true;
services.desktopManager.budgie.enable = true; services.desktopManager.plasma6.enable = true;
# SDDM replaces lightdm: Qt, and it actually launches Wayland sessions. # SDDM is KDE's own greeter — Qt-based, and launches Wayland sessions
# Its own greeter runs on weston, not kwin, so no KDE compositor tags along. # natively, Plasma included.
services.displayManager.sddm = { services.displayManager.sddm = {
enable = true; enable = true;
wayland.enable = true; wayland.enable = true;
@ -26,28 +27,11 @@
# xserver.nix installs xterm unconditionally; Konsole is the terminal here. # xserver.nix installs xterm unconditionally; Konsole is the terminal here.
services.xserver.excludePackages = [ pkgs.xterm ]; services.xserver.excludePackages = [ pkgs.xterm ];
# Budgie's module installs GTK/MATE apps that duplicate the Qt ones in # Icon/cursor theme packages. Plasma has no gsettings-style declarative
# apps.nix. Excluding gnome-terminal also flips programs.gnome-terminal.enable # knob for this the way Budgie did — pick them in System Settings, or
# off — the module gates that on this same list. # bring in plasma-manager later for a fully declarative setup.
environment.budgie.excludePackages = with pkgs; [
nemo # -> dolphin
gnome-terminal # -> konsole
eom # -> gwenview
pluma # -> kate
atril # -> okular
engrampa # -> ark
mate-calc # -> kcalc
mate-system-monitor # -> plasma-systemmonitor
];
environment.systemPackages = [ environment.systemPackages = [
pkgs.gruvbox-plus-icons pkgs.gruvbox-plus-icons
pkgs.bibata-cursors pkgs.bibata-cursors
]; ];
services.desktopManager.budgie.extraGSettingsOverrides = ''
[org.gnome.desktop.interface]
icon-theme='Gruvbox-Plus-Dark'
cursor-theme='Bibata-Modern-Classic'
'';
} }

View file

@ -27,7 +27,6 @@
}; };
boot.kernelPackages = pkgs.linuxPackages; boot.kernelPackages = pkgs.linuxPackages;
boot.supportedFilesystems = [ "fuse" ]; boot.supportedFilesystems = [ "fuse" ];
networking.hostName = "nixos"; networking.hostName = "nixos";
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
@ -85,6 +84,11 @@
}; };
}; };
services.udev.extraRules = ''
# OpenRGB
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
'';
services.blueman.enable = true; services.blueman.enable = true;
programs.firejail = { programs.firejail = {
@ -133,6 +137,8 @@
]; ];
environment.systemPackages = [ pkgs.file ]; environment.systemPackages = [ pkgs.file ];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# --- Hardening --- # --- Hardening ---
# zram instead of disk swap: nothing sensitive is written to disk in # zram instead of disk swap: nothing sensitive is written to disk in
@ -140,7 +146,7 @@
# old swap partition regardless of swapDevices, hence the kernel param. # old swap partition regardless of swapDevices, hence the kernel param.
zramSwap.enable = true; zramSwap.enable = true;
swapDevices = lib.mkForce [ ]; swapDevices = lib.mkForce [ ];
boot.kernelParams = [ "systemd.gpt_auto=0" ]; boot.kernelParams = [ "systemd.gpt_auto=0" "acpi_enforce_resources=lax" ];
boot.kernel.sysctl = { boot.kernel.sysctl = {
"kernel.kptr_restrict" = 2; "kernel.kptr_restrict" = 2;
@ -161,6 +167,10 @@
systemd.coredump.enable = false; systemd.coredump.enable = false;
security.protectKernelImage = true; security.protectKernelImage = true;
systemd.tmpfiles.rules = [
"L+ /var/lib/flatpak/exports/share/applications - - - - /var/lib/flatpak/app/com.usebottles.bottles/current/active/export/share/applications"
];
networking.nameservers = [ "1.1.1.1#cloudflare-dns.com" "9.9.9.9#dns.quad9.net" ]; networking.nameservers = [ "1.1.1.1#cloudflare-dns.com" "9.9.9.9#dns.quad9.net" ];
services.resolved = { services.resolved = {
enable = true; enable = true;
@ -182,6 +192,9 @@
uri = ""; uri = "";
interval = 0; interval = 0;
}; };
services.hardware.openrgb = {
enable = true;
motherboard = "amd";
};
services.geoclue2.enable = false; services.geoclue2.enable = false;
} }