From bb427145df05cc2572d865f29d3f6dc6ff3954c1 Mon Sep 17 00:00:00 2001 From: Max P Date: Wed, 10 Jun 2026 19:34:36 +0200 Subject: [PATCH] Update --- README.md | 97 ++++++++++++++++++++---------------- configuration.nix | 33 ++++++++---- flake.nix | 16 +++--- modules/base.nix | 10 ++-- modules/desktop/budgie.nix | 8 ++- modules/desktop/common.nix | 9 ++++ modules/desktop/default.nix | 28 ----------- modules/desktop/gnome.nix | 16 +++--- modules/desktop/hyprland.nix | 34 ++++++------- modules/desktop/kde.nix | 16 +++--- modules/gaming.nix | 2 + modules/graphics/nvidia.nix | 22 ++++++++ modules/packages.nix | 7 +++ modules/peripherals.nix | 6 --- 14 files changed, 166 insertions(+), 138 deletions(-) create mode 100644 modules/desktop/common.nix delete mode 100644 modules/desktop/default.nix create mode 100644 modules/graphics/nvidia.nix create mode 100644 modules/packages.nix diff --git a/README.md b/README.md index 4abbb29..27b104a 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,13 @@ # NixOS Gaming Base -Diese Basis-Config ist für ein Desktop-System mit - -- Intel Core i9-13900KF -- AMD Radeon RX 9070 XT - -ausgelegt und nutzt `nixos-unstable`, `Chaotic-Nyx` und eine waehlbare Desktop-Umgebung. Fokus: +Diese Basis-Config ist als wiederverwendbare Vorlage für ein NixOS-Gaming-Desktop-System gedacht und nutzt `nixos-unstable`, `Chaotic-Nyx` und getrennte Desktop-/Treiber-Configs. Fokus: - aktueller Kernel -- AMD-Grafik mit Chaotic `mesa-git` und 32-Bit-Libs für Steam/Proton +- umschaltbare Grafik-Configs für AMD oder Nvidia +- Chaotic `mesa-git` und 32-Bit-Libs für Steam/Proton - PipeWire + Gaming-/Desktop-Audio-Tools - Steam, Gamescope, MangoHud, Lutris, Heroic, LACT -- RGB- und Peripherie-Basis fuer deine USB-Geraete +- Basis für RGB- und Gaming-Peripherie - Desktop-Auswahl zwischen KDE, GNOME, Budgie und Hyprland ## Struktur @@ -19,49 +15,63 @@ ausgelegt und nutzt `nixos-unstable`, `Chaotic-Nyx` und eine waehlbare Desktop-U - `flake.nix`: Einstieg über `nixos-unstable` + `chaotic-cx/nyx` - `configuration.nix`: Host-spezifische Einstiegsdatei - `modules/base.nix`: Boot, Kernel, Locale, Nix, Firmware, Governor +- `modules/packages.nix`: zentraler Ort für eigene Zusatzpakete - `modules/chaotic-nyx.nix`: Chaotic-Nyx Aktivierung, `allowUnfree`, `mesa-git` - `modules/graphics/mesa-amd.nix`: AMDGPU + Mesa/RADV Basis +- `modules/graphics/nvidia.nix`: Nvidia-Treiber Basis - `modules/audio/pipewire.nix`: PipeWire, JACK, Pulse, Audio-Tools - `modules/gaming.nix`: Steam, Gamescope, Wine/Launcher-Stack -- `modules/desktop/default.nix`: Desktop-Auswahl ueber `profiles.desktop` +- `modules/desktop/common.nix`: gemeinsame Desktop-Pakete - `modules/desktop/kde.nix`: KDE Plasma 6 + SDDM - `modules/desktop/gnome.nix`: GNOME + GDM - `modules/desktop/budgie.nix`: Budgie - `modules/desktop/hyprland.nix`: Hyprland + SDDM -- `modules/peripherals.nix`: OpenRGB, Logitech/Corsair-nahe Tools, USB-Helfer +- `modules/peripherals.nix`: RGB-, Maus- und USB-Helfer -## USB-Bezug +## Vorlage anpassen -Die Config berücksichtigt diese aktuell erkannten Geräte: - -- `048d:5702` ITE RGB LED Controller -- `1235:8211` Focusrite Scarlett Solo 3rd Gen -- `1b1c:1bfd` Corsair K70 CORE RGB -- `046d:c539` Logitech Lightspeed Receiver - -Daraus folgen aktuell: - -- `openrgb` + `hardware.i2c.enable` fuer RGB-/Board-Zugriff -- `ratbagd` + `piper` fuer Logitech-Gaming-Peripherie -- `solaar`, `usbutils`, `pciutils` fuer Device-Handling und Diagnose -- PipeWire-Setup für das Scarlett Solo -- waehlbarer Desktop via `profiles.desktop` -- Chaotic `mesa-git` mit Fallback-Spezialisierung `stable-mesa` - -## Desktop auswaehlen - -Die Auswahl passiert zentral in `configuration.nix`: +Die wichtigsten Platzhalter stehen direkt in `configuration.nix`: ```nix -profiles.desktop = "kde"; +hostName = "example-host"; +userName = "gamer"; +fullName = "Gaming User"; ``` -Gueltige Werte sind: +Passe diese Werte vor dem ersten Build an. In `modules/base.nix` sind `UTC`, `en_US.UTF-8` und `us` als neutrale Defaults gesetzt und können ebenfalls überschrieben werden. +Zusätzliche allgemeine Pakete kannst du in `modules/packages.nix` eintragen. -- `"kde"` -- `"gnome"` -- `"budgie"` -- `"hyprland"` +## Desktop auswählen + +Die Auswahl passiert zentral in `configuration.nix` über `desktopConfig`: + +```nix +desktopConfig = ./modules/desktop/kde.nix; +``` + +Mögliche Werte sind: + +- `./modules/desktop/kde.nix` +- `./modules/desktop/gnome.nix` +- `./modules/desktop/budgie.nix` +- `./modules/desktop/hyprland.nix` + +Es wird damit immer genau ein Desktop-Modul importiert, nicht alle auf einmal. + +## Grafiktreiber auswählen + +Die Grafik-Konfiguration läuft genauso über `graphicsConfig`: + +```nix +graphicsConfig = ./modules/graphics/mesa-amd.nix; +``` + +Mögliche Werte sind: + +- `./modules/graphics/mesa-amd.nix` +- `./modules/graphics/nvidia.nix` + +In `modules/graphics/nvidia.nix` sind `modesetting`, `nvidiaSettings` und das stabile Treiberpaket bereits gesetzt. ## Chaotic-Nyx Hinweis @@ -72,24 +82,25 @@ Die Flake bindet `github:chaotic-cx/nyx/nyxpkgs-unstable` direkt ein und importi ## Nach der Installation 1. Die vom Installer erzeugte `hardware-configuration.nix` nach `./hardware-configuration.nix` kopieren. -2. Falls nötig `users.users.max` und `networking.hostName` in `configuration.nix` anpassen. -3. Gewuenschten Desktop ueber `profiles.desktop` in `configuration.nix` setzen. -4. Passwort fuer den Benutzer setzen: +2. `hostName`, `userName` und `fullName` in `configuration.nix` anpassen. +3. Gewünschten Desktop und ggf. Grafiktreiber in `configuration.nix` auswählen. +4. Optional Locale, Tastatur und Zeitzone anpassen. +5. Passwort für den Benutzer setzen: ```bash -passwd max +passwd ``` -5. Flake lock erstellen: +6. Flake lock erstellen: ```bash nix flake lock ``` -6. System aktivieren: +7. System aktivieren: ```bash -sudo nixos-rebuild switch --flake .#nixos-gaming +sudo nixos-rebuild switch --flake .#template ``` ## Späterer Ausbau diff --git a/configuration.nix b/configuration.nix index c69264a..76b2793 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,25 +1,40 @@ { ... }: +let + hostName = "example-host"; + userName = "gamer"; + fullName = "Gaming User"; + + # Desktop-Auswahl: + # ./modules/desktop/gnome.nix + # ./modules/desktop/budgie.nix + # ./modules/desktop/hyprland.nix + desktopConfig = ./modules/desktop/kde.nix; + + # Grafiktreiber-Auswahl: + # ./modules/graphics/nvidia.nix + graphicsConfig = ./modules/graphics/mesa-amd.nix; +in + { imports = [ ./hardware-configuration.nix ./modules/base.nix + ./modules/packages.nix ./modules/audio/pipewire.nix ./modules/chaotic-nyx.nix - ./modules/graphics/mesa-amd.nix - ./modules/desktop + graphicsConfig + ./modules/desktop/common.nix + desktopConfig ./modules/gaming.nix ./modules/peripherals.nix ]; - networking.hostName = "nixos-gaming"; + networking.hostName = hostName; - profiles.desktop = "kde"; - # Moegliche Werte: "kde" "gnome" "budgie" "hyprland" - - users.users.max = { + users.users.${userName} = { isNormalUser = true; - description = "max"; + description = fullName; extraGroups = [ "wheel" "networkmanager" @@ -29,5 +44,5 @@ ]; }; - system.stateVersion = "25.05"; + system.stateVersion = "26.05"; } diff --git a/flake.nix b/flake.nix index 1101f55..7dd9a94 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Gaming-focused NixOS config with COSMIC and Chaotic-Nyx"; + description = "Reusable NixOS gaming desktop template with selectable desktop and GPU modules"; nixConfig = { extra-substituters = [ @@ -18,12 +18,14 @@ outputs = { nixpkgs, chaotic, ... }: { - nixosConfigurations.nixos-gaming = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - chaotic.nixosModules.default - ./configuration.nix - ]; + nixosConfigurations = { + template = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + chaotic.nixosModules.default + ./configuration.nix + ]; + }; }; }; } diff --git a/modules/base.nix b/modules/base.nix index 4a3eec8..249298e 100644 --- a/modules/base.nix +++ b/modules/base.nix @@ -4,7 +4,7 @@ boot = { loader.systemd-boot.enable = true; loader.efi.canTouchEfiVariables = true; - kernelPackages = pkgs.linuxPackages_latest; + kernelPackages = pkgs.linuxPackages_cachyos; supportedFilesystems = [ "ntfs" ]; # Helpful for large games, shader caches and some launchers. @@ -16,10 +16,11 @@ networking.networkmanager.enable = true; - time.timeZone = "Europe/Berlin"; + # Override these in configuration.nix if you need local defaults. + time.timeZone = lib.mkDefault "UTC"; - i18n.defaultLocale = "de_DE.UTF-8"; - console.keyMap = "de"; + i18n.defaultLocale = lib.mkDefault "en_US.UTF-8"; + console.keyMap = lib.mkDefault "us"; nix.settings = { experimental-features = [ "nix-command" "flakes" ]; @@ -40,6 +41,7 @@ hardware = { enableRedistributableFirmware = true; cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; }; services.fwupd.enable = true; diff --git a/modules/desktop/budgie.nix b/modules/desktop/budgie.nix index f17f0dc..a15b532 100644 --- a/modules/desktop/budgie.nix +++ b/modules/desktop/budgie.nix @@ -1,8 +1,6 @@ -{ config, lib, ... }: +{ ... }: { - config = lib.mkIf (config.profiles.desktop == "budgie") { - services.xserver.enable = true; - services.desktopManager.budgie.enable = true; - }; + services.xserver.enable = true; + services.desktopManager.budgie.enable = true; } diff --git a/modules/desktop/common.nix b/modules/desktop/common.nix new file mode 100644 index 0000000..fe04c50 --- /dev/null +++ b/modules/desktop/common.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: + +{ + environment.systemPackages = with pkgs; [ + seahorse + wayland-utils + wl-clipboard + ]; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix deleted file mode 100644 index 94b1add..0000000 --- a/modules/desktop/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib, pkgs, ... }: - -{ - imports = [ - ./budgie.nix - ./gnome.nix - ./hyprland.nix - ./kde.nix - ]; - - options.profiles.desktop = lib.mkOption { - type = lib.types.enum [ - "kde" - "gnome" - "budgie" - "hyprland" - ]; - default = "kde"; - example = "hyprland"; - description = "Waehlt die Desktop-Umgebung fuer dieses System aus."; - }; - - config.environment.systemPackages = with pkgs; [ - seahorse - wayland-utils - wl-clipboard - ]; -} diff --git a/modules/desktop/gnome.nix b/modules/desktop/gnome.nix index 095d00c..3f898d2 100644 --- a/modules/desktop/gnome.nix +++ b/modules/desktop/gnome.nix @@ -1,13 +1,11 @@ -{ config, lib, pkgs, ... }: +{ pkgs, ... }: { - config = lib.mkIf (config.profiles.desktop == "gnome") { - services.xserver.enable = true; - services.displayManager.gdm.enable = true; - services.desktopManager.gnome.enable = true; + services.xserver.enable = true; + services.displayManager.gdm.enable = true; + services.desktopManager.gnome.enable = true; - environment.systemPackages = with pkgs; [ - gnome-tweaks - ]; - }; + environment.systemPackages = with pkgs; [ + gnome-tweaks + ]; } diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix index acd936b..068e3a9 100644 --- a/modules/desktop/hyprland.nix +++ b/modules/desktop/hyprland.nix @@ -1,22 +1,20 @@ -{ config, lib, pkgs, ... }: +{ pkgs, ... }: { - config = lib.mkIf (config.profiles.desktop == "hyprland") { - services.displayManager.sddm = { - enable = true; - wayland.enable = true; - }; - - programs.hyprland = { - enable = true; - withUWSM = true; - }; - - environment.systemPackages = with pkgs; [ - dunst - kitty - waybar - wofi - ]; + services.displayManager.sddm = { + enable = true; + wayland.enable = true; }; + + programs.hyprland = { + enable = true; + withUWSM = true; + }; + + environment.systemPackages = with pkgs; [ + dunst + kitty + waybar + wofi + ]; } diff --git a/modules/desktop/kde.nix b/modules/desktop/kde.nix index 6e501ac..a9b687a 100644 --- a/modules/desktop/kde.nix +++ b/modules/desktop/kde.nix @@ -1,14 +1,12 @@ -{ config, lib, ... }: +{ ... }: { - config = lib.mkIf (config.profiles.desktop == "kde") { - services.xserver.enable = true; + services.xserver.enable = true; - services.displayManager.sddm = { - enable = true; - wayland.enable = true; - }; - - services.desktopManager.plasma6.enable = true; + services.displayManager.sddm = { + enable = true; + wayland.enable = true; }; + + services.desktopManager.plasma6.enable = true; } diff --git a/modules/gaming.nix b/modules/gaming.nix index c291560..745d9de 100644 --- a/modules/gaming.nix +++ b/modules/gaming.nix @@ -19,12 +19,14 @@ }; environment.systemPackages = with pkgs; [ + ftb-app gamemode goverlay heroic lact lutris mangohud + prismlauncher protontricks steam-run wineWowPackages.stable diff --git a/modules/graphics/nvidia.nix b/modules/graphics/nvidia.nix new file mode 100644 index 0000000..ce516f1 --- /dev/null +++ b/modules/graphics/nvidia.nix @@ -0,0 +1,22 @@ +{ config, pkgs, ... }: + +{ + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware.nvidia = { + modesetting.enable = true; + nvidiaSettings = true; + open = false; + package = config.boot.kernelPackages.nvidiaPackages.latest; + }; + + environment.systemPackages = with pkgs; [ + mesa-demos + vulkan-tools + ]; +} diff --git a/modules/packages.nix b/modules/packages.nix new file mode 100644 index 0000000..fa749d7 --- /dev/null +++ b/modules/packages.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: + +{ + # Eigene Zusatzpakete kommen hier rein. + environment.systemPackages = with pkgs; [ + ]; +} diff --git a/modules/peripherals.nix b/modules/peripherals.nix index 8522937..a966218 100644 --- a/modules/peripherals.nix +++ b/modules/peripherals.nix @@ -18,10 +18,4 @@ solaar usbutils ]; - - # Observed devices: - # - 048d:5702 Integrated Technology Express RGB LED Controller - # - 1235:8211 Focusrite Scarlett Solo (3rd Gen.) - # - 1b1c:1bfd Corsair K70 CORE RGB - # - 046d:c539 Logitech Lightspeed receiver }