Closed karolchmist closed 4 years ago
It might be the case that it does not find your opengl driver. The same version works on my system (TM).
$ alacritty --version
alacritty 0.4.1
First of all verify that alacritty finds your opengl driver.
╭─[~]
╰─ % strace -f -o /tmp/alacritty alacritty
╭─[~]
╰─ % grep opengl /tmp/alacritty
12661 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
12661 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls/haswell/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls/haswell", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/haswell/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/haswell", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/dri/tls/i965_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/dri/i965_dri.so", O_RDONLY|O_CLOEXEC) = 8
My result, but I'm not sure how to interpret it...
19732 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls/haswell/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls/haswell", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/haswell/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/haswell", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
Oh, and I have a previous version of alacritty:
alacritty --version
alacritty 0.4.0
It should load at least one graphics driver from /run/opengl-driver/lib/dri
(i915_dri.so
in my case). It does not do so on your machine. I am not an expert on graphic cards but somebody else might able to help you if you also share your details on your graphic card (Nvidia, Intel integrated graphic card etc).
Ok, thanks @Mic92 ! I have Intel HD Graphics 530, but not sure which driver corresponds to it... Will rollback to the previous generation of Nixos and check.
BTW, can't run those commands either:
➜ ~ glxinfo ~
name of display: :0.0
Error: couldn't find RGB GLX visual or fbconfig
➜ ~ glxgears ~
Error: couldn't get an RGB, Double-buffered visual
Do you have this set? https://github.com/Mic92/dotfiles/blob/master/nixos/modules/intel-graphics.nix#L5 We also have https://github.com/NixOS/nixos-hardware/ which might help getting opengl to work for some devices.
My hardware-configuration.nix
:
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "sd_mod" "rtsx_pci_sdmmc" ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
boot.blacklistedKernelModules = ["mei_wdt"];
I rollbacked to previous working NixOS generation and I have this:
➜ ~ glxinfo | grep -i vendor ~
server glx vendor string: SGI
client glx vendor string: Mesa Project and SGI
Vendor: Intel Open Source Technology Center (0x8086)
OpenGL vendor string: Intel Open Source Technology Center
strace for alacritty (working now):
2610 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 8
2610 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 8
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/tls/haswell/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/tls/haswell", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/tls", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/haswell/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/haswell", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 stat("/run/opengl-driver/lib/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 8
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/dri/tls/i965_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610 openat(AT_FDCWD, "/run/opengl-driver/lib/dri/i965_dri.so", O_RDONLY|O_CLOEXEC) = 9
2617 write(1, " alacritty_opengl.log\t\t\t drivers"..., 50 <unfinished ...>
2618 read(13, " alacritty_opengl.log\t\t\t drivers"..., 65536) = 90
Seems like i965_dri.so
is being used. I have this in /run/opengl-driver/lib/dri/
-r-xr-xr-x 6 root root 13968872 Jan 1 1970 i915_dri.so*
-r-xr-xr-x 6 root root 13968872 Jan 1 1970 i965_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 kms_swrast_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 nouveau_dri.so*
-r-xr-xr-x 4 root root 10185608 Jan 1 1970 nouveau_drv_video.so*
-r-xr-xr-x 6 root root 13968872 Jan 1 1970 nouveau_vieux_dri.so*
-r-xr-xr-x 6 root root 13968872 Jan 1 1970 r200_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 r300_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 r600_dri.so*
-r-xr-xr-x 4 root root 10185608 Jan 1 1970 r600_drv_video.so*
-r-xr-xr-x 6 root root 13968872 Jan 1 1970 radeon_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 radeonsi_dri.so*
-r-xr-xr-x 4 root root 10185608 Jan 1 1970 radeonsi_drv_video.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 swrast_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 virtio_gpu_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan 1 1970 vmwgfx_dri.so*
So I'll add i965
to kernelModules
and see if it works.
I tried with kernelModule i965
, and pkgs.vaapiIntel
to opengl, still the same. I'll try more stuff this weekend, thanks @Mic92 for your help!
I'm getting the same error but I've got an AMD RS880.
But on my current generation (nixpkgs e2b4abe3c8f) it tries all of these:
openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
But on my previous nixos generation (nixpkgs 8130f3c1c2b) using alacritty 0.4.1 it is working properly.
openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/dri/tls/r600_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/dri/r600_dri.so", O_RDONLY|O_CLOEXEC) = 8
I experienced a similar problem with glxinfo
, glxgears
, and steam
installed by nix-env
. Forcibly upgrading them by nix-env -u ... --always
fixed the issue.
It seems that the problem was caused by the application and its dependencies linking to an older version of glibc than what /run/opengl-driver/lib/libGLX_mesa.so.0
links to, though I'm not entirely sure how all of this works.
$ objdump -x glxgears-fail | grep glibc
RUNPATH [...]:/nix/store/qn76sklvyalzw9ilnxz6sh0020gl2qn6-glibc-2.27/lib
$ objdump -x glxgears-ok | grep glibc
RUNPATH [...]:/nix/store/8g1v3sf0xvf044sz1b4kcrg1i86z9bh7-glibc-2.30/lib
objdump -x /run/opengl-driver/lib/libGLX_mesa.so.0 | grep glibc
RUNPATH [...]:/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30/lib:[...]
When LD_DEBUG=files
is given, glxgears-fail
produces the following output:
$ env LD_DEBUG=files ./glxgears-fail
[...]
3828: file=libGLX_mesa.so.0 [0]; dynamically loaded by /nix/store/ym4x1sv39xgsc4hvhdnmavbwy4yg2wsc-libglvnd-1.2.0/lib/libGLX.so.0 [0]
3828: file=libGLX_mesa.so.0 [0]; generating link map
3828: dynamic: 0x00007f7339a124c0 base: 0x00007f7339998000 size: 0x00000000000846e8
3828: entry: 0x00007f73399b4ee0 phdr: 0x00007f7339a15000 phnum: 10
[...]
3828: /nix/store/qn76sklvyalzw9ilnxz6sh0020gl2qn6-glibc-2.27/lib/libm.so.6: error: version lookup error: version `GLIBC_2.29' not found (required by /run/opengl-driver/lib/libGLX_mesa.so.0) (fatal)
3828:
3828: file=/run/opengl-driver/lib/libGLX_mesa.so.0 [0]; destroying link map
I confirm that nix-env -u ... --always
fixes the problem.
There is a thread on discourse that explains the reasons behind this kind of problems with libGL: https://discourse.nixos.org/t/libgl-undefined-symbol-glxgl-core-functions/512/6
I'll close this issue as there is apparently no solution.
I also recommend using tools like home-manager over nix-env
to maintain packages. This usually avoids having to remember updating packages.
I have just started getting this error on NixOS VM after yesterday's update with the nixos-unstable.
Seeing this when using a non-NixOs system with home-manager. How did you solve it?
@tartavull I didn't want to install yet another terminal so I temporarily switched to Emacs' vterm. At some point in the last few weeks alacritty from the unstable channel started working again.
I'm on unstable and it doesn't work for me :(
I'm seeing this when attempting to install alacritty via home-manager on Ubuntu (the exact same home-manager config on a NixOS machine works flawlessly).
NixGL does allow things to work, but it'd be nice to get a native solution.
I tried with nixgl and couldn't solve it. Same problem, home-manager on Ubuntu. Could you detail how you solved it when you have a moment ? (I tried re-installing the gpu (nvidia) drivers and I've verifed that the driver works properly).
I tried with nixgl and couldn't solve it. Same problem, home-manager on Ubuntu. Could you detail how you solved it when you have a moment ? (I tried re-installing the gpu (nvidia) drivers and I've verifed that the driver works properly).
I just went through this, so here is how I solved it Add it to your inputs Add as an overlay Install it in packages
After that it works with nixGL alacritty
. I also updated the app menu in KDE so that it starts it that way as well.
Hope that helps.
This seems to work for sway
and fixing this at the launcher level probably also fixes a lot of other packages, too...
set $term nixGLIntel alacritty
set $menu 'dmenu_path | wofi --show dmenu -i | xargs swaymsg exec nixGLIntel --'
Describe the bug
Since last update on
nixos-unstable
, I can't launch Alacritty. I get this error:cc @filalex77 @Mic92
To Reproduce Steps to reproduce the behavior:
alacritty
Metadata
"x86_64-linux"
Linux 5.5.4, NixOS, 20.09.git.e2b4abe3c8f (Nightingale)
yes
yes
nix-env (Nix) 2.3.3
""
""
/etc/nixos/nixpkgs