default.nix | ||
nixGL | ||
README.md |
This tool tries to solve the "OpenGL" problem on nix.
Motivation
You use Nix on any distribution, and any GL application installed fails with this error:
$ program
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
This library contains a wrapper which is able to launch GL application:
nixGL program
Installation / Usage
Clone this git repository:
git clone https://github.com/guibou/nixGL
(Optional) installation:
cd nixGL
nix-build
nix-env -i ./result
Usage:
nixGL program args
Limitations
The idea is really simple and should work reliably in most cases.
However there is still two configurations variables hardcoded in the wrapper.
ignored
: the list of all nix packages which may contain a wronglibGL.so
.systemLibs
: the list of where on the host system thelibGL.so
can be found.
Open a bug / pull request if this does not work on your distribution / driver.
It works with primus
, but there is some artifacts, mostly due to the next fundamental issue:
Fundamental issue
If your program libraries depends on different versions of the same library, for example, this dependency tree:
program
libFoo-1.2
libBar-1.4
libTurtle-1.6
libBar-1.2
One version or the other of libBar
may be used. In practice this does not happen a lot.
A similar issue will happen if your system libGL.so
depends on some library which are already in your program dependency list. Undefined behaviors can happen.
Subprocessus
It does not work with subprocessus, that's all ;(
Haskell Stack exec
You need to call stack --nix exec -- nixGL yourProgram
instead of nixGL stack exec -- yourProgram
du to the incompatibility with subprocessus. If nixGL
is not installed in your stack environment, you can use stack --nix --no-nix-pure exec ...
.