prohibit sha-less nixgl
parent
4a5981d050
commit
8b1ba34164
|
@ -8,8 +8,9 @@
|
||||||
(flake-utils.lib.eachDefaultSystem (system:
|
(flake-utils.lib.eachDefaultSystem (system:
|
||||||
let
|
let
|
||||||
isIntelX86Platform = system == "x86_64-linux";
|
isIntelX86Platform = system == "x86_64-linux";
|
||||||
|
nix_pkgs = import nixpkgs {inherit system;};
|
||||||
pkgs = import ./default.nix {
|
pkgs = import ./default.nix {
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nix_pkgs;
|
||||||
enable32bits = isIntelX86Platform;
|
enable32bits = isIntelX86Platform;
|
||||||
enableIntelX86Extensions = isIntelX86Platform;
|
enableIntelX86Extensions = isIntelX86Platform;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,22 +1,42 @@
|
||||||
{ # # Nvidia informations.
|
{
|
||||||
# Version of the system kernel module. Let it to null to enable auto-detection.
|
# # Nvidia informations.
|
||||||
nvidiaVersion ? null,
|
# Version of the system kernel module. Let it to null to enable auto-detection.
|
||||||
# Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
nvidiaVersion ? null
|
||||||
# will be more reproducible and more efficient.
|
, # Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
||||||
nvidiaHash ? null,
|
# will be more reproducible and more efficient.
|
||||||
# Alternatively, you can pass a path that points to a nvidia version file
|
nvidiaHash ? null
|
||||||
# and let nixGL extract the version from it. That file must be a copy of
|
, # Alternatively, you can pass a path that points to a nvidia version file
|
||||||
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
# and let nixGL extract the version from it. That file must be a copy of
|
||||||
# https://github.com/NixOS/nix/issues/3539 ).
|
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
||||||
nvidiaVersionFile ? null,
|
# https://github.com/NixOS/nix/issues/3539 ).
|
||||||
# Enable 32 bits driver
|
nvidiaVersionFile ? null
|
||||||
# This is one by default, you can switch it to off if you want to reduce a
|
, # Enable 32 bits driver
|
||||||
# bit the size of nixGL closure.
|
# This is one by default, you can switch it to off if you want to reduce a
|
||||||
enable32bits ? true
|
# bit the size of nixGL closure.
|
||||||
, writeTextFile, shellcheck, pcre, runCommand, linuxPackages
|
enable32bits ? true
|
||||||
, fetchurl, lib, runtimeShell, bumblebee, libglvnd, vulkan-validation-layers
|
, writeTextFile
|
||||||
, mesa, libvdpau-va-gl, intel-media-driver, vaapiIntel, pkgsi686Linux, driversi686Linux
|
, shellcheck
|
||||||
, zlib, libdrm, xorg, wayland, gcc }:
|
, pcre
|
||||||
|
, runCommand
|
||||||
|
, linuxPackages
|
||||||
|
, fetchurl
|
||||||
|
, lib
|
||||||
|
, runtimeShell
|
||||||
|
, bumblebee
|
||||||
|
, libglvnd
|
||||||
|
, vulkan-validation-layers
|
||||||
|
, mesa
|
||||||
|
, libvdpau-va-gl
|
||||||
|
, intel-media-driver
|
||||||
|
, vaapiIntel
|
||||||
|
, pkgsi686Linux
|
||||||
|
, driversi686Linux
|
||||||
|
, zlib
|
||||||
|
, libdrm
|
||||||
|
, xorg
|
||||||
|
, wayland
|
||||||
|
, gcc
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
writeExecutable = { name, text }:
|
writeExecutable = { name, text }:
|
||||||
|
@ -41,22 +61,24 @@ let
|
||||||
It contains the builder for different nvidia configuration, parametrized by
|
It contains the builder for different nvidia configuration, parametrized by
|
||||||
the version of the driver and sha256 sum of the driver installer file.
|
the version of the driver and sha256 sum of the driver installer file.
|
||||||
*/
|
*/
|
||||||
nvidiaPackages = { version, sha256 ? null }: rec {
|
nvidiaPackages = { version }:
|
||||||
|
let
|
||||||
nvidiaDrivers = (linuxPackages.nvidia_x11.override { }).overrideAttrs
|
nvidiaDrivers = (linuxPackages.nvidia_x11.override { }).overrideAttrs
|
||||||
(oldAttrs: rec {
|
(oldAttrs: {
|
||||||
pname = "nvidia";
|
pname = "nvidia";
|
||||||
name = "nvidia-x11-${version}-nixGL";
|
name = "nvidia-x11-${version}-nixGL";
|
||||||
inherit version;
|
inherit version;
|
||||||
src = let
|
src =
|
||||||
|
let
|
||||||
url =
|
url =
|
||||||
"https://download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}.run";
|
"https://download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}.run";
|
||||||
in if sha256 != null then
|
in
|
||||||
fetchurl { inherit url sha256; }
|
fetchurl { inherit url sha256; };
|
||||||
else
|
|
||||||
builtins.fetchurl url;
|
|
||||||
useGLVND = true;
|
useGLVND = true;
|
||||||
});
|
});
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit nvidiaDrivers;
|
||||||
nvidiaLibsOnly = nvidiaDrivers.override {
|
nvidiaLibsOnly = nvidiaDrivers.override {
|
||||||
libsOnly = true;
|
libsOnly = true;
|
||||||
kernel = null;
|
kernel = null;
|
||||||
|
@ -130,7 +152,8 @@ let
|
||||||
nixGLIntel = writeExecutable {
|
nixGLIntel = writeExecutable {
|
||||||
name = "nixGLIntel";
|
name = "nixGLIntel";
|
||||||
# add the 32 bits drivers if needed
|
# add the 32 bits drivers if needed
|
||||||
text = let
|
text =
|
||||||
|
let
|
||||||
mesa-drivers = [ mesa.drivers ]
|
mesa-drivers = [ mesa.drivers ]
|
||||||
++ lib.optional enable32bits pkgsi686Linux.mesa.drivers;
|
++ lib.optional enable32bits pkgsi686Linux.mesa.drivers;
|
||||||
intel-driver = [ intel-media-driver vaapiIntel ]
|
intel-driver = [ intel-media-driver vaapiIntel ]
|
||||||
|
@ -138,11 +161,14 @@ let
|
||||||
++ lib.optionals enable32bits [ /* pkgsi686Linux.intel-media-driver */ driversi686Linux.vaapiIntel ];
|
++ lib.optionals enable32bits [ /* pkgsi686Linux.intel-media-driver */ driversi686Linux.vaapiIntel ];
|
||||||
libvdpau = [ libvdpau-va-gl ]
|
libvdpau = [ libvdpau-va-gl ]
|
||||||
++ lib.optional enable32bits pkgsi686Linux.libvdpau-va-gl;
|
++ lib.optional enable32bits pkgsi686Linux.libvdpau-va-gl;
|
||||||
glxindirect = runCommand "mesa_glxindirect" { } (''
|
glxindirect = runCommand "mesa_glxindirect" { } (
|
||||||
|
''
|
||||||
mkdir -p $out/lib
|
mkdir -p $out/lib
|
||||||
ln -s ${mesa.drivers}/lib/libGLX_mesa.so.0 $out/lib/libGLX_indirect.so.0
|
ln -s ${mesa.drivers}/lib/libGLX_mesa.so.0 $out/lib/libGLX_indirect.so.0
|
||||||
'');
|
''
|
||||||
in ''
|
);
|
||||||
|
in
|
||||||
|
''
|
||||||
#!${runtimeShell}
|
#!${runtimeShell}
|
||||||
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" mesa-drivers}
|
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" mesa-drivers}
|
||||||
export LIBVA_DRIVERS_PATH=${lib.makeSearchPathOutput "out" "lib/dri" intel-driver}
|
export LIBVA_DRIVERS_PATH=${lib.makeSearchPathOutput "out" "lib/dri" intel-driver}
|
||||||
|
@ -158,7 +184,8 @@ let
|
||||||
|
|
||||||
nixVulkanIntel = writeExecutable {
|
nixVulkanIntel = writeExecutable {
|
||||||
name = "nixVulkanIntel";
|
name = "nixVulkanIntel";
|
||||||
text = let
|
text =
|
||||||
|
let
|
||||||
# generate a file with the listing of all the icd files
|
# generate a file with the listing of all the icd files
|
||||||
icd = runCommand "mesa_icd" { } (
|
icd = runCommand "mesa_icd" { } (
|
||||||
# 64 bits icd
|
# 64 bits icd
|
||||||
|
@ -170,8 +197,10 @@ let
|
||||||
ls ${pkgsi686Linux.mesa.drivers}/share/vulkan/icd.d/*.json >> f
|
ls ${pkgsi686Linux.mesa.drivers}/share/vulkan/icd.d/*.json >> f
|
||||||
''
|
''
|
||||||
# concat everything as a one line string with ":" as seperator
|
# concat everything as a one line string with ":" as seperator
|
||||||
+ ''cat f | xargs | sed "s/ /:/g" > $out'');
|
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
||||||
in ''
|
);
|
||||||
|
in
|
||||||
|
''
|
||||||
#!${runtimeShell}
|
#!${runtimeShell}
|
||||||
if [ -n "$LD_LIBRARY_PATH" ]; then
|
if [ -n "$LD_LIBRARY_PATH" ]; then
|
||||||
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
echo "Warning, nixVulkanIntel overwriting existing LD_LIBRARY_PATH" 1>&2
|
||||||
|
@ -201,8 +230,10 @@ let
|
||||||
cp ${nixGL}/bin/* "$out/bin/nixGL";
|
cp ${nixGL}/bin/* "$out/bin/nixGL";
|
||||||
'';
|
'';
|
||||||
|
|
||||||
auto = let
|
auto =
|
||||||
_nvidiaVersionFile = if nvidiaVersionFile != null then
|
let
|
||||||
|
_nvidiaVersionFile =
|
||||||
|
if nvidiaVersionFile != null then
|
||||||
nvidiaVersionFile
|
nvidiaVersionFile
|
||||||
else
|
else
|
||||||
# HACK: Get the version from /proc. It turns out that /proc is mounted
|
# HACK: Get the version from /proc. It turns out that /proc is mounted
|
||||||
|
@ -210,7 +241,8 @@ let
|
||||||
#
|
#
|
||||||
# builtins.readFile is not able to read /proc files. See
|
# builtins.readFile is not able to read /proc files. See
|
||||||
# https://github.com/NixOS/nix/issues/3539.
|
# https://github.com/NixOS/nix/issues/3539.
|
||||||
runCommand "impure-nvidia-version-file" {
|
runCommand "impure-nvidia-version-file"
|
||||||
|
{
|
||||||
# To avoid sharing the build result over time or between machine,
|
# To avoid sharing the build result over time or between machine,
|
||||||
# Add an impure parameter to force the rebuild on each access.
|
# Add an impure parameter to force the rebuild on each access.
|
||||||
# time = builtins.currentTime;
|
# time = builtins.currentTime;
|
||||||
|
@ -220,27 +252,33 @@ let
|
||||||
|
|
||||||
# The nvidia version. Either fixed by the `nvidiaVersion` argument, or
|
# The nvidia version. Either fixed by the `nvidiaVersion` argument, or
|
||||||
# auto-detected. Auto-detection is impure.
|
# auto-detected. Auto-detection is impure.
|
||||||
nvidiaVersionAuto = if nvidiaVersion != null then
|
nvidiaVersionAuto =
|
||||||
|
if nvidiaVersion != null then
|
||||||
nvidiaVersion
|
nvidiaVersion
|
||||||
else
|
else
|
||||||
# Get if from the nvidiaVersionFile
|
# Get if from the nvidiaVersionFile
|
||||||
let
|
let
|
||||||
data = builtins.readFile _nvidiaVersionFile;
|
data = builtins.readFile _nvidiaVersionFile;
|
||||||
versionMatch = builtins.match ".*Module ([0-9.]+) .*" data;
|
versionMatch = builtins.match ".*Module ([0-9.]+) .*" data;
|
||||||
in if versionMatch != null then builtins.head versionMatch else null;
|
in
|
||||||
|
if versionMatch != null then builtins.head versionMatch else null;
|
||||||
|
|
||||||
autoNvidia = nvidiaPackages {version = nvidiaVersionAuto; };
|
autoNvidia = nvidiaPackages { version = nvidiaVersionAuto; };
|
||||||
in rec {
|
in
|
||||||
|
rec {
|
||||||
# The output derivation contains nixGL which point either to
|
# The output derivation contains nixGL which point either to
|
||||||
# nixGLNvidia or nixGLIntel using an heuristic.
|
# nixGLNvidia or nixGLIntel using an heuristic.
|
||||||
nixGLDefault = if nvidiaVersionAuto != null then
|
nixGLDefault =
|
||||||
|
if nvidiaVersionAuto != null then
|
||||||
nixGLCommon autoNvidia.nixGLNvidia
|
nixGLCommon autoNvidia.nixGLNvidia
|
||||||
else
|
else
|
||||||
nixGLCommon nixGLIntel;
|
nixGLCommon nixGLIntel;
|
||||||
} // autoNvidia;
|
} // autoNvidia;
|
||||||
};
|
};
|
||||||
in top // (if nvidiaVersion != null then
|
in
|
||||||
top.nvidiaPackages {
|
top // (if nvidiaVersion != null then
|
||||||
|
top.nvidiaPackages
|
||||||
|
{
|
||||||
version = nvidiaVersion;
|
version = nvidiaVersion;
|
||||||
sha256 = nvidiaHash;
|
sha256 = nvidiaHash;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
flake_input@{ kpcli-py, nixgl, rust-overlay, neovim-nightly-overlay, ... }: [
|
flake_input@{ kpcli-py, nixgl, rust-overlay, neovim-nightly-overlay, ... }: [
|
||||||
|
|
||||||
|
# TODO: this is quite harmful to add globally. nixGL is built not to be pure
|
||||||
nixgl.overlays.default
|
nixgl.overlays.default
|
||||||
|
|
||||||
rust-overlay.overlays.default
|
rust-overlay.overlays.default
|
||||||
|
|
Loading…
Reference in New Issue