diff --git a/pkgs/nvidia-x11/builder.sh b/pkgs/nvidia-x11/builder.sh new file mode 100755 index 0000000..a774619 --- /dev/null +++ b/pkgs/nvidia-x11/builder.sh @@ -0,0 +1,208 @@ +source $stdenv/setup + +unpackManually() { + skip=$(sed 's/^skip=//; t; d' $src) + tail -n +$skip $src | xz -d | tar xvf - + sourceRoot=. +} + + +unpackFile() { + sh $src -x || unpackManually +} + + +buildPhase() { + if [ -n "$bin" ]; then + # Create the module. + echo "Building linux driver against kernel: $kernel"; + cd kernel + unset src # used by the nv makefile + make $makeFlags -j $NIX_BUILD_CORES module + + cd .. + fi +} + + +installPhase() { + # Install libGL and friends. + + # since version 391, 32bit libraries are bundled in the 32/ sub-directory + if [ "$i686bundled" = "1" ]; then + mkdir -p "$lib32/lib" + cp -prd 32/*.so.* "$lib32/lib/" + if [ -d 32/tls ]; then + cp -prd 32/tls "$lib32/lib/" + fi + fi + + mkdir -p "$out/lib" + cp -prd *.so.* "$out/lib/" + if [ -d tls ]; then + cp -prd tls "$out/lib/" + fi + + # Install systemd power management executables + if [ -e systemd/nvidia-sleep.sh ]; then + mv systemd/nvidia-sleep.sh ./ + fi + if [ -e nvidia-sleep.sh ]; then + sed -E 's#(PATH=).*#\1"$PATH"#' nvidia-sleep.sh > nvidia-sleep.sh.fixed + install -Dm755 nvidia-sleep.sh.fixed $out/bin/nvidia-sleep.sh + fi + + if [ -e systemd/system-sleep/nvidia ]; then + mv systemd/system-sleep/nvidia ./ + fi + if [ -e nvidia ]; then + sed -E "s#/usr(/bin/nvidia-sleep.sh)#$out\\1#" nvidia > nvidia.fixed + install -Dm755 nvidia.fixed $out/lib/systemd/system-sleep/nvidia + fi + + for i in $lib32 $out; do + rm -f $i/lib/lib{glx,nvidia-wfb}.so.* # handled separately + rm -f $i/lib/libnvidia-gtk* # built from source + if [ "$useGLVND" = "1" ]; then + # Pre-built libglvnd + rm $i/lib/lib{GL,GLX,EGL,GLESv1_CM,GLESv2,OpenGL,GLdispatch}.so.* + fi + # Use ocl-icd instead + rm -f $i/lib/libOpenCL.so* + # Move VDPAU libraries to their place + mkdir $i/lib/vdpau + mv $i/lib/libvdpau* $i/lib/vdpau + + # Install ICDs, make absolute paths. + # Be careful not to modify any original files because this runs twice. + + # OpenCL + sed -E "s#(libnvidia-opencl)#$i/lib/\\1#" nvidia.icd > nvidia.icd.fixed + install -Dm644 nvidia.icd.fixed $i/etc/OpenCL/vendors/nvidia.icd + + # Vulkan + if [ -e nvidia_icd.json.template ] || [ -e nvidia_icd.json ]; then + if [ -e nvidia_icd.json.template ]; then + # template patching for version < 435 + sed "s#__NV_VK_ICD__#$i/lib/libGLX_nvidia.so#" nvidia_icd.json.template > nvidia_icd.json.fixed + else + sed -E "s#(libGLX_nvidia)#$i/lib/\\1#" nvidia_icd.json > nvidia_icd.json.fixed + fi + + # nvidia currently only supports x86_64 and i686 + if [ "$i" == "$lib32" ]; then + install -Dm644 nvidia_icd.json.fixed $i/share/vulkan/icd.d/nvidia_icd.i686.json + else + install -Dm644 nvidia_icd.json.fixed $i/share/vulkan/icd.d/nvidia_icd.x86_64.json + fi + fi + + if [ -e nvidia_layers.json ]; then + sed -E "s#(libGLX_nvidia)#$i/lib/\\1#" nvidia_layers.json > nvidia_layers.json.fixed + install -Dm644 nvidia_layers.json.fixed $i/share/vulkan/implicit_layer.d/nvidia_layers.json + fi + + # EGL + if [ "$useGLVND" = "1" ]; then + sed -E "s#(libEGL_nvidia)#$i/lib/\\1#" 10_nvidia.json > 10_nvidia.json.fixed + sed -E "s#(libnvidia-egl-wayland)#$i/lib/\\1#" 10_nvidia_wayland.json > 10_nvidia_wayland.json.fixed + + install -Dm644 10_nvidia.json.fixed $i/share/glvnd/egl_vendor.d/10_nvidia.json + install -Dm644 10_nvidia_wayland.json.fixed $i/share/egl/egl_external_platform.d/10_nvidia_wayland.json + + if [[ -f "15_nvidia_gbm.json" ]]; then + sed -E "s#(libnvidia-egl-gbm)#$i/lib/\\1#" 15_nvidia_gbm.json > 15_nvidia_gbm.json.fixed + install -Dm644 15_nvidia_gbm.json.fixed $i/share/egl/egl_external_platform.d/15_nvidia_gbm.json + + mkdir -p $i/lib/gbm + ln -s $i/lib/libnvidia-allocator.so $i/lib/gbm/nvidia-drm_gbm.so + fi + fi + + # Install libraries needed by Proton to support DLSS + if [ -e nvngx.dll ] && [ -e _nvngx.dll ]; then + install -Dm644 -t $i/lib/nvidia/wine/ nvngx.dll _nvngx.dll + fi + done + + if [ -n "$bin" ]; then + # Install the X drivers. + mkdir -p $bin/lib/xorg/modules + if [ -f libnvidia-wfb.so ]; then + cp -p libnvidia-wfb.* $bin/lib/xorg/modules/ + fi + mkdir -p $bin/lib/xorg/modules/drivers + cp -p nvidia_drv.so $bin/lib/xorg/modules/drivers + mkdir -p $bin/lib/xorg/modules/extensions + cp -p libglx*.so* $bin/lib/xorg/modules/extensions + + # Install the kernel module. + mkdir -p $bin/lib/modules/$kernelVersion/misc + for i in $(find ./kernel -name '*.ko'); do + nuke-refs $i + cp $i $bin/lib/modules/$kernelVersion/misc/ + done + + # Install application profiles. + if [ "$useProfiles" = "1" ]; then + mkdir -p $bin/share/nvidia + cp nvidia-application-profiles-*-rc $bin/share/nvidia/nvidia-application-profiles-rc + cp nvidia-application-profiles-*-key-documentation $bin/share/nvidia/nvidia-application-profiles-key-documentation + fi + fi + + if [ -n "$firmware" ]; then + # Install the GSP firmware + install -Dm644 firmware/gsp.bin $firmware/lib/firmware/nvidia/$version/gsp.bin + fi + + # All libs except GUI-only are installed now, so fixup them. + for libname in $(find "$out/lib/" $(test -n "$lib32" && echo "$lib32/lib/") $(test -n "$bin" && echo "$bin/lib/") -name '*.so.*') + do + # I'm lazy to differentiate needed libs per-library, as the closure is the same. + # Unfortunately --shrink-rpath would strip too much. + if [[ -n $lib32 && $libname == "$lib32/lib/"* ]]; then + patchelf --set-rpath "$lib32/lib:$libPath32" "$libname" + else + patchelf --set-rpath "$out/lib:$libPath" "$libname" + fi + + libname_short=`echo -n "$libname" | sed 's/so\..*/so/'` + + if [[ "$libname" != "$libname_short" ]]; then + ln -srnf "$libname" "$libname_short" + fi + + if [[ $libname_short =~ libEGL.so || $libname_short =~ libEGL_nvidia.so || $libname_short =~ libGLX.so || $libname_short =~ libGLX_nvidia.so ]]; then + major=0 + else + major=1 + fi + + if [[ "$libname" != "$libname_short.$major" ]]; then + ln -srnf "$libname" "$libname_short.$major" + fi + done + + if [ -n "$bin" ]; then + # Install /share files. + mkdir -p $bin/share/man/man1 + cp -p *.1.gz $bin/share/man/man1 + rm -f $bin/share/man/man1/{nvidia-xconfig,nvidia-settings,nvidia-persistenced}.1.gz + + # Install the programs. + for i in nvidia-cuda-mps-control nvidia-cuda-mps-server nvidia-smi nvidia-debugdump; do + if [ -e "$i" ]; then + install -Dm755 $i $bin/bin/$i + # unmodified binary backup for mounting in containers + install -Dm755 $i $bin/origBin/$i + patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + --set-rpath $out/lib:$libPath $bin/bin/$i + fi + done + # FIXME: needs PATH and other fixes + # install -Dm755 nvidia-bug-report.sh $bin/bin/nvidia-bug-report.sh + fi +} + +genericBuild diff --git a/pkgs/nvidia-x11/default.nix b/pkgs/nvidia-x11/default.nix new file mode 100644 index 0000000..c5be9fe --- /dev/null +++ b/pkgs/nvidia-x11/default.nix @@ -0,0 +1,29 @@ +{ lib, callPackage, fetchpatch, fetchurl, stdenv, pkgsi686Linux }: + +let + generic = args: + let + imported = import ./generic.nix args; + in + callPackage imported { + lib32 = (pkgsi686Linux.callPackage imported { + libsOnly = true; + kernel = null; + }).out; + }; + + kernel = callPackage # a hacky way of extracting parameters from callPackage + ({ kernel, libsOnly ? false }: if libsOnly then { } else kernel) + { }; +in +rec { + # Policy: shoot ourselves in the foot :) + unfucked = generic { + version = "515.65.01"; + sha256_64bit = "sha256-BJLdxbXmWqAMvHYujWaAIFyNCOEDtxMQh6FRJq7klek="; + openSha256 = "sha256-GCCDnaDsbXTmbCYZBCM3fpHmOSWti/DkBJwYrRGAMPI="; + settingsSha256 = "sha256-kBELMJCIWD9peZba14wfCoxsi3UXO3ehFYcVh4nvzVg="; + persistencedSha256 = "sha256-P8oT7g944HvNk2Ot/0T0sJM7dZs+e0d+KwbwRrmsuDY="; + patches = [ ../patches/nvidia-kernel-6.0.patch ]; + }; +} diff --git a/pkgs/nvidia-x11/generic.nix b/pkgs/nvidia-x11/generic.nix new file mode 100644 index 0000000..768d417 --- /dev/null +++ b/pkgs/nvidia-x11/generic.nix @@ -0,0 +1,128 @@ +{ version +, url ? null +, sha256_32bit ? null +, sha256_64bit +, openSha256 ? null +, settingsSha256 +, settingsVersion ? version +, persistencedSha256 +, persistencedVersion ? version +, useGLVND ? true +, useProfiles ? true +, preferGtk2 ? false +, settings32Bit ? false + +, prePatch ? "" +, patches ? [] +, broken ? false +}@args: + +{ lib, stdenv, callPackage, pkgs, pkgsi686Linux, fetchurl +, kernel ? null, perl, nukeReferences, which +, # Whether to build the libraries only (i.e. not the kernel module or + # nvidia-settings). Used to support 32-bit binaries on 64-bit + # Linux. + libsOnly ? false +, # don't include the bundled 32-bit libraries on 64-bit platforms, + # even if it’s in downloaded binary + disable32Bit ? false + # 32 bit libs only version of this package +, lib32 ? null + # Whether to extract the GSP firmware +, firmware ? openSha256 != null +}: + +with lib; + +assert !libsOnly -> kernel != null; +assert versionOlder version "391" -> sha256_32bit != null; + +let + nameSuffix = optionalString (!libsOnly) "-${kernel.version}"; + pkgSuffix = optionalString (versionOlder version "304") "-pkg0"; + i686bundled = versionAtLeast version "391" && !disable32Bit; + + libPathFor = pkgs: lib.makeLibraryPath (with pkgs; [ + libdrm xorg.libXext xorg.libX11 + xorg.libXv xorg.libXrandr xorg.libxcb zlib stdenv.cc.cc + wayland mesa libGL + ]); + + self = stdenv.mkDerivation { + name = "nvidia-x11-${version}${nameSuffix}"; + + builder = ./builder.sh; + + src = + if stdenv.hostPlatform.system == "x86_64-linux" then + fetchurl { + url = args.url or "https://us.download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}${pkgSuffix}.run"; + sha256 = sha256_64bit; + } + else if stdenv.hostPlatform.system == "i686-linux" then + fetchurl { + url = args.url or "https://download.nvidia.com/XFree86/Linux-x86/${version}/NVIDIA-Linux-x86-${version}${pkgSuffix}.run"; + sha256 = sha256_32bit; + } + else throw "nvidia-x11 does not support platform ${stdenv.hostPlatform.system}"; + + patches = if libsOnly then null else patches; + inherit prePatch; + inherit version useGLVND useProfiles; + inherit (stdenv.hostPlatform) system; + inherit i686bundled; + + outputs = [ "out" ] + ++ optional i686bundled "lib32" + ++ optional (!libsOnly) "bin" + ++ optional (!libsOnly && firmware) "firmware"; + outputDev = if libsOnly then null else "bin"; + + kernel = if libsOnly then null else kernel.dev; + kernelVersion = if libsOnly then null else kernel.modDirVersion; + + makeFlags = optionals (!libsOnly) (kernel.makeFlags ++ [ + "IGNORE_PREEMPT_RT_PRESENCE=1" + "NV_BUILD_SUPPORTS_HMM=1" + "SYSSRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source" + "SYSOUT=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + ]); + + hardeningDisable = [ "pic" "format" ]; + + dontStrip = true; + dontPatchELF = true; + + libPath = libPathFor pkgs; + libPath32 = optionalString i686bundled (libPathFor pkgsi686Linux); + + buildInputs = [ which ]; + nativeBuildInputs = [ perl nukeReferences ] + ++ optionals (!libsOnly) kernel.moduleBuildDependencies; + + disallowedReferences = optional (!libsOnly) [ kernel.dev ]; + + passthru = { + open = mapNullable (hash: callPackage (import ./open.nix self hash) { }) openSha256; + settings = (if settings32Bit then pkgsi686Linux.callPackage else callPackage) (import ./settings.nix self settingsSha256) { + withGtk2 = preferGtk2; + withGtk3 = !preferGtk2; + }; + persistenced = mapNullable (hash: callPackage (import ./persistenced.nix self hash) { }) persistencedSha256; + inherit persistencedVersion settingsVersion; + } // optionalAttrs (!i686bundled) { + inherit lib32; + }; + + meta = with lib; { + homepage = "https://www.nvidia.com/object/unix.html"; + description = "X.org driver and kernel module for NVIDIA graphics cards"; + license = licenses.unfreeRedistributable; + platforms = [ "x86_64-linux" ] ++ optionals (!i686bundled) [ "i686-linux" ]; + maintainers = with maintainers; [ jonringer ]; + priority = 4; # resolves collision with xorg-server's "lib/xorg/modules/extensions/libglx.so" + inherit broken; + }; + }; + +in self diff --git a/pkgs/nvidia-x11/open.nix b/pkgs/nvidia-x11/open.nix new file mode 100644 index 0000000..314f343 --- /dev/null +++ b/pkgs/nvidia-x11/open.nix @@ -0,0 +1,39 @@ +nvidia_x11: hash: +{ stdenv +, lib +, fetchFromGitHub +, kernel +}: + +stdenv.mkDerivation { + pname = "nvidia-open"; + version = "${kernel.version}-${nvidia_x11.version}"; + + src = fetchFromGitHub { + owner = "NVIDIA"; + repo = "open-gpu-kernel-modules"; + rev = nvidia_x11.version; + inherit hash; + }; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + makeFlags = kernel.makeFlags ++ [ + "SYSSRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source" + "SYSOUT=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "MODLIB=$(out)/lib/modules/${kernel.modDirVersion}" + ]; + + installTargets = [ "modules_install" ]; + enableParallelBuilding = true; + patches = [ ../patches/nvidia-kernel-open-6.0.patch ]; + + meta = with lib; { + description = "NVIDIA Linux Open GPU Kernel Module"; + homepage = "https://github.com/NVIDIA/open-gpu-kernel-modules"; + license = with licenses; [ gpl2Plus mit ]; + platforms = platforms.linux; + broken = kernel.kernelAtLeast "5.19"; + maintainers = with maintainers; [ nickcao ]; + }; +} diff --git a/pkgs/nvidia-x11/persistenced.nix b/pkgs/nvidia-x11/persistenced.nix new file mode 100644 index 0000000..5276dfd --- /dev/null +++ b/pkgs/nvidia-x11/persistenced.nix @@ -0,0 +1,48 @@ +nvidia_x11: sha256: + +{ stdenv +, lib +, fetchFromGitHub +, m4 +, libtirpc +}: + +stdenv.mkDerivation rec { + pname = "nvidia-persistenced"; + version = nvidia_x11.persistencedVersion; + + src = fetchFromGitHub { + owner = "NVIDIA"; + repo = "nvidia-persistenced"; + rev = nvidia_x11.persistencedVersion; + inherit sha256; + }; + + nativeBuildInputs = [ m4 ]; + buildInputs = [ libtirpc ]; + + inherit (nvidia_x11) makeFlags; + + installFlags = [ "PREFIX=$(out)" ]; + + postFixup = '' + # Save a copy of persistenced for mounting in containers + mkdir $out/origBin + cp $out/{bin,origBin}/nvidia-persistenced + patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 $out/origBin/nvidia-persistenced + + patchelf --set-rpath "$(patchelf --print-rpath $out/bin/nvidia-persistenced):${nvidia_x11}/lib" \ + $out/bin/nvidia-persistenced + ''; + + NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ]; + NIX_LDFLAGS = [ "-ltirpc" ]; + + meta = with lib; { + homepage = "https://www.nvidia.com/object/unix.html"; + description = "Settings application for NVIDIA graphics cards"; + license = licenses.unfreeRedistributable; + platforms = nvidia_x11.meta.platforms; + maintainers = with maintainers; [ abbradar ]; + }; +} diff --git a/pkgs/nvidia-x11/settings.nix b/pkgs/nvidia-x11/settings.nix new file mode 100644 index 0000000..884ccdd --- /dev/null +++ b/pkgs/nvidia-x11/settings.nix @@ -0,0 +1,116 @@ +nvidia_x11: sha256: + +{ stdenv, lib, fetchFromGitHub, fetchpatch, pkg-config, m4, jansson, gtk2, dbus, gtk3 +, libXv, libXrandr, libXext, libXxf86vm, libvdpau +, librsvg, wrapGAppsHook +, withGtk2 ? false, withGtk3 ? true +}: + +let + src = fetchFromGitHub { + owner = "NVIDIA"; + repo = "nvidia-settings"; + rev = nvidia_x11.settingsVersion; + inherit sha256; + }; + + libXNVCtrl = stdenv.mkDerivation { + pname = "libXNVCtrl"; + version = nvidia_x11.settingsVersion; + inherit src; + + buildInputs = [ libXrandr libXext ]; + + preBuild = '' + cd src/libXNVCtrl + ''; + + makeFlags = nvidia_x11.makeFlags ++ [ + "OUTPUTDIR=." # src/libXNVCtrl + ]; + + installPhase = '' + mkdir -p $out/lib + mkdir -p $out/include/NVCtrl + + cp libXNVCtrl.a $out/lib + cp NVCtrl.h $out/include/NVCtrl + cp NVCtrlLib.h $out/include/NVCtrl + ''; + }; + +in + +stdenv.mkDerivation { + pname = "nvidia-settings"; + version = nvidia_x11.settingsVersion; + + inherit src; + + patches = lib.optional (lib.versionOlder nvidia_x11.settingsVersion "440") + (fetchpatch { + # fixes "multiple definition of `VDPAUDeviceFunctions'" linking errors + url = "https://github.com/NVIDIA/nvidia-settings/commit/a7c1f5fce6303a643fadff7d85d59934bd0cf6b6.patch"; + hash = "sha256-ZwF3dRTYt/hO8ELg9weoz1U/XcU93qiJL2d1aq1Jlak="; + }); + + postPatch = lib.optionalString nvidia_x11.useProfiles '' + sed -i 's,/usr/share/nvidia/,${nvidia_x11.bin}/share/nvidia/,g' src/gtk+-2.x/ctkappprofile.c + ''; + + enableParallelBuilding = true; + makeFlags = nvidia_x11.makeFlags ++ [ "NV_USE_BUNDLED_LIBJANSSON=0" ]; + + preBuild = '' + if [ -e src/libXNVCtrl/libXNVCtrl.a ]; then + ( cd src/libXNVCtrl + make $makeFlags + ) + fi + ''; + + nativeBuildInputs = [ pkg-config m4 ]; + + buildInputs = [ jansson libXv libXrandr libXext libXxf86vm libvdpau nvidia_x11 gtk2 dbus ] + ++ lib.optionals withGtk3 [ gtk3 librsvg wrapGAppsHook ]; + + installFlags = [ "PREFIX=$(out)" ]; + + postInstall = '' + ${lib.optionalString (!withGtk2) '' + rm -f $out/lib/libnvidia-gtk2.so.* + ''} + ${lib.optionalString (!withGtk3) '' + rm -f $out/lib/libnvidia-gtk3.so.* + ''} + + # Install the desktop file and icon. + # The template has substitution variables intended to be replaced resulting + # in absolute paths. Because absolute paths break after the desktop file is + # copied by a desktop environment, make Exec and Icon be just a name. + sed -i doc/nvidia-settings.desktop \ + -e "s|^Exec=.*$|Exec=nvidia-settings|" \ + -e "s|^Icon=.*$|Icon=nvidia-settings|" \ + -e "s|__NVIDIA_SETTINGS_DESKTOP_CATEGORIES__|Settings|g" + install doc/nvidia-settings.desktop -D -t $out/share/applications/ + install doc/nvidia-settings.png -D -t $out/share/icons/hicolor/128x128/apps/ + ''; + + binaryName = if withGtk3 then ".nvidia-settings-wrapped" else "nvidia-settings"; + postFixup = '' + patchelf --set-rpath "$(patchelf --print-rpath $out/bin/$binaryName):$out/lib:${libXv}/lib" \ + $out/bin/$binaryName + ''; + + passthru = { + inherit libXNVCtrl; + }; + + meta = with lib; { + homepage = "https://www.nvidia.com/object/unix.html"; + description = "Settings application for NVIDIA graphics cards"; + license = licenses.unfreeRedistributable; + platforms = nvidia_x11.meta.platforms; + maintainers = with maintainers; [ abbradar ]; + }; +} diff --git a/patches/builder.sh b/pkgs/patches/builder.sh similarity index 100% rename from patches/builder.sh rename to pkgs/patches/builder.sh diff --git a/patches/nvidia-kernel-6.0.patch b/pkgs/patches/nvidia-kernel-6.0.patch similarity index 100% rename from patches/nvidia-kernel-6.0.patch rename to pkgs/patches/nvidia-kernel-6.0.patch diff --git a/patches/nvidia-kernel-open-6.0.patch b/pkgs/patches/nvidia-kernel-open-6.0.patch similarity index 100% rename from patches/nvidia-kernel-open-6.0.patch rename to pkgs/patches/nvidia-kernel-open-6.0.patch diff --git a/sys/nix/configuration.nix b/sys/nix/configuration.nix index 32e63f4..c8ad850 100644 --- a/sys/nix/configuration.nix +++ b/sys/nix/configuration.nix @@ -1,10 +1,9 @@ -{ - inputs, - config, - pkgs, - ... +{ inputs +, config +, pkgs +, ... }: { - disabledModules = ["services/hardware/udev.nix"]; + disabledModules = [ "services/hardware/udev.nix" ]; imports = [ ./hardware-configuration.nix ../generic.nix @@ -17,14 +16,15 @@ efi.canTouchEfiVariables = true; }; # kernelPackages = pkgs.linuxPackages_zen; - kernelPackages = let - linux_six_pkg = { - fetchurl, - buildLinux, - ... - } @ args: - buildLinux (args - // rec { + kernelPackages = + let + linux_six_pkg = + { fetchurl + , buildLinux + , ... + } @ args: + buildLinux (args + // rec { version = "6.0.0-rc1"; modDirVersion = version; src = fetchurl { @@ -32,14 +32,16 @@ sha256 = "b7273835119dced6d9b5f9378ea43da275968e1142c78c3e3e3484c57b0b7cdd"; }; - kernelPatches = []; + kernelPatches = [ ]; extraMeta.branch = "master"; } - // (args.argsOverride or {})); - linux_six = pkgs.callPackage linux_six_pkg {}; - in - pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linux_six); + // (args.argsOverride or { })); + linux_six = pkgs.callPackage linux_six_pkg { }; + in + pkgs.recurseIntoAttrs ((pkgs.linuxPackagesFor linux_six).extend (f: p: { + nvidia_is_evil = f.callPackage ../../pkgs/nvidia-x11 { }; + })); extraModprobeConfig = "options hid_apple fnmode=1"; }; @@ -57,7 +59,7 @@ ]; }; - environment.systemPackages = [pkgs.mySddmTheme]; + environment.systemPackages = [ pkgs.mySddmTheme ]; services = { gnome = { glib-networking.enable = true; @@ -90,7 +92,7 @@ windowManager.awesome.enable = true; - videoDrivers = ["nvidia"]; + videoDrivers = [ "nvidia" ]; }; pipewire = { @@ -138,18 +140,7 @@ hardware = { nvidia = { - package = let - p = config.boot.kernelPackages.nvidia_x11; - in - p.overrideAttrs - (old: { - patches = (old.patches or []) ++ [../../patches/nvidia-kernel-6.0.patch]; - }) - // { - open = p.open.overrideAttrs (old: { - patches = (old.patches or []) ++ [../../patches/nvidia-kernel-open-6.0.patch]; - }); - }; + package = config.boot.kernelPackages.nvidia_is_evil.unfucked; modesetting.enable = true; open = true; }; @@ -160,7 +151,7 @@ i2c.enable = true; }; - nix.settings.trusted-users = ["root" "marshall"]; + nix.settings.trusted-users = [ "root" "marshall" ]; xdg.portal.enable = true;