Develop nvidia nvml on nixos

Hi, I am relatively new to nixos. I want to setup a python environment where I can build and run gwe(Roberto Leinardi / GreenWithEnvy · GitLab).

This is my current shell.nix:

{ pkgs ? import <nixpkgs> {} }:
let
  mach-nix = import (builtins.fetchGit {
    url = "https://github.com/DavHau/mach-nix";
    ref = "refs/tags/3.5.0";
  }) {
    mkPython = {  # replace with mkPythonShell if shell is wanted
      requirements = builtins.readFile ./requirements.txt;
    };
  };
in
pkgs.mkShell {
  packages = with pkgs; [
    (python3.withPackages (pypkgs: with pypkgs; [
      injector
      matplotlib
      peewee
      pynvml
      pygobject3
      xlib
      pyxdg
      requests
      rx
      gtk3
      reactivex
      py3nvml
      ]))
    glib
    libgee
    #pantheon
#     lib
    wrapGAppsHook
    pkg-config
    meson
    ninja
    cmake
    gobject-introspection
    desktop-file-utils
    gtk3
    libdazzle
    libnotify
    linuxPackages.nvidia_x11
    appstream-glib
  ];
  nativeBuildInputs = [
    pkgs.cudatoolkit_11
    pkgs.cudaPackages.cudnn
  ];
  shellHook = ''
    # Fix missing site-packages like gi
    site_packages=$(python3 -c "import site; print(site.getsitepackages()[0])")
    export PYTHONPATH="$site_packages"
    
    # shit I tried that doesn't work:!!!!!!!!!!!!!
    # Set up NVIDIA environment variables
    export PATH=${pkgs.linuxPackages.nvidia_x11}/bin:$PATH
    export LD_LIBRARY_PATH=${pkgs.linuxPackages.nvidia_x11}/lib:$LD_LIBRARY_PATH
    export LIBRARY_PATH=${pkgs.linuxPackages.nvidia_x11}/lib:$LIBRARY_PATH
    export CPATH=${pkgs.linuxPackages.nvidia_x11}/include:$CPATH

    # Ensure that the NVML library can be found
    export LD_LIBRARY_PATH=${pkgs.linuxPackages.nvidia_x11}/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=${pkgs.libGL}/lib:${pkgs.libGLU}/lib:${pkgs.freeglut}/lib:${pkgs.xorg.libX11}/lib:${pkgs.stdenv.cc.cc.lib}/lib:${pkgs.cudatoolkit_11}/lib:${pkgs.cudaPackages.cudnn}/lib:${pkgs.cudatoolkit_11.lib}/lib:$LD_LIBRARY_PATH
  '';
}

However I can’t get the nvml driver running within a nix-shell it seems.
How would I do that?

Or rather how can I setup a development environment where it works without a nix-shell?

1 Like

OK the issue was that I was using the unstable kernel because of my Ryzer keyboard. (Which is only supported in unstable).

To fix the kernel difference in versions I needed to use unstable nvidia packages in the nix shell:

{ pkgs ? import <nixpkgs> { config.allowUnfree = true; } }:
let
  mach-nix = import (builtins.fetchGit {
    url = "https://github.com/DavHau/mach-nix";
    ref = "refs/tags/3.5.0";
  }) {
    mkPython = {  # replace with mkPythonShell if shell is wanted
      requirements = builtins.readFile ./requirements.txt;
    };
  };
  unstable = import (builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz") {};
in
pkgs.mkShell {
  packages = with pkgs; [
    (python3.withPackages (pypkgs: with pypkgs; [
      injector
      matplotlib
      peewee
      pynvml
      pygobject3
      xlib
      pyxdg
      requests
      rx
      gtk3
      reactivex
      py3nvml
      ]))
    glib
    libgee
    #pantheon
#     lib
    wrapGAppsHook
    pkg-config
    meson
    ninja
    cmake
    gobject-introspection
    desktop-file-utils
    gtk3
    libdazzle
    libnotify
    unstable.linuxPackages.nvidia_x11
    appstream-glib
  ];

  shellHook = ''
    # Fix missing site-packages like gi
    site_packages=$(python3 -c "import site; print(site.getsitepackages()[0])")
    export PYTHONPATH="$site_packages"
  '';
}