diff --git a/flake.nix b/flake.nix index 49664cc..ff0dd48 100644 --- a/flake.nix +++ b/flake.nix @@ -22,9 +22,19 @@ inputs.nixpkgs.follows = "nixpkgs"; inputs.quickshell.follows = "quickshell"; }; + + nix-gaming = { + url = "github:fufexan/nix-gaming"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { self, nixpkgs, mango, quickshell, noctalia, ... }@inputs: + outputs = { self, nixpkgs, mango, quickshell, noctalia, nix-gaming, home-manager, ... }@inputs: let system = "x86_64-linux"; lib = nixpkgs.lib; @@ -34,11 +44,17 @@ mangoModule = assert lib.hasAttrByPath [ "nixosModules" "mango" ] mango; mango.nixosModules.mango; - # IMPORTANT: Replace with actual hostname commonModules = [ - ./hosts//hardware-configuration.nix + ./hosts/atlas/hardware-configuration.nix ./modules/common.nix mangoModule + # Home Manager module - Foundation for user-level package management + # User-specific configurations can be added via home-manager.users. + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + } ]; in { nixosConfigurations = { diff --git a/hosts/hostname/hardware-configuration.nix b/hosts/atlas/hardware-configuration.nix similarity index 100% rename from hosts/hostname/hardware-configuration.nix rename to hosts/atlas/hardware-configuration.nix diff --git a/modules/common.nix b/modules/common.nix index 47c4eb7..cb1413e 100644 --- a/modules/common.nix +++ b/modules/common.nix @@ -10,13 +10,32 @@ # -------------------------------------------------------------------------- # SYSTEM # -------------------------------------------------------------------------- - # IMPORTANT: Replace with actual values - networking.hostName = ""; - time.timeZone = ""; - i18n.defaultLocale = ""; + networking.hostName = "atlas"; + time.timeZone = "Europe/Berlin"; + i18n.defaultLocale = "en_US.UTF-8"; + + # German keyboard layout (nodeadkeys variant) + console.keyMap = "de-latin1-nodeadkeys"; + services.xserver.xkb = { + layout = "de"; + variant = "nodeadkeys"; + }; networking.networkmanager.enable = true; + # Memory compression (reduces swap usage) + zramSwap = { + enable = true; + algorithm = "zstd"; + memoryPercent = 50; + }; + + # Firmware updates + services.fwupd.enable = true; + + # Power profiles daemon (for laptop/power management) + services.power-profiles-daemon.enable = true; + # -------------------------------------------------------------------------- # AMD GPU - RDNA 4 (RX 9060 XT) + Zen 3 CPU (5700G) # -------------------------------------------------------------------------- @@ -42,6 +61,13 @@ # This variable is optional but makes it explicit environment.variables.AMD_VULKAN_ICD = "RADV"; + # Wayland session variables for proper app integration + environment.sessionVariables = { + QT_QPA_PLATFORM = "wayland"; + MOZ_ENABLE_WAYLAND = "1"; + NIXOS_OZONE_WL = "1"; # Electron apps (VS Code, Discord, etc.) + }; + # -------------------------------------------------------------------------- # CPU - Zen 3 Optimizations (Ryzen 7 5700G) # -------------------------------------------------------------------------- @@ -75,16 +101,14 @@ enable = true; settings.default_session = { command = "mango"; - # IMPORTANT: Replace with actual username - user = ""; + user = "pinj"; }; }; # -------------------------------------------------------------------------- # USER ACCOUNT # -------------------------------------------------------------------------- - # IMPORTANT: Replace with actual username - users.users. = { + users.users.pinj = { isNormalUser = true; extraGroups = [ "wheel" "networkmanager" "video" "seat" ]; # IMPORTANT: Generate a password hash with: mkpasswd -m sha-512 @@ -151,6 +175,13 @@ alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; + + # Low-latency configuration for gaming + lowLatency = { + enable = true; + quantum = 64; # Buffer size (lower = less latency) + rate = 48000; # Sample rate + }; }; # Disable PulseAudio (conflicts with PipeWire) diff --git a/modules/dev.nix b/modules/dev.nix index bcf47d9..55c183e 100644 --- a/modules/dev.nix +++ b/modules/dev.nix @@ -22,10 +22,9 @@ }; }; - # IMPORTANT: Replace with actual username # NOTE: After first enabling/applying this dev profile, you must log out and # log back in (or reboot) for the docker group membership to take effect. - users.users..extraGroups = [ "docker" ]; + users.users.pinj.extraGroups = [ "docker" ]; # -------------------------------------------------------------------------- # DEVELOPMENT TOOLS @@ -35,11 +34,12 @@ nix-direnv.enable = true; # Caches nix shells }; - # IMPORTANT: Replace with actual username - users.users..packages = with pkgs; [ + users.users.pinj.packages = with pkgs; [ # -- Git -- lazygit gh # GitHub CLI + delta # Git diff viewer + meld # Visual diff tool # -- Node.js -- nodejs_22 @@ -56,10 +56,11 @@ bat # cat alternative fzf # Fuzzy finder zoxide # cd alternative - delta # Git diff viewer - # -- Database Clients -- + # -- Database & API Tools -- postgresql # psql client + dbeaver-bin # Database GUI + insomnia # API testing # redis # Uncomment if needed # -- Misc -- diff --git a/modules/gaming.nix b/modules/gaming.nix index ad40843..b93f913 100644 --- a/modules/gaming.nix +++ b/modules/gaming.nix @@ -1,9 +1,18 @@ -{ pkgs, ... }: +{ pkgs, inputs, ... }: { # Identification tags (shows in boot menu) system.nixos.tags = [ "gaming" "zen" ]; + # -------------------------------------------------------------------------- + # NIX-GAMING PLATFORM OPTIMIZATIONS + # -------------------------------------------------------------------------- + imports = [ + inputs.nix-gaming.nixosModules.platformOptimisations + ]; + + nix-gaming.platformOptimisations.enable = true; + # -------------------------------------------------------------------------- # KERNEL - Zen for gaming performance # -------------------------------------------------------------------------- @@ -53,17 +62,16 @@ # programs to function correctly. These groups are only added when using # the gaming profile. If you need consistent group membership across # both profiles, add these groups to common.nix instead. - # IMPORTANT: Replace with actual username - users.users..extraGroups = [ "corectrl" "gamemode" ]; + users.users.pinj.extraGroups = [ "corectrl" "gamemode" ]; # -------------------------------------------------------------------------- # GAMING PACKAGES # -------------------------------------------------------------------------- - # IMPORTANT: Replace with actual username - users.users..packages = with pkgs; [ + users.users.pinj.packages = with pkgs; [ # -- Performance Overlays -- mangohud # FPS counter, GPU stats goverlay # MangoHud GUI config + vkbasalt # Vulkan post-processing (sharpening, CAS) # -- Game Launchers -- lutris # Multi-platform launcher @@ -78,6 +86,10 @@ # -- Utilities -- gamescope # Micro-compositor for gaming corectrl # AMD GPU control GUI + lact # Linux AMDGPU Control Tool (alternative to CoreCtrl) + + # -- Communication -- + discord # Voice chat and gaming communities # -- Optional Game Clients -- # prismlauncher # Minecraft