diff --git a/README.md b/README.md index dea78d6..6df4cb9 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ My personal NixOS system configuration. ## Overview - **OS:** NixOS 26.05 (unstable channel) -- **Desktop:** Budgie on Wayland (labwc), SDDM +- **Desktop:** KDE Plasma 6 on Wayland (KWin), SDDM - **Bootloader:** Limine - **Terminal:** Konsole - **Shell:** Zsh @@ -19,7 +19,7 @@ My personal NixOS system configuration. | `configuration.nix` | Imports only | | `modules/system.nix` | Boot, networking, locale, audio, hardening | | `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/apps.nix` | Installed packages | | `modules/scripts.nix` | Custom scripts in `modules/scripts/` | diff --git a/modules/apps.nix b/modules/apps.nix index d5c3626..b677f3b 100644 --- a/modules/apps.nix +++ b/modules/apps.nix @@ -1,14 +1,21 @@ { config, pkgs, ... }: let + # 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 - # we don't own. These two overrides cut that down to the RTL-SDR paths. + # drags in UHD (USRP firmware), BladeRF and LimeSuite — ~1.5 GB for + # hardware we don't own. These two overrides cut that down to the RTL-SDR paths. + 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. sdrppLean = pkgs.sdrpp.override { @@ -23,15 +30,17 @@ let dragonlabs_source = false; spectran_http_source = false; }; + in { users.users."nexoniarz".packages = with pkgs; [ + tumbler brightnessctl ddcutil - lm_sensors # sensors-detect helps ddcutil find the I2C buses + lm_sensors networkmanager - xdg-user-dirs # Resolves localized folder names (Obrazy, not Pictures) + xdg-user-dirs # Apps blender @@ -46,6 +55,8 @@ in obs-studio sdrppLean rtl433Lean + lmms + openrgb # Games prismlauncher @@ -86,5 +97,8 @@ in kdePackages.konsole kdePackages.dolphin kdePackages.plasma-systemmonitor + qt5.qtwayland + qt6.qtwayland + qemu ]; } diff --git a/modules/desktop.nix b/modules/desktop.nix index 926f34d..171f9d7 100644 --- a/modules/desktop.nix +++ b/modules/desktop.nix @@ -1,13 +1,14 @@ { config, pkgs, ... }: { - # Budgie ships only a Wayland session here (labwc); xserver stays on for - # Xwayland and for the xkb layout below. + # Plasma ships a proper Wayland session (KWin) with solid Xwayland + # 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.desktopManager.budgie.enable = true; + services.desktopManager.plasma6.enable = true; - # SDDM replaces lightdm: Qt, and it actually launches Wayland sessions. - # Its own greeter runs on weston, not kwin, so no KDE compositor tags along. + # SDDM is KDE's own greeter — Qt-based, and launches Wayland sessions + # natively, Plasma included. services.displayManager.sddm = { enable = true; wayland.enable = true; @@ -26,28 +27,11 @@ # xserver.nix installs xterm unconditionally; Konsole is the terminal here. services.xserver.excludePackages = [ pkgs.xterm ]; - # Budgie's module installs GTK/MATE apps that duplicate the Qt ones in - # apps.nix. Excluding gnome-terminal also flips programs.gnome-terminal.enable - # off — the module gates that on this same list. - 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 - ]; - + # Icon/cursor theme packages. Plasma has no gsettings-style declarative + # knob for this the way Budgie did — pick them in System Settings, or + # bring in plasma-manager later for a fully declarative setup. environment.systemPackages = [ pkgs.gruvbox-plus-icons pkgs.bibata-cursors ]; - - services.desktopManager.budgie.extraGSettingsOverrides = '' - [org.gnome.desktop.interface] - icon-theme='Gruvbox-Plus-Dark' - cursor-theme='Bibata-Modern-Classic' - ''; } diff --git a/modules/system.nix b/modules/system.nix index a7dbdcc..0d3e9b4 100644 --- a/modules/system.nix +++ b/modules/system.nix @@ -27,7 +27,6 @@ }; boot.kernelPackages = pkgs.linuxPackages; boot.supportedFilesystems = [ "fuse" ]; - networking.hostName = "nixos"; networking.networkmanager.enable = true; @@ -59,7 +58,7 @@ dates = "weekly"; options = "--delete-older-than 7d"; }; - + console.keyMap = "pl2"; security.rtkit.enable = true; @@ -85,6 +84,11 @@ }; }; + services.udev.extraRules = '' + # OpenRGB + SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660" + ''; + services.blueman.enable = true; programs.firejail = { @@ -133,6 +137,8 @@ ]; environment.systemPackages = [ pkgs.file ]; + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + # --- Hardening --- # 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. zramSwap.enable = true; swapDevices = lib.mkForce [ ]; - boot.kernelParams = [ "systemd.gpt_auto=0" ]; + boot.kernelParams = [ "systemd.gpt_auto=0" "acpi_enforce_resources=lax" ]; boot.kernel.sysctl = { "kernel.kptr_restrict" = 2; @@ -160,6 +166,10 @@ systemd.coredump.enable = false; 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" ]; services.resolved = { @@ -182,6 +192,9 @@ uri = ""; interval = 0; }; - + services.hardware.openrgb = { + enable = true; + motherboard = "amd"; + }; services.geoclue2.enable = false; }