Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b93246bced | ||
![]() |
68e1819b88 | ||
![]() |
7dcd280d44 | ||
![]() |
210c6a8a54 | ||
![]() |
6fab1faca5 | ||
![]() |
ab5c39d32e | ||
![]() |
e7039bfb2c | ||
![]() |
410cd5b482 | ||
![]() |
339c6c5795 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/result
|
|
@ -47,7 +47,6 @@ configuration.
|
||||||
- `nix-env -f ./ -iA nixGLIntel`: Mesa OpenGL implementation (intel, amd, nouveau, ...).
|
- `nix-env -f ./ -iA nixGLIntel`: Mesa OpenGL implementation (intel, amd, nouveau, ...).
|
||||||
- `nix-env -f ./ -iA nixGLNvidiaBumblebee`: Proprietary Nvidia driver on hybrid hardware.
|
- `nix-env -f ./ -iA nixGLNvidiaBumblebee`: Proprietary Nvidia driver on hybrid hardware.
|
||||||
- `nix-env -f ./ -iA nixGLNvidia`: Proprietary Nvidia driver.
|
- `nix-env -f ./ -iA nixGLNvidia`: Proprietary Nvidia driver.
|
||||||
- `nix-env -f ./ -iA nixGLAmdGPU`: Free AMDGpu driver.
|
|
||||||
- `nix-env -f ./ -iA nixGLDefault`: Tries to auto-detect and install Nvidia,
|
- `nix-env -f ./ -iA nixGLDefault`: Tries to auto-detect and install Nvidia,
|
||||||
if not, fallback to mesa.
|
if not, fallback to mesa.
|
||||||
|
|
||||||
|
@ -102,7 +101,7 @@ After installing `nixVulkanIntel`.
|
||||||
```bash
|
```bash
|
||||||
$ sudo apt install mesa-vulkan-drivers
|
$ sudo apt install mesa-vulkan-drivers
|
||||||
...
|
...
|
||||||
$ nixVulkanIntel $(nix-build '<nixpkgs>' --no-out-link -A vulkan-loader)/bin/vulkaninfo | grep VkPhysicalDeviceProperties -A 7
|
$ nixVulkanIntel $(nix-build '<nixpkgs>' --no-out-link -A vulkan-tools)/bin/vulkaninfo | grep VkPhysicalDeviceProperties -A 7
|
||||||
VkPhysicalDeviceProperties:
|
VkPhysicalDeviceProperties:
|
||||||
===========================
|
===========================
|
||||||
apiVersion = 0x400036 (1.0.54)
|
apiVersion = 0x400036 (1.0.54)
|
||||||
|
|
8
Test.hs
8
Test.hs
|
@ -95,14 +95,6 @@ main = do
|
||||||
describe "Vulkan" $ do
|
describe "Vulkan" $ do
|
||||||
checkVulkan "Mesa" "nixVulkanIntel"
|
checkVulkan "Mesa" "nixVulkanIntel"
|
||||||
|
|
||||||
describe "AMD GPU" $ do
|
|
||||||
describe "OpenGL" $ do
|
|
||||||
-- TODO: fill the right name for glxinfo data
|
|
||||||
checkOpenGL "AMD" "nixGLAmdGPU"
|
|
||||||
xdescribe "Vulkan" $ do
|
|
||||||
-- Not tested yet
|
|
||||||
checkVulkan "AMD" "nixVulkanAmdGPU"
|
|
||||||
|
|
||||||
describe "Nvidia - Bumblebee" $ do
|
describe "Nvidia - Bumblebee" $ do
|
||||||
describe "OpenGL" $ do
|
describe "OpenGL" $ do
|
||||||
checkOpenGL "NVIDIA" "nixGLNvidiaBumblebee"
|
checkOpenGL "NVIDIA" "nixGLNvidiaBumblebee"
|
||||||
|
|
29
default.nix
29
default.nix
|
@ -1,29 +0,0 @@
|
||||||
{ ## Nvidia informations.
|
|
||||||
# Version of the system kernel module. Let it to null to enable auto-detection.
|
|
||||||
nvidiaVersion ? null,
|
|
||||||
# Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
|
||||||
# will be more reproducible and more efficient.
|
|
||||||
nvidiaHash ? null,
|
|
||||||
# Alternatively, you can pass a path that points to a nvidia version file
|
|
||||||
# and let nixGL extract the version from it. That file must be a copy of
|
|
||||||
# /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
|
||||||
# https://github.com/NixOS/nix/issues/3539 ).
|
|
||||||
nvidiaVersionFile ? null,
|
|
||||||
# Enable 32 bits driver
|
|
||||||
# This is one by default, you can switch it to off if you want to reduce a
|
|
||||||
# bit the size of nixGL closure.
|
|
||||||
enable32bits ? true,
|
|
||||||
# Make sure to enable config.allowUnfree to the instance of nixpkgs to be
|
|
||||||
# able to access the nvidia drivers.
|
|
||||||
pkgs ? import <nixpkgs> {
|
|
||||||
config = { allowUnfree = true; };
|
|
||||||
}
|
|
||||||
}:
|
|
||||||
pkgs.callPackage ./nixGL.nix {
|
|
||||||
inherit
|
|
||||||
nvidiaVersion
|
|
||||||
nvidiaVersionFile
|
|
||||||
nvidiaHash
|
|
||||||
enable32bits
|
|
||||||
;
|
|
||||||
}
|
|
72
flake.lock
Normal file
72
flake.lock
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"lowdown-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1598695561,
|
||||||
|
"narHash": "sha256-gyH/5j+h/nWw0W8AcR2WKvNBUsiQ7QuxqSJNXAwV+8E=",
|
||||||
|
"owner": "kristapsdz",
|
||||||
|
"repo": "lowdown",
|
||||||
|
"rev": "1705b4a26fbf065d9574dce47a94e8c7c79e052f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kristapsdz",
|
||||||
|
"repo": "lowdown",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix": {
|
||||||
|
"inputs": {
|
||||||
|
"lowdown-src": "lowdown-src",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1604964115,
|
||||||
|
"narHash": "sha256-ANcswniHS4eYeMNyCGdiG3z0M35vEyvWoCsdLnTvObA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nix",
|
||||||
|
"rev": "0ed7c957bed18d963df65d55f0c0ffc79dee656d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nix",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1602702596,
|
||||||
|
"narHash": "sha256-fqJ4UgOb4ZUnCDIapDb4gCrtAah5Rnr2/At3IzMitig=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "ad0d20345219790533ebe06571f82ed6b034db31",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"ref": "nixos-20.09-small",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"narHash": "sha256-wLDweKqbmufa2wonCKBf4Wfl8I0eS1CGS7WdR5tPHKo=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/60330b60655b3fa3a18624bdd7069855bb37af99.tar.gz"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/60330b60655b3fa3a18624bdd7069855bb37af99.tar.gz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nix": "nix",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
49
flake.nix
Normal file
49
flake.nix
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
description = "";
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = https://github.com/NixOS/nixpkgs/archive/60330b60655b3fa3a18624bdd7069855bb37af99.tar.gz;
|
||||||
|
};
|
||||||
|
outputs = { nixpkgs, nix, self, ... }@inputs : {
|
||||||
|
defaultPackage.x86_64-linux =
|
||||||
|
let pkgs = import nixpkgs { system = "x86_64-linux"; config = { allowUnfree = true; }; }; in
|
||||||
|
(pkgs.callPackage ./nixGL.nix {
|
||||||
|
nvidiaVersionFile = null;
|
||||||
|
nvidiaVersion = "455.28"; nvidiaHash = "03ysf61qrb272yqkn7bhn9d65lcfhmqc2c0dbh5prp5f2ndlkqg4";
|
||||||
|
# nvidiaVersion = "455.23.04"; nvidiaHash = "0rvbb9s4ijb0gyiscd93chbgim4lqmy4ksfy15b4abf078qk7q4g";
|
||||||
|
# …
|
||||||
|
enable32bits = true;
|
||||||
|
}).nixGLIntel; # nixGLNvidia;
|
||||||
|
# nixpkgs.stdenv.mkDerivation {
|
||||||
|
# builsInputs = [];
|
||||||
|
# { ## Nvidia informations.
|
||||||
|
# # Version of the system kernel module. Let it to null to enable auto-detection.
|
||||||
|
# nvidiaVersion ? null,
|
||||||
|
# # Hash of the Nvidia driver .run file. null is fine, but fixing a value here
|
||||||
|
# # will be more reproducible and more efficient.
|
||||||
|
# nvidiaHash ? null,
|
||||||
|
# # Alternatively, you can pass a path that points to a nvidia version file
|
||||||
|
# # and let nixGL extract the version from it. That file must be a copy of
|
||||||
|
# # /proc/driver/nvidia/version. Nix doesn't like zero-sized files (see
|
||||||
|
# # https://github.com/NixOS/nix/issues/3539 ).
|
||||||
|
# nvidiaVersionFile ? null,
|
||||||
|
# # Enable 32 bits driver
|
||||||
|
# # This is one by default, you can switch it to off if you want to reduce a
|
||||||
|
# # bit the size of nixGL closure.
|
||||||
|
# enable32bits ? true,
|
||||||
|
# # Make sure to enable config.allowUnfree to the instance of nixpkgs to be
|
||||||
|
# # able to access the nvidia drivers.
|
||||||
|
# pkgs ? import <nixpkgs> {
|
||||||
|
# config = { allowUnfree = true; };
|
||||||
|
# }
|
||||||
|
# }:
|
||||||
|
# pkgs.callPackage ./nixGL.nix {
|
||||||
|
# inherit
|
||||||
|
# nvidiaVersion
|
||||||
|
# nvidiaVersionFile
|
||||||
|
# nvidiaHash
|
||||||
|
# enable32bits
|
||||||
|
# ;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
45
nixGL.nix
45
nixGL.nix
|
@ -14,7 +14,7 @@
|
||||||
# bit the size of nixGL closure.
|
# bit the size of nixGL closure.
|
||||||
enable32bits ? true,
|
enable32bits ? true,
|
||||||
writeTextFile, shellcheck, pcre, runCommand, linuxPackages, fetchurl, lib,
|
writeTextFile, shellcheck, pcre, runCommand, linuxPackages, fetchurl, lib,
|
||||||
bumblebee, libglvnd, vulkan-validation-layers, mesa_drivers,
|
runtimeShell, bumblebee, libglvnd, vulkan-validation-layers, mesa_drivers,
|
||||||
pkgsi686Linux,zlib, libdrm, xorg, wayland, gcc
|
pkgsi686Linux,zlib, libdrm, xorg, wayland, gcc
|
||||||
}:
|
}:
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ in
|
||||||
nixGLNvidiaBumblebee = addNvidiaVersion (writeExecutable {
|
nixGLNvidiaBumblebee = addNvidiaVersion (writeExecutable {
|
||||||
name = "nixGLNvidiaBumblebee";
|
name = "nixGLNvidiaBumblebee";
|
||||||
text = ''
|
text = ''
|
||||||
#!/usr/bin/env sh
|
#!${runtimeShell}
|
||||||
export LD_LIBRARY_PATH=${lib.makeLibraryPath [nvidia]}:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${lib.makeLibraryPath [nvidia]}:$LD_LIBRARY_PATH
|
||||||
${bumblebee.override {nvidia_x11 = nvidia; nvidia_x11_i686 = nvidia.lib32;}}/bin/optirun --ldpath ${lib.makeLibraryPath ([libglvnd nvidia] ++ lib.optionals enable32bits [nvidia.lib32 pkgsi686Linux.libglvnd])} "$@"
|
${bumblebee.override {nvidia_x11 = nvidia; nvidia_x11_i686 = nvidia.lib32;}}/bin/optirun --ldpath ${lib.makeLibraryPath ([libglvnd nvidia] ++ lib.optionals enable32bits [nvidia.lib32 pkgsi686Linux.libglvnd])} "$@"
|
||||||
'';
|
'';
|
||||||
|
@ -107,15 +107,15 @@ in
|
||||||
nixNvidiaWrapper = api: addNvidiaVersion (writeExecutable {
|
nixNvidiaWrapper = api: addNvidiaVersion (writeExecutable {
|
||||||
name = "nix${api}Nvidia";
|
name = "nix${api}Nvidia";
|
||||||
text = ''
|
text = ''
|
||||||
#!/usr/bin/env sh
|
#!${runtimeShell}
|
||||||
${lib.optionalString (api == "Vulkan") ''export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d''}
|
${lib.optionalString (api == "Vulkan") ''export VK_LAYER_PATH=${vulkan-validation-layers}/share/vulkan/explicit_layer.d''}
|
||||||
|
|
||||||
${lib.optionalString (api == "Vulkan") ''export VK_ICD_FILENAMES=${nvidia}/share/vulkan/icd.d/nvidia.json${lib.optionalString enable32bits ":${nvidia.lib32}/share/vulkan/icd.d/nvidia.json"}:$VK_ICD_FILENAMES''}
|
${lib.optionalString (api == "Vulkan") ''export VK_ICD_FILENAMES=${nvidiaLibsOnly}/share/vulkan/icd.d/nvidia.json${lib.optionalString enable32bits ":${nvidiaLibsOnly.lib32}/share/vulkan/icd.d/nvidia.json"}:$VK_ICD_FILENAMES''}
|
||||||
export LD_LIBRARY_PATH=${lib.makeLibraryPath ([
|
export LD_LIBRARY_PATH=${lib.makeLibraryPath ([
|
||||||
libglvnd
|
libglvnd
|
||||||
nvidiaLibsOnly
|
nvidiaLibsOnly
|
||||||
] ++ lib.optional (api == "Vulkan") vulkan-validation-layers
|
] ++ lib.optional (api == "Vulkan") vulkan-validation-layers
|
||||||
++ lib.optionals enable32bits [nvidia.lib32 pkgsi686Linux.libglvnd])
|
++ lib.optionals enable32bits [nvidiaLibsOnly.lib32 pkgsi686Linux.libglvnd])
|
||||||
}:''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
}:''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
||||||
"$@"
|
"$@"
|
||||||
'';
|
'';
|
||||||
|
@ -133,7 +133,7 @@ in
|
||||||
text = let
|
text = let
|
||||||
drivers = [mesa_drivers] ++ lib.optional enable32bits pkgsi686Linux.mesa_drivers;
|
drivers = [mesa_drivers] ++ lib.optional enable32bits pkgsi686Linux.mesa_drivers;
|
||||||
in ''
|
in ''
|
||||||
#!/usr/bin/env sh
|
#!${runtimeShell}
|
||||||
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" drivers}
|
export LIBGL_DRIVERS_PATH=${lib.makeSearchPathOutput "lib" "lib/dri" drivers}
|
||||||
export LD_LIBRARY_PATH=${
|
export LD_LIBRARY_PATH=${
|
||||||
lib.makeLibraryPath drivers
|
lib.makeLibraryPath drivers
|
||||||
|
@ -158,7 +158,7 @@ in
|
||||||
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
+ ''cat f | xargs | sed "s/ /:/g" > $out''
|
||||||
);
|
);
|
||||||
in ''
|
in ''
|
||||||
#!/usr/bin/env bash
|
#!${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
|
||||||
fi
|
fi
|
||||||
|
@ -178,30 +178,15 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# Support for amdgpu
|
|
||||||
nixGLAmdGPU = writeExecutable {
|
|
||||||
name = "nixGLAmdGPU";
|
|
||||||
# add the 32 bits drivers if needed
|
|
||||||
text = let
|
|
||||||
drivers = [xorg.xf86videoamdgpu] ++ lib.optional enable32bits pkgsi686Linux.xorg.xf86videoamdgpu;
|
|
||||||
in ''
|
|
||||||
#!/usr/bin/env sh
|
|
||||||
export LD_LIBRARY_PATH=${
|
|
||||||
lib.makeLibraryPath drivers
|
|
||||||
}:$LD_LIBRARY_PATH
|
|
||||||
"$@"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
nixGLCommon = nixGL:
|
nixGLCommon = nixGL:
|
||||||
runCommand "nixGLCommon" {
|
runCommand "nixGLCommon" {
|
||||||
buildInuts = [nixGL];
|
buildInuts = [nixGL];
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
mkdir -p "$out/bin"
|
mkdir -p "$out/bin"
|
||||||
# star because nixGLNvidia... have version prefixed name
|
# star because nixGLNvidia... have version prefixed name
|
||||||
cp ${nixGL}/bin/* "$out/bin/nixGL";
|
cp ${nixGL}/bin/* "$out/bin/nixGL";
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# 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.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user