diff --git a/flake.lock b/flake.lock index 9ae322b4..1b338489 100644 --- a/flake.lock +++ b/flake.lock @@ -880,11 +880,11 @@ }, "nixpkgs-master": { "locked": { - "lastModified": 1774325747, - "narHash": "sha256-siN4x7y/S0FOdjPC1W0Z/vrX4Rlu+VClkEGngmSd0vM=", + "lastModified": 1777221542, + "narHash": "sha256-B7GmxbRADkklyXzV1ahgY4QhCpbQ3crzPCCs2hf6bPM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3879e47ce293fb2932d656aa56551a8e80718533", + "rev": "03de9fe87cb2dcec8da9dbaa3ad1c71ea7fef223", "type": "github" }, "original": { @@ -912,11 +912,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773524153, - "narHash": "sha256-Jms57zzlFf64ayKzzBWSE2SGvJmK+NGt8Gli71d9kmY=", + "lastModified": 1777077449, + "narHash": "sha256-AIiMJiqvGrN4HyLEbKAoCSRRYn0rnlW5VbKNIMIYqm4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e9f278faa1d0c2fc835bd331d4666b59b505a410", + "rev": "a4bf06618f0b5ee50f14ed8f0da77d34ecc19160", "type": "github" }, "original": { diff --git a/hosts/idols-ai/default.nix b/hosts/idols-ai/default.nix index aec95617..b75d13eb 100644 --- a/hosts/idols-ai/default.nix +++ b/hosts/idols-ai/default.nix @@ -27,11 +27,14 @@ in # Include the results of the hardware scan. ./hardware-configuration.nix - ./nvidia.nix - ./ai + ./hardware-intel.nix + ./hardware-nvidia.nix ./preservation.nix ./secureboot.nix + + # others + ./ai ]; # Zram consumes physical memory for compression, which can cause a deadlock and system hang if the model size approaches the physical memory limit. diff --git a/hosts/idols-ai/hardware-configuration.nix b/hosts/idols-ai/hardware-configuration.nix index e53f9101..73e7877c 100644 --- a/hosts/idols-ai/hardware-configuration.nix +++ b/hosts/idols-ai/hardware-configuration.nix @@ -51,10 +51,6 @@ "usb_storage" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; # kvm virtualization support - boot.extraModprobeConfig = "options kvm_intel nested=1"; # for intel cpu - boot.extraModulePackages = [ ]; # clear /tmp on boot to get a stateless /tmp directory. boot.tmp.cleanOnBoot = true; diff --git a/hosts/idols-ai/hardware-intel.nix b/hosts/idols-ai/hardware-intel.nix new file mode 100644 index 00000000..347ecc3f --- /dev/null +++ b/hosts/idols-ai/hardware-intel.nix @@ -0,0 +1,48 @@ +{ + pkgs, + modulesPath, + ... +}: +{ + + imports = [ + (modulesPath + "/hardware/cpu/intel-npu.nix") + ]; + + # Intel NPU support + hardware.cpu.intel.npu.enable = true; + + # kvm virtualization support + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModprobeConfig = "options kvm_intel nested=1"; + boot.extraModulePackages = [ ]; + + # Intel Graphics + # https://wiki.nixos.org/wiki/Intel_Graphics + + services.xserver.videoDrivers = [ "modesetting" ]; + + hardware.graphics = { + enable = true; + extraPackages = with pkgs; [ + # Required for modern Intel GPUs (Xe iGPU and ARC) + intel-media-driver # VA-API (iHD) userspace + vpl-gpu-rt # oneVPL (QSV) runtime + + # Optional (compute / tooling): + intel-compute-runtime # OpenCL (NEO) + Level Zero for Arc/Xe + ]; + }; + + environment.sessionVariables = { + LIBVA_DRIVER_NAME = "iHD"; # Prefer the modern iHD backend + }; + + # May help if FFmpeg/VAAPI/QSV init fails (esp. on Arc with i915): + hardware.enableRedistributableFirmware = true; + boot.kernelParams = [ "i915.enable_guc=3" ]; + + # May help services that have trouble accessing /dev/dri (e.g., jellyfin/plex): + # users.users..extraGroups = [ "video" "render" ]; +} diff --git a/hosts/idols-ai/nvidia.nix b/hosts/idols-ai/hardware-nvidia.nix similarity index 85% rename from hosts/idols-ai/nvidia.nix rename to hosts/idols-ai/hardware-nvidia.nix index 3e040213..c47deda9 100644 --- a/hosts/idols-ai/nvidia.nix +++ b/hosts/idols-ai/hardware-nvidia.nix @@ -11,12 +11,22 @@ # https://wiki.hyprland.org/Nvidia/ # =============================================================================================== + # Hybrid graphics with PRIME[integrated GPU (iGPU) + dedicated GPU (dGPU)] + hardware.nvidia.prime = { + # puts dGPU(Nvidia) to sleep and lets the iGPU handle all tasks by default. + offload.enable = true; + + intelBusId = "PCI:0@0:2:0"; + nvidiaBusId = "PCI:2@0:0:0"; + }; + boot.kernelParams = [ # Since NVIDIA does not load kernel mode setting by default, # enabling it is required to make Wayland compositors function properly. "nvidia-drm.fbdev=1" ]; services.xserver.videoDrivers = [ "nvidia" ]; # will install nvidia-vaapi-driver by default + hardware.nvidia = { # Open-source kernel modules are preferred over and planned to steadily replace proprietary modules open = true; @@ -43,14 +53,6 @@ enable32Bit = true; }; - nixpkgs.overlays = [ - (_: super: { - # ffmpeg-full = super.ffmpeg-full.override { - # withNvcodec = true; - # }; - }) - ]; - services.sunshine.settings = { max_bitrate = 20000; # in Kbps # NVIDIA NVENC Encoder diff --git a/hosts/idols-ai/niri-hardware.kdl b/hosts/idols-ai/niri-hardware.kdl index 3a05df2b..7d2e4899 100644 --- a/hosts/idols-ai/niri-hardware.kdl +++ b/hosts/idols-ai/niri-hardware.kdl @@ -1,5 +1,5 @@ // running `niri msg outputs` to find outputs -output "DP-2" { +output "DP-1" { // Uncomment this line to disable this output. // off @@ -16,7 +16,7 @@ output "DP-2" { // for the resolution. // If the mode is omitted altogether or is invalid, niri will pick one automatically. // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. - mode "3840x2160@144" + mode "3840x2160@120" // Position of the output in the global coordinate space. // This affects directional monitor actions like "focus-monitor-left", and cursor movement. @@ -30,7 +30,7 @@ output "DP-2" { position x=0 y=0 } -output "HDMI-A-1" { +output "HDMI-A-2" { scale 1.5 transform "normal" mode "3840x2160@60" @@ -38,14 +38,14 @@ output "HDMI-A-1" { } // ============= Named Workspaces ============= -workspace "2browser" { open-on-output "DP-2"; } -workspace "4gaming" { open-on-output "DP-2"; } -workspace "5music" { open-on-output "DP-2"; } +workspace "2browser" { open-on-output "DP-1"; } +workspace "4gaming" { open-on-output "DP-1"; } +workspace "5music" { open-on-output "DP-1"; } -workspace "1terminal" { open-on-output "HDMI-A-1"; } -workspace "3chat" { open-on-output "HDMI-A-1"; } -workspace "6file" { open-on-output "HDMI-A-1"; } -workspace "7" { open-on-output "HDMI-A-1"; } -workspace "8" { open-on-output "HDMI-A-1"; } -workspace "9" { open-on-output "HDMI-A-1"; } -workspace "0other" { open-on-output "HDMI-A-1"; } +workspace "1terminal" { open-on-output "HDMI-A-2"; } +workspace "3chat" { open-on-output "HDMI-A-2"; } +workspace "6file" { open-on-output "HDMI-A-2"; } +workspace "7" { open-on-output "HDMI-A-2"; } +workspace "8" { open-on-output "HDMI-A-2"; } +workspace "9" { open-on-output "HDMI-A-2"; } +workspace "0other" { open-on-output "HDMI-A-2"; }